diff --git a/.github/workflows/test-and-release.yml b/.github/workflows/test-and-release.yml index 3054242346..4f7a8a9eaf 100644 --- a/.github/workflows/test-and-release.yml +++ b/.github/workflows/test-and-release.yml @@ -14,15 +14,13 @@ jobs: uses: dhis2/workflows-platform/.github/workflows/lint.yml@v1 test: uses: dhis2/workflows-platform/.github/workflows/test.yml@v1 - e2e: - uses: dhis2/workflows-platform/.github/workflows/legacy-e2e.yml@v1 - # Disabling tests for now - if: false - # Skips forks and dependabot PRs - # if: '!github.event.push.repository.fork' - secrets: inherit - with: - api_version: 41 + # e2e: + # uses: dhis2/workflows-platform/.github/workflows/legacy-e2e.yml@v1 + # # Skips forks and dependabot PRs + # if: '!github.event.push.repository.fork' + # secrets: inherit + # with: + # api_version: 41 release: needs: [lint-commits, lint, test] uses: dhis2/workflows-platform/.github/workflows/release.yml@v1 diff --git a/package.json b/package.json index aab6a2bf07..2cca4de202 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "cypress:live": "yarn cypress:prepare 'yarn cypress:open:live'", "cypress:capture": "yarn cypress:prepare 'yarn cypress:run:capture'", "cypress:stub": "yarn cypress:prepare 'yarn cypress:run:stub'", - "jgs:start": "BROWSER=none yarn start --proxy https://debug.dhis2.org/dev" + "jgs:start": "BROWSER=none yarn start --proxy https://debug.dhis2.org/dev", + "postinstall": "patch-package" }, "devDependencies": { "@babel/plugin-syntax-dynamic-import": "^7.8.3", @@ -47,6 +48,8 @@ "fake-indexeddb": "4.0.1", "identity-obj-proxy": "^3.0.0", "jest-extended": "^4.0.2", + "patch-package": "^8.0.1", + "postinstall-postinstall": "^2.1.0", "start-server-and-test": "1.15.4" }, "dependencies": { diff --git a/patches/@js-temporal+polyfill+0.4.3.patch b/patches/@js-temporal+polyfill+0.4.3.patch new file mode 100644 index 0000000000..1c391c0ac1 --- /dev/null +++ b/patches/@js-temporal+polyfill+0.4.3.patch @@ -0,0 +1,33457 @@ +diff --git a/node_modules/@js-temporal/polyfill/dist/index.cjs b/node_modules/@js-temporal/polyfill/dist/index.cjs +index dd4fc5e..1b345ae 100644 +--- a/node_modules/@js-temporal/polyfill/dist/index.cjs ++++ b/node_modules/@js-temporal/polyfill/dist/index.cjs +@@ -1,2 +1,9197 @@ +-"use strict";function _interopDefaultLegacy(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}Object.defineProperty(exports,"__esModule",{value:!0});var e=_interopDefaultLegacy(require("jsbi"));const t={};function MakeIntrinsicClass(e,t){Object.defineProperty(e.prototype,Symbol.toStringTag,{value:t,writable:!1,enumerable:!1,configurable:!0});for(const t of Object.getOwnPropertyNames(e)){const r=Object.getOwnPropertyDescriptor(e,t);r.configurable&&r.enumerable&&(r.enumerable=!1,Object.defineProperty(e,t,r))}for(const t of Object.getOwnPropertyNames(e.prototype)){const r=Object.getOwnPropertyDescriptor(e.prototype,t);r.configurable&&r.enumerable&&(r.enumerable=!1,Object.defineProperty(e.prototype,t,r))}DefineIntrinsic(t,e),DefineIntrinsic(`${t}.prototype`,e.prototype)}function DefineIntrinsic(e,r){const o=`%${e}%`;if(void 0!==t[o])throw new Error(`intrinsic ${e} already exists`);t[o]=r}function GetIntrinsic(e){return t[e]}const r="slot-epochNanoSeconds",o="slot-timezone-identifier",n="slot-year",a="slot-month",i="slot-day",s="slot-hour",l="slot-minute",d="slot-second",m="slot-millisecond",c="slot-microsecond",u="slot-nanosecond",h="slot-calendar",T="slot-cached-instant",p="slot-time-zone",f="slot-years",y="slot-months",S="slot-weeks",w="slot-days",g="slot-hours",I="slot-minutes",D="slot-seconds",G="slot-milliseconds",v="slot-microseconds",O="slot-nanoseconds",C="slot-calendar-identifier",E=new WeakMap;function CreateSlots(e){E.set(e,Object.create(null))}function GetSlots(e){return E.get(e)}function HasSlot(e,...t){if(!e||"object"!=typeof e)return!1;const r=GetSlots(e);return!!r&&t.reduce(((e,t)=>e&&t in r),!0)}function GetSlot(e,t){const r=GetSlots(e)[t];if(void 0===r)throw new TypeError(`Missing internal slot ${t}`);return r}function SetSlot(e,t,r){GetSlots(e)[t]=r}const b=/\.[-A-Za-z_]|\.\.[-A-Za-z._]{1,12}|\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/,M=new RegExp(`(?:(?:${b.source})(?:\\/(?:${b.source}))*|Etc/GMT[-+]\\d{1,2}|${/(?:[+\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\d{1,9})?)?)?)/.source})`),R=/[A-Za-z0-9]{3,8}/,Z=new RegExp(`(?:${R.source}(?:-${R.source})*)`),P=/(?:[+\u2212-]\d{6}|\d{4})/,F=/(?:0[1-9]|1[0-2])/,Y=/(?:0[1-9]|[12]\d|3[01])/,j=new RegExp(`(${P.source})(?:-(${F.source})-(${Y.source})|(${F.source})(${Y.source}))`),$=/(\d{2})(?::(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?|(\d{2})(?:(\d{2})(?:[.,](\d{1,9}))?)?)?/,B=/([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?/,N=new RegExp(`(?:([zZ])|(?:${B.source})?)(?:\\[(${M.source})\\])?`),k=new RegExp(`\\[u-ca=(${Z.source})\\]`),A=new RegExp(`^${j.source}(?:(?:T|\\s+)${$.source})?${N.source}(?:${k.source})?$`,"i"),U=new RegExp(`^T?${$.source}(?:${N.source})?(?:${k.source})?$`,"i"),L=new RegExp(`^(${P.source})-?(${F.source})$`),x=new RegExp(`^(?:--)?(${F.source})-?(${Y.source})$`),H=/(\d+)(?:[.,](\d{1,9}))?/,q=new RegExp(`(?:${H.source}H)?(?:${H.source}M)?(?:${H.source}S)?`),W=new RegExp(`^([+−-])?P${/(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)W)?(?:(\d+)D)?/.source}(?:T(?!$)${q.source})?$`,"i"),z=Array.prototype.includes,_=Array.prototype.push,J=globalThis.Intl.DateTimeFormat,V=Math.min,X=Math.max,K=Math.abs,Q=Math.floor,ee=Math.sign,te=Math.trunc,re=Number.isNaN,oe=Number.isFinite,ne=Number,ae=String,ie=Number.MAX_SAFE_INTEGER,se=Object.assign,le=Object.create,de=Object.getOwnPropertyDescriptor,me=Object.is,ce=Reflect.apply,ue=e.default.BigInt(0),he=e.default.BigInt(1),Te=e.default.BigInt(60),pe=e.default.BigInt(1e3),fe=e.default.BigInt(1e6),ye=e.default.BigInt(1e9),Se=e.default.BigInt(-1),we=e.default.multiply(e.default.BigInt(86400),ye),ge=e.default.multiply(e.default.BigInt(-86400),e.default.BigInt(1e17)),Ie=e.default.multiply(e.default.BigInt(86400),e.default.BigInt(1e17)),De=e.default.multiply(e.default.BigInt(-388152),e.default.BigInt(1e13)),Ge=e.default.multiply(we,e.default.BigInt(3660)),ve=e.default.multiply(we,e.default.BigInt(366)),Oe=e.default.multiply(we,e.default.BigInt(14)),Ce=["iso8601","hebrew","islamic","islamic-umalqura","islamic-tbla","islamic-civil","islamic-rgsa","islamicc","persian","ethiopic","ethioaa","coptic","chinese","dangi","roc","indian","buddhist","japanese","gregory"];function IsInteger(e){if("number"!=typeof e||!oe(e))return!1;const t=K(e);return Q(t)===t}function IsObject(e){return"object"==typeof e&&null!==e||"function"==typeof e}function ToNumber(e){if("bigint"==typeof e)throw new TypeError("Cannot convert BigInt to number");return ne(e)}function ToInteger(e){const t=ToNumber(e);if(re(t))return 0;const r=te(t);return 0===t?0:r}function ToString(e){if("symbol"==typeof e)throw new TypeError("Cannot convert a Symbol value to a String");return ae(e)}function ToIntegerThrowOnInfinity(e){const t=ToInteger(e);if(!oe(t))throw new RangeError("infinity is out of range");return t}function ToPositiveInteger(e,t){const r=ToInteger(e);if(!oe(r))throw new RangeError("infinity is out of range");if(r<1){if(void 0!==t)throw new RangeError(`property '${t}' cannot be a a number less than one`);throw new RangeError("Cannot convert a number less than one to a positive integer")}return r}function ToIntegerWithoutRounding(e){const t=ToNumber(e);if(re(t))return 0;if(!oe(t))throw new RangeError("infinity is out of range");if(!IsInteger(t))throw new RangeError(`unsupported fractional value ${t}`);return ToInteger(t)}function divmod(t,r){return{quotient:e.default.divide(t,r),remainder:e.default.remainder(t,r)}}function abs(t){return e.default.lessThan(t,ue)?e.default.multiply(t,Se):t}function ArrayPush(e,...t){return _.apply(e,t),e}const Ee=new Map([["year",ToIntegerThrowOnInfinity],["month",ToPositiveInteger],["monthCode",ToString],["day",ToPositiveInteger],["hour",ToIntegerThrowOnInfinity],["minute",ToIntegerThrowOnInfinity],["second",ToIntegerThrowOnInfinity],["millisecond",ToIntegerThrowOnInfinity],["microsecond",ToIntegerThrowOnInfinity],["nanosecond",ToIntegerThrowOnInfinity],["years",ToIntegerWithoutRounding],["months",ToIntegerWithoutRounding],["weeks",ToIntegerWithoutRounding],["days",ToIntegerWithoutRounding],["hours",ToIntegerWithoutRounding],["minutes",ToIntegerWithoutRounding],["seconds",ToIntegerWithoutRounding],["milliseconds",ToIntegerWithoutRounding],["microseconds",ToIntegerWithoutRounding],["nanoseconds",ToIntegerWithoutRounding],["era",ToString],["eraYear",ToInteger],["offset",ToString]]),be=new Map([["hour",0],["minute",0],["second",0],["millisecond",0],["microsecond",0],["nanosecond",0]]),Me=[["years","year","date"],["months","month","date"],["weeks","week","date"],["days","day","date"],["hours","hour","time"],["minutes","minute","time"],["seconds","second","time"],["milliseconds","millisecond","time"],["microseconds","microsecond","time"],["nanoseconds","nanosecond","time"]],Re=new Map(Me.map((e=>[e[0],e[1]]))),Ze=new Map(Me.map((([e,t])=>[t,e]))),Pe=Me.map((([,e])=>e)),Fe=Array.from(Re.keys()).sort(),Ye=new Map;function getIntlDateTimeFormatEnUsForTimeZone(e){let t=Ye.get(e);return void 0===t&&(t=new J("en-us",{timeZone:ae(e),hour12:!1,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}),Ye.set(e,t)),t}function IsTemporalInstant(e){return HasSlot(e,r)&&!HasSlot(e,p,h)}function IsTemporalTimeZone(e){return HasSlot(e,o)}function IsTemporalCalendar(e){return HasSlot(e,C)}function IsTemporalDuration(e){return HasSlot(e,f,y,w,g,I,D,G,v,O)}function IsTemporalDate(e){return HasSlot(e,"slot-date-brand")}function IsTemporalTime(e){return HasSlot(e,s,l,d,m,c,u)&&!HasSlot(e,n,a,i)}function IsTemporalDateTime(e){return HasSlot(e,n,a,i,s,l,d,m,c,u)}function IsTemporalYearMonth(e){return HasSlot(e,"slot-year-month-brand")}function IsTemporalMonthDay(e){return HasSlot(e,"slot-month-day-brand")}function IsTemporalZonedDateTime(e){return HasSlot(e,r,p,h)}function RejectObjectWithCalendarOrTimeZone(e){if(HasSlot(e,h)||HasSlot(e,p))throw new TypeError("with() does not support a calendar or timeZone property");if(void 0!==e.calendar)throw new TypeError("with() does not support a calendar property");if(void 0!==e.timeZone)throw new TypeError("with() does not support a timeZone property")}function ParseTemporalTimeZone(e){let{ianaName:t,offset:r,z:o}=function ParseTemporalTimeZoneString(e){try{let t=GetCanonicalTimeZoneIdentifier(e);if(t)return{ianaName:t.toString()}}catch{}try{const t=ParseISODateTime(e);if(t.z||t.offset||t.ianaName)return t}catch{}throw new RangeError(`Invalid time zone: ${e}`)}(e);return t||(o?"UTC":r)}function FormatCalendarAnnotation(e,t){return"never"===t||"auto"===t&&"iso8601"===e?"":`[u-ca=${e}]`}function ParseISODateTime(e){const t=A.exec(e);if(!t)throw new RangeError(`invalid ISO 8601 string: ${e}`);let r=t[1];if("−"===r[0]&&(r=`-${r.slice(1)}`),"-000000"===r)throw new RangeError(`invalid ISO 8601 string: ${e}`);const o=ToInteger(r),n=ToInteger(t[2]||t[4]),a=ToInteger(t[3]||t[5]),i=ToInteger(t[6]),s=void 0!==t[6],l=ToInteger(t[7]||t[10]);let d=ToInteger(t[8]||t[11]);60===d&&(d=59);const m=(t[9]||t[12])+"000000000",c=ToInteger(m.slice(0,3)),u=ToInteger(m.slice(3,6)),h=ToInteger(m.slice(6,9));let T,p=!1;if(t[13])T=void 0,p=!0;else if(t[14]&&t[15]){const e="-"===t[14]||"−"===t[14]?"-":"+",r=t[15]||"00",o=t[16]||"00",n=t[17]||"00";let a=t[18]||"0";if(T=`${e}${r}:${o}`,+a){for(;a.endsWith("0");)a=a.slice(0,-1);T+=`:${n}.${a}`}else+n&&(T+=`:${n}`);"-00:00"===T&&(T="+00:00")}let f=t[19];if(f)try{f=GetCanonicalTimeZoneIdentifier(f).toString()}catch{}const y=t[20];return RejectDateTime(o,n,a,i,l,d,c,u,h),{year:o,month:n,day:a,hasTime:s,hour:i,minute:l,second:d,millisecond:c,microsecond:u,nanosecond:h,ianaName:f,offset:T,z:p,calendar:y}}function ParseTemporalYearMonthString(e){const t=L.exec(e);let r,o,n,a;if(t){let a=t[1];if("−"===a[0]&&(a=`-${a.slice(1)}`),"-000000"===a)throw new RangeError(`invalid ISO 8601 string: ${e}`);r=ToInteger(a),o=ToInteger(t[2]),n=t[3]}else{let t;if(({year:r,month:o,calendar:n,day:a,z:t}=ParseISODateTime(e)),t)throw new RangeError("Z designator not supported for PlainYearMonth")}return{year:r,month:o,calendar:n,referenceISODay:a}}function ParseTemporalMonthDayString(e){const t=x.exec(e);let r,o,n,a;if(t)r=ToInteger(t[1]),o=ToInteger(t[2]);else{let t;if(({month:r,day:o,calendar:n,year:a,z:t}=ParseISODateTime(e)),t)throw new RangeError("Z designator not supported for PlainMonthDay")}return{month:r,day:o,calendar:n,referenceISOYear:a}}function ParseTemporalDurationString(e){const t=W.exec(e);if(!t)throw new RangeError(`invalid duration: ${e}`);if(t.slice(2).every((e=>void 0===e)))throw new RangeError(`invalid duration: ${e}`);const r="-"===t[1]||"−"===t[1]?-1:1,o=ToInteger(t[2])*r,n=ToInteger(t[3])*r,a=ToInteger(t[4])*r,i=ToInteger(t[5])*r,s=ToInteger(t[6])*r;let l=t[7],d=ToInteger(t[8])*r,m=t[9],c=ToInteger(t[10])*r;const u=t[11]+"000000000";let h=ToInteger(u.slice(0,3))*r,T=ToInteger(u.slice(3,6))*r,p=ToInteger(u.slice(6,9))*r;return l=l?r*ToInteger(l)/10**l.length:0,m=m?r*ToInteger(m)/10**m.length:0,({minutes:d,seconds:c,milliseconds:h,microseconds:T,nanoseconds:p}=function DurationHandleFractions(e,t,r,o,n,a,i){let s=e,l=t,d=r,m=o,c=n,u=a,h=i;if(0!==s){[l,d,m,c,u,h].forEach((e=>{if(0!==e)throw new RangeError("only the smallest unit can be fractional")}));const e=60*s;l=te(e),d=e%1}if(0!==d){[m,c,u,h].forEach((e=>{if(0!==e)throw new RangeError("only the smallest unit can be fractional")}));const e=60*d;m=te(e);const t=e%1;if(0!==t){const e=1e3*t;c=te(e);const r=e%1;if(0!==r){const e=1e3*r;u=te(e);const t=e%1;if(0!==t){h=te(1e3*t)}}}}return{minutes:l,seconds:m,milliseconds:c,microseconds:u,nanoseconds:h}}(l,d,m,c,h,T,p)),RejectDuration(o,n,a,i,s,d,c,h,T,p),{years:o,months:n,weeks:a,days:i,hours:s,minutes:d,seconds:c,milliseconds:h,microseconds:T,nanoseconds:p}}function ParseTemporalInstant(e){let{year:t,month:r,day:o,hour:n,minute:a,second:i,millisecond:s,microsecond:l,nanosecond:d,offset:m,z:c}=function ParseTemporalInstantString(e){const t=ParseISODateTime(e);if(!t.z&&!t.offset)throw new RangeError("Temporal.Instant requires a time zone offset");return t}(e);if(!c&&!m)throw new RangeError("Temporal.Instant requires a time zone offset");const u=c?0:ParseTimeZoneOffsetString(m);({year:t,month:r,day:o,hour:n,minute:a,second:i,millisecond:s,microsecond:l,nanosecond:d}=BalanceISODateTime(t,r,o,n,a,i,s,l,d-u));const h=GetEpochFromISOParts(t,r,o,n,a,i,s,l,d);if(null===h)throw new RangeError("DateTime outside of supported range");return h}function RegulateISODate(e,t,r,o){let n=e,a=t,i=r;switch(o){case"reject":RejectISODate(n,a,i);break;case"constrain":({year:n,month:a,day:i}=ConstrainISODate(n,a,i))}return{year:n,month:a,day:i}}function RegulateTime(e,t,r,o,n,a,i){let s=e,l=t,d=r,m=o,c=n,u=a;switch(i){case"reject":RejectTime(s,l,d,m,c,u);break;case"constrain":({hour:s,minute:l,second:d,millisecond:m,microsecond:c,nanosecond:u}=function ConstrainTime(e,t,r,o,n,a){const i=ConstrainToRange(e,0,23),s=ConstrainToRange(t,0,59),l=ConstrainToRange(r,0,59),d=ConstrainToRange(o,0,999),m=ConstrainToRange(n,0,999),c=ConstrainToRange(a,0,999);return{hour:i,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}}(s,l,d,m,c,u))}return{hour:s,minute:l,second:d,millisecond:m,microsecond:c,nanosecond:u}}function ToTemporalDurationRecord(e){if(!IsObject(e))return ParseTemporalDurationString(ToString(e));if(IsTemporalDuration(e))return{years:GetSlot(e,f),months:GetSlot(e,y),weeks:GetSlot(e,S),days:GetSlot(e,w),hours:GetSlot(e,g),minutes:GetSlot(e,I),seconds:GetSlot(e,D),milliseconds:GetSlot(e,G),microseconds:GetSlot(e,v),nanoseconds:GetSlot(e,O)};const t={years:0,months:0,weeks:0,days:0,hours:0,minutes:0,seconds:0,milliseconds:0,microseconds:0,nanoseconds:0};let r=function ToTemporalPartialDurationRecord(e){if(!IsObject(e))throw new TypeError("invalid duration-like");const t={years:void 0,months:void 0,weeks:void 0,days:void 0,hours:void 0,minutes:void 0,seconds:void 0,milliseconds:void 0,microseconds:void 0,nanoseconds:void 0};let r=!1;for(const o of Fe){const n=e[o];void 0!==n&&(r=!0,t[o]=ToIntegerWithoutRounding(n))}if(!r)throw new TypeError("invalid duration-like");return t}(e);for(const e of Fe){const o=r[e];void 0!==o&&(t[e]=o)}let{years:o,months:n,weeks:a,days:i,hours:s,minutes:l,seconds:d,milliseconds:m,microseconds:c,nanoseconds:u}=t;return RejectDuration(o,n,a,i,s,l,d,m,c,u),{years:o,months:n,weeks:a,days:i,hours:s,minutes:l,seconds:d,milliseconds:m,microseconds:c,nanoseconds:u}}function ToTemporalOverflow(e){return void 0===e?"constrain":GetOption(e,"overflow",["constrain","reject"],"constrain")}function ToTemporalDisambiguation(e){return void 0===e?"compatible":GetOption(e,"disambiguation",["compatible","earlier","later","reject"],"compatible")}function ToTemporalRoundingMode(e,t){return GetOption(e,"roundingMode",["ceil","floor","trunc","halfExpand"],t)}function NegateTemporalRoundingMode(e){switch(e){case"ceil":return"floor";case"floor":return"ceil";default:return e}}function ToTemporalOffset(e,t){return void 0===e?t:GetOption(e,"offset",["prefer","use","ignore","reject"],t)}function ToShowCalendarOption(e){return GetOption(e,"calendarName",["auto","always","never"],"auto")}function ToTemporalRoundingIncrement(e,t,r){let o=1/0;void 0!==t&&(o=t),r||void 0===t||(o=t>1?t-1:1);const n=function GetNumberOption(e,t,r,o,n){let a=e[t];if(void 0===a)return n;const i=ToNumber(a);if(re(i)||io)throw new RangeError(`${String(t)} must be between ${r} and ${o}, not ${i}`);return Q(i)}(e,"roundingIncrement",1,o,1);if(void 0!==t&&t%n!=0)throw new RangeError(`Rounding increment must divide evenly into ${t}`);return n}function ToTemporalDateTimeRoundingIncrement(e,t){return ToTemporalRoundingIncrement(e,{year:void 0,month:void 0,week:void 0,day:void 0,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[t],!1)}function ToSecondsStringPrecision(e){const t=GetTemporalUnit(e,"smallestUnit","time",void 0);if("hour"===t){const e=Me.reduce(((e,[t,r,o])=>("time"===o&&"hour"!==r&&e.push(r,t),e)),[]);throw new RangeError(`smallestUnit must be one of ${e.join(", ")}, not ${t}`)}switch(t){case"minute":return{precision:"minute",unit:"minute",increment:1};case"second":return{precision:0,unit:"second",increment:1};case"millisecond":return{precision:3,unit:"millisecond",increment:1};case"microsecond":return{precision:6,unit:"microsecond",increment:1};case"nanosecond":return{precision:9,unit:"nanosecond",increment:1}}let r=e.fractionalSecondDigits;if(void 0===r&&(r="auto"),"number"!=typeof r){const e=ToString(r);if("auto"===e)return{precision:"auto",unit:"nanosecond",increment:1};throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${e}`)}if(re(r)||r<0||r>9)throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${r}`);const o=Q(r);switch(o){case 0:return{precision:o,unit:"second",increment:1};case 1:case 2:case 3:return{precision:o,unit:"millisecond",increment:10**(3-o)};case 4:case 5:case 6:return{precision:o,unit:"microsecond",increment:10**(6-o)};case 7:case 8:case 9:return{precision:o,unit:"nanosecond",increment:10**(9-o)};default:throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${r}`)}}const je=Symbol("~required~");function GetTemporalUnit(e,t,r,o,n=[]){const a=[];for(const[,e,t]of Me)"datetime"!==r&&r!==t||a.push(e);a.push(...n);let i=o;i===je?i=void 0:void 0!==i&&a.push(i);const s=[...a];for(const e of a){const t=Ze.get(e);void 0!==t&&s.push(t)}let l=GetOption(e,t,s,i);if(void 0===l&&o===je)throw new RangeError(`${t} is required`);return Re.has(l)?Re.get(l):l}function ToRelativeTemporalObject(e){const t=e.relativeTo;if(void 0===t)return t;let r,o,n,a,i,s,l,d,m,c,u,h,T="option",p=!1;if(IsObject(t)){if(IsTemporalZonedDateTime(t)||IsTemporalDate(t))return t;if(IsTemporalDateTime(t))return TemporalDateTimeToDate(t);c=GetTemporalCalendarWithISODefault(t);const e=PrepareTemporalFields(t,CalendarFields(c,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),[]),p=le(null);p.overflow="constrain",({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=InterpretTemporalDateTimeFields(c,e,p)),h=t.offset,void 0===h&&(T="wall"),u=t.timeZone}else{let e,f;({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m,calendar:c,ianaName:e,offset:h,z:f}=ParseISODateTime(ToString(t))),e&&(u=e),f?T="exact":h||(T="wall"),c||(c=GetISO8601Calendar()),c=ToTemporalCalendar(c),p=!0}if(void 0!==u){u=ToTemporalTimeZone(u);let e=0;"option"===T&&(e=ParseTimeZoneOffsetString(ToString(h)));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(r,o,n,a,i,s,l,d,m,T,e,u,"compatible","reject",p),u,c)}return CreateTemporalDate(r,o,n,c)}function DefaultTemporalLargestUnit(e,t,r,o,n,a,i,s,l,d){for(const[m,c]of[["years",e],["months",t],["weeks",r],["days",o],["hours",n],["minutes",a],["seconds",i],["milliseconds",s],["microseconds",l],["nanoseconds",d]])if(0!==c)return Re.get(m);return"nanosecond"}function LargerOfTwoTemporalUnits(e,t){return Pe.indexOf(e)>Pe.indexOf(t)?t:e}function MergeLargestUnitOption(e,t){let r=e;return void 0===r&&(r=le(null)),se(le(null),r,{largestUnit:t})}function PrepareTemporalFields(e,t,r,{emptySourceErrorMessage:o}={emptySourceErrorMessage:"no supported properties found"}){const n=le(null);let a=!1;for(const o of t){let t=e[o];if(void 0!==t)a=!0,Ee.has(o)&&(t=Ee.get(o)(t)),n[o]=t;else if("partial"!==r){if(z.call(r,o))throw new TypeError(`required property '${o}' missing or undefined`);t=be.get(o),n[o]=t}}if("partial"===r&&!a)throw new TypeError(o);if(void 0===n.era!=(void 0===n.eraYear))throw new RangeError("properties 'era' and 'eraYear' must be provided together");return n}function ToTemporalTimeRecord(e,t="complete"){const r=["hour","microsecond","millisecond","minute","nanosecond","second"],o=PrepareTemporalFields(e,r,"partial",{emptySourceErrorMessage:"invalid time-like"}),n={};for(const e of r){const r=de(o,e);void 0!==r?n[e]=r.value:"complete"===t&&(n[e]=0)}return n}function ToTemporalDate(e,t){let r=e;if(IsObject(r)){if(IsTemporalDate(r))return r;if(IsTemporalZonedDateTime(r)&&(ToTemporalOverflow(t),r=BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(r,p),GetSlot(r,T),GetSlot(r,h))),IsTemporalDateTime(r))return ToTemporalOverflow(t),CreateTemporalDate(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(r,h));const e=GetTemporalCalendarWithISODefault(r);return CalendarDateFromFields(e,PrepareTemporalFields(r,CalendarFields(e,["day","month","monthCode","year"]),[]),t)}ToTemporalOverflow(t);const{year:o,month:s,day:l,calendar:d,z:m}=function ParseTemporalDateString(e){return ParseISODateTime(e)}(ToString(r));if(m)throw new RangeError("Z designator not supported for PlainDate");return new(GetIntrinsic("%Temporal.PlainDate%"))(o,s,l,d)}function InterpretTemporalDateTimeFields(e,t,r){let{hour:o,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}=ToTemporalTimeRecord(t);const u=ToTemporalOverflow(r),h=CalendarDateFromFields(e,t,r),T=GetSlot(h,n),p=GetSlot(h,a),f=GetSlot(h,i);return({hour:o,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}=RegulateTime(o,s,l,d,m,c,u)),{year:T,month:p,day:f,hour:o,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}}function ToTemporalDateTime(e,t){let r,o,s,l,d,m,c,u,f,y;if(IsObject(e)){if(IsTemporalDateTime(e))return e;if(IsTemporalZonedDateTime(e))return ToTemporalOverflow(t),BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(e,p),GetSlot(e,T),GetSlot(e,h));if(IsTemporalDate(e))return ToTemporalOverflow(t),CreateTemporalDateTime(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),0,0,0,0,0,0,GetSlot(e,h));y=GetTemporalCalendarWithISODefault(e);const S=PrepareTemporalFields(e,CalendarFields(y,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),[]);({year:r,month:o,day:s,hour:l,minute:d,second:m,millisecond:c,microsecond:u,nanosecond:f}=InterpretTemporalDateTimeFields(y,S,t))}else{let n;if(ToTemporalOverflow(t),({year:r,month:o,day:s,hour:l,minute:d,second:m,millisecond:c,microsecond:u,nanosecond:f,calendar:y,z:n}=function ParseTemporalDateTimeString(e){return ParseISODateTime(e)}(ToString(e))),n)throw new RangeError("Z designator not supported for PlainDateTime");RejectDateTime(r,o,s,l,d,m,c,u,f),void 0===y&&(y=GetISO8601Calendar()),y=ToTemporalCalendar(y)}return CreateTemporalDateTime(r,o,s,l,d,m,c,u,f,y)}function ToTemporalDuration(e){if(IsTemporalDuration(e))return e;let{years:t,months:r,weeks:o,days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=ToTemporalDurationRecord(e);return new(GetIntrinsic("%Temporal.Duration%"))(t,r,o,n,a,i,s,l,d,m)}function ToTemporalInstant(e){if(IsTemporalInstant(e))return e;if(IsTemporalZonedDateTime(e)){return new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(e,r))}const t=ParseTemporalInstant(ToString(e));return new(GetIntrinsic("%Temporal.Instant%"))(t)}function ToTemporalMonthDay(e,t){let r=e;if(IsObject(r)){if(IsTemporalMonthDay(r))return r;let e,o;if(HasSlot(r,h))e=GetSlot(r,h),o=!1;else{let t=r.calendar;o=void 0===t,void 0===t&&(t=GetISO8601Calendar()),e=ToTemporalCalendar(t)}r=r;const n=PrepareTemporalFields(r,CalendarFields(e,["day","month","monthCode","year"]),[]);return o&&void 0!==n.month&&void 0===n.monthCode&&void 0===n.year&&(n.year=1972),CalendarMonthDayFromFields(e,n,t)}ToTemporalOverflow(t);let{month:o,day:n,referenceISOYear:a,calendar:i}=ParseTemporalMonthDayString(ToString(r)),s=i;if(void 0===s&&(s=GetISO8601Calendar()),s=ToTemporalCalendar(s),void 0===a)return RejectISODate(1972,o,n),CreateTemporalMonthDay(o,n,s);return CalendarMonthDayFromFields(s,CreateTemporalMonthDay(o,n,s,a))}function ToTemporalTime(e,t="constrain"){let r,o,n,a,i,f,y,S=e;if(IsObject(S)){if(IsTemporalTime(S))return S;if(IsTemporalZonedDateTime(S)&&(S=BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(S,p),GetSlot(S,T),GetSlot(S,h))),IsTemporalDateTime(S)){return new(GetIntrinsic("%Temporal.PlainTime%"))(GetSlot(S,s),GetSlot(S,l),GetSlot(S,d),GetSlot(S,m),GetSlot(S,c),GetSlot(S,u))}if(y=GetTemporalCalendarWithISODefault(S),"iso8601"!==ToString(y))throw new RangeError("PlainTime can only have iso8601 calendar");({hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:f}=ToTemporalTimeRecord(S)),({hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:f}=RegulateTime(r,o,n,a,i,f,t))}else if(({hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:f,calendar:y}=function ParseTemporalTimeString(e){const t=U.exec(e);let r,o,n,a,i,s,l;if(t){r=ToInteger(t[1]),o=ToInteger(t[2]||t[5]),n=ToInteger(t[3]||t[6]),60===n&&(n=59);const e=(t[4]||t[7])+"000000000";a=ToInteger(e.slice(0,3)),i=ToInteger(e.slice(3,6)),s=ToInteger(e.slice(6,9)),l=t[15]}else{let t,d;if(({hasTime:d,hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:s,calendar:l,z:t}=ParseISODateTime(e)),!d)throw new RangeError(`time is missing in string: ${e}`);if(t)throw new RangeError("Z designator not supported for PlainTime")}if(/[tT ][0-9][0-9]/.test(e))return{hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:s,calendar:l};try{const{month:t,day:r}=ParseTemporalMonthDayString(e);RejectISODate(1972,t,r)}catch{try{const{year:t,month:r}=ParseTemporalYearMonthString(e);RejectISODate(t,r,1)}catch{return{hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:s,calendar:l}}}throw new RangeError(`invalid ISO 8601 time-only string ${e}; may need a T prefix`)}(ToString(S))),RejectTime(r,o,n,a,i,f),void 0!==y&&"iso8601"!==y)throw new RangeError("PlainTime can only have iso8601 calendar");return new(GetIntrinsic("%Temporal.PlainTime%"))(r,o,n,a,i,f)}function ToTemporalYearMonth(e,t){if(IsObject(e)){if(IsTemporalYearMonth(e))return e;const r=GetTemporalCalendarWithISODefault(e);return CalendarYearMonthFromFields(r,PrepareTemporalFields(e,CalendarFields(r,["month","monthCode","year"]),[]),t)}ToTemporalOverflow(t);let{year:r,month:o,referenceISODay:n,calendar:a}=ParseTemporalYearMonthString(ToString(e)),i=a;if(void 0===i&&(i=GetISO8601Calendar()),i=ToTemporalCalendar(i),void 0===n)return RejectISODate(r,o,1),CreateTemporalYearMonth(r,o,i);return CalendarYearMonthFromFields(i,CreateTemporalYearMonth(r,o,i,n))}function InterpretISODateTimeOffset(t,n,a,i,s,l,d,m,c,u,h,T,p,f,y){const S=new(GetIntrinsic("%Temporal.PlainDateTime%"))(t,n,a,i,s,l,d,m,c);if("wall"===u||"ignore"===f){return GetSlot(BuiltinTimeZoneGetInstantFor(T,S,p),r)}if("exact"===u||"use"===f){const r=GetEpochFromISOParts(t,n,a,i,s,l,d,m,c);if(null===r)throw new RangeError("ZonedDateTime outside of supported range");return e.default.subtract(r,e.default.BigInt(h))}const w=GetPossibleInstantsFor(T,S);for(const t of w){const o=GetOffsetNanosecondsFor(T,t),n=e.default.toNumber(RoundNumberToIncrement(e.default.BigInt(o),6e10,"halfExpand"));if(o===h||y&&n===h)return GetSlot(t,r)}if("reject"===f){const e=FormatTimeZoneOffsetString(h),t=IsTemporalTimeZone(T)?GetSlot(T,o):"time zone";throw new RangeError(`Offset ${e} is invalid for ${S.toString()} in ${t}`)}return GetSlot(DisambiguatePossibleInstants(w,T,S,p),r)}function ToTemporalZonedDateTime(e,t){let r,o,n,a,i,s,l,d,m,c,u,h,T=!1,p="option";if(IsObject(e)){if(IsTemporalZonedDateTime(e))return e;h=GetTemporalCalendarWithISODefault(e);const T=PrepareTemporalFields(e,ArrayPush(CalendarFields(h,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),"timeZone","offset"),["timeZone"]);({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=InterpretTemporalDateTimeFields(h,T,t)),c=ToTemporalTimeZone(T.timeZone),u=T.offset,void 0===u?p="wall":u=ToString(u)}else{let f,y;if(ToTemporalOverflow(t),({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m,ianaName:f,offset:u,z:y,calendar:h}=function ParseTemporalZonedDateTimeString(e){const t=ParseISODateTime(e);if(!t.ianaName)throw new RangeError("Temporal.ZonedDateTime requires a time zone ID in brackets");return t}(ToString(e))),!f)throw new RangeError("time zone ID required in brackets");y?p="exact":u||(p="wall");c=new(GetIntrinsic("%Temporal.TimeZone%"))(f),h||(h=GetISO8601Calendar()),h=ToTemporalCalendar(h),T=!0}let f=0;"option"===p&&(f=ParseTimeZoneOffsetString(u));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(r,o,n,a,i,s,l,d,m,p,f,c,ToTemporalDisambiguation(t),ToTemporalOffset(t,"reject"),T),c,h)}function CreateTemporalDateSlots(e,t,r,o,s){RejectISODate(t,r,o),RejectDateRange(t,r,o),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,a,r),SetSlot(e,i,o),SetSlot(e,h,s),SetSlot(e,"slot-date-brand",!0)}function CreateTemporalDate(e,t,r,o=GetISO8601Calendar()){const n=GetIntrinsic("%Temporal.PlainDate%"),a=le(n.prototype);return CreateTemporalDateSlots(a,e,t,r,o),a}function CreateTemporalDateTimeSlots(e,t,r,o,T,p,f,y,S,w,g){RejectDateTime(t,r,o,T,p,f,y,S,w),RejectDateTimeRange(t,r,o,T,p,f,y,S,w),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,a,r),SetSlot(e,i,o),SetSlot(e,s,T),SetSlot(e,l,p),SetSlot(e,d,f),SetSlot(e,m,y),SetSlot(e,c,S),SetSlot(e,u,w),SetSlot(e,h,g)}function CreateTemporalDateTime(e,t,r,o,n,a,i,s,l,d=GetISO8601Calendar()){const m=GetIntrinsic("%Temporal.PlainDateTime%"),c=le(m.prototype);return CreateTemporalDateTimeSlots(c,e,t,r,o,n,a,i,s,l,d),c}function CreateTemporalMonthDaySlots(e,t,r,o,s){RejectISODate(s,t,r),RejectDateRange(s,t,r),CreateSlots(e),SetSlot(e,a,t),SetSlot(e,i,r),SetSlot(e,n,s),SetSlot(e,h,o),SetSlot(e,"slot-month-day-brand",!0)}function CreateTemporalMonthDay(e,t,r=GetISO8601Calendar(),o=1972){const n=GetIntrinsic("%Temporal.PlainMonthDay%"),a=le(n.prototype);return CreateTemporalMonthDaySlots(a,e,t,r,o),a}function CreateTemporalYearMonthSlots(e,t,r,o,s){RejectISODate(t,r,s),function RejectYearMonthRange(e,t){RejectToRange(e,-271821,275760),-271821===e?RejectToRange(t,4,12):275760===e&&RejectToRange(t,1,9)}(t,r),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,a,r),SetSlot(e,i,s),SetSlot(e,h,o),SetSlot(e,"slot-year-month-brand",!0)}function CreateTemporalYearMonth(e,t,r=GetISO8601Calendar(),o=1){const n=GetIntrinsic("%Temporal.PlainYearMonth%"),a=le(n.prototype);return CreateTemporalYearMonthSlots(a,e,t,r,o),a}function CreateTemporalZonedDateTimeSlots(e,t,o,n){ValidateEpochNanoseconds(t),CreateSlots(e),SetSlot(e,r,t),SetSlot(e,p,o),SetSlot(e,h,n);const a=new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(e,r));SetSlot(e,T,a)}function CreateTemporalZonedDateTime(e,t,r=GetISO8601Calendar()){const o=GetIntrinsic("%Temporal.ZonedDateTime%"),n=le(o.prototype);return CreateTemporalZonedDateTimeSlots(n,e,t,r),n}function GetISO8601Calendar(){return new(GetIntrinsic("%Temporal.Calendar%"))("iso8601")}function CalendarFields(e,t){let r=t;e.fields&&(r=e.fields(r));const o=[];for(const e of r){if("string"!=typeof e)throw new TypeError("bad return from calendar.fields()");_.call(o,e)}return o}function CalendarMergeFields(e,t,r){const o=e.mergeFields;if(!o)return{...t,...r};const n=Reflect.apply(o,e,[t,r]);if(!IsObject(n))throw new TypeError("bad return from calendar.mergeFields()");return n}function CalendarDateAdd(e,t,r,o,n){let a=n;void 0===a&&(a=e.dateAdd);const i=ce(a,e,[t,r,o]);if(!IsTemporalDate(i))throw new TypeError("invalid result");return i}function CalendarDateUntil(e,t,r,o,n){let a=n;void 0===a&&(a=e.dateUntil);const i=ce(a,e,[t,r,o]);if(!IsTemporalDuration(i))throw new TypeError("invalid result");return i}function CalendarYear(e,t){const r=e.year(t);if(void 0===r)throw new RangeError("calendar year result must be an integer");return ToIntegerThrowOnInfinity(r)}function CalendarMonth(e,t){const r=e.month(t);if(void 0===r)throw new RangeError("calendar month result must be a positive integer");return ToPositiveInteger(r)}function CalendarMonthCode(e,t){const r=e.monthCode(t);if(void 0===r)throw new RangeError("calendar monthCode result must be a string");return ToString(r)}function CalendarDay(e,t){const r=e.day(t);if(void 0===r)throw new RangeError("calendar day result must be a positive integer");return ToPositiveInteger(r)}function CalendarEra(e,t){let r=e.era(t);return void 0!==r&&(r=ToString(r)),r}function CalendarEraYear(e,t){let r=e.eraYear(t);return void 0!==r&&(r=ToIntegerThrowOnInfinity(r)),r}function CalendarDayOfWeek(e,t){return e.dayOfWeek(t)}function CalendarDayOfYear(e,t){return e.dayOfYear(t)}function CalendarWeekOfYear(e,t){return e.weekOfYear(t)}function CalendarDaysInWeek(e,t){return e.daysInWeek(t)}function CalendarDaysInMonth(e,t){return e.daysInMonth(t)}function CalendarDaysInYear(e,t){return e.daysInYear(t)}function CalendarMonthsInYear(e,t){return e.monthsInYear(t)}function CalendarInLeapYear(e,t){return e.inLeapYear(t)}function ToTemporalCalendar(e){let t=e;if(IsObject(t)){if(HasSlot(t,h))return GetSlot(t,h);if(!("calendar"in t))return t;if(t=t.calendar,IsObject(t)&&!("calendar"in t))return t}const r=ToString(t),o=GetIntrinsic("%Temporal.Calendar%");if(IsBuiltinCalendar(r))return new o(r);let n;try{({calendar:n}=ParseISODateTime(r))}catch{throw new RangeError(`Invalid calendar: ${r}`)}return n||(n="iso8601"),new o(n)}function GetTemporalCalendarWithISODefault(e){if(HasSlot(e,h))return GetSlot(e,h);const{calendar:t}=e;return void 0===t?GetISO8601Calendar():ToTemporalCalendar(t)}function CalendarEquals(e,t){if(e===t)return!0;return ToString(e)===ToString(t)}function ConsolidateCalendars(e,t){if(e===t)return t;const r=ToString(e),o=ToString(t);if(r===o||"iso8601"===r)return t;if("iso8601"===o)return e;throw new RangeError("irreconcilable calendars")}function CalendarDateFromFields(e,t,r){const o=e.dateFromFields(t,r);if(!IsTemporalDate(o))throw new TypeError("invalid result");return o}function CalendarYearMonthFromFields(e,t,r){const o=e.yearMonthFromFields(t,r);if(!IsTemporalYearMonth(o))throw new TypeError("invalid result");return o}function CalendarMonthDayFromFields(e,t,r){const o=e.monthDayFromFields(t,r);if(!IsTemporalMonthDay(o))throw new TypeError("invalid result");return o}function ToTemporalTimeZone(e){let t=e;if(IsObject(t)){if(IsTemporalZonedDateTime(t))return GetSlot(t,p);if(!("timeZone"in t))return t;if(t=t.timeZone,IsObject(t)&&!("timeZone"in t))return t}const r=ParseTemporalTimeZone(ToString(t));return new(GetIntrinsic("%Temporal.TimeZone%"))(r)}function TimeZoneEquals(e,t){if(e===t)return!0;return ToString(e)===ToString(t)}function TemporalDateTimeToDate(e){return CreateTemporalDate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(e,h))}function TemporalDateTimeToTime(e){return new(GetIntrinsic("%Temporal.PlainTime%"))(GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,u))}function GetOffsetNanosecondsFor(e,t){let r=e.getOffsetNanosecondsFor;if("function"!=typeof r)throw new TypeError("getOffsetNanosecondsFor not callable");const o=Reflect.apply(r,e,[t]);if("number"!=typeof o)throw new TypeError("bad return from getOffsetNanosecondsFor");if(!IsInteger(o)||K(o)>864e11)throw new RangeError("out-of-range return from getOffsetNanosecondsFor");return o}function BuiltinTimeZoneGetOffsetStringFor(e,t){return FormatTimeZoneOffsetString(GetOffsetNanosecondsFor(e,t))}function BuiltinTimeZoneGetPlainDateTimeFor(e,t,o){const n=GetSlot(t,r),a=GetOffsetNanosecondsFor(e,t);let{year:i,month:s,day:l,hour:d,minute:m,second:c,millisecond:u,microsecond:h,nanosecond:T}=GetISOPartsFromEpoch(n);return({year:i,month:s,day:l,hour:d,minute:m,second:c,millisecond:u,microsecond:h,nanosecond:T}=BalanceISODateTime(i,s,l,d,m,c,u,h,T+a)),CreateTemporalDateTime(i,s,l,d,m,c,u,h,T,o)}function BuiltinTimeZoneGetInstantFor(e,t,r){return DisambiguatePossibleInstants(GetPossibleInstantsFor(e,t),e,t,r)}function DisambiguatePossibleInstants(t,r,o,T){const p=GetIntrinsic("%Temporal.Instant%"),f=t.length;if(1===f)return t[0];if(f)switch(T){case"compatible":case"earlier":return t[0];case"later":return t[f-1];case"reject":throw new RangeError("multiple instants found")}const y=GetSlot(o,n),S=GetSlot(o,a),w=GetSlot(o,i),g=GetSlot(o,s),I=GetSlot(o,l),D=GetSlot(o,d),G=GetSlot(o,m),v=GetSlot(o,c),O=GetSlot(o,u),C=GetEpochFromISOParts(y,S,w,g,I,D,G,v,O);if(null===C)throw new RangeError("DateTime outside of supported range");const E=new p(e.default.subtract(C,we)),b=new p(e.default.add(C,we)),M=GetOffsetNanosecondsFor(r,E),R=GetOffsetNanosecondsFor(r,b)-M;switch(T){case"earlier":{const e=GetSlot(o,h),t=GetIntrinsic("%Temporal.PlainDateTime%"),n=AddDateTime(y,S,w,g,I,D,G,v,O,e,0,0,0,0,0,0,0,0,0,-R,void 0);return GetPossibleInstantsFor(r,new t(n.year,n.month,n.day,n.hour,n.minute,n.second,n.millisecond,n.microsecond,n.nanosecond,e))[0]}case"compatible":case"later":{const e=GetSlot(o,h),t=GetIntrinsic("%Temporal.PlainDateTime%"),n=AddDateTime(y,S,w,g,I,D,G,v,O,e,0,0,0,0,0,0,0,0,0,R,void 0),a=GetPossibleInstantsFor(r,new t(n.year,n.month,n.day,n.hour,n.minute,n.second,n.millisecond,n.microsecond,n.nanosecond,e));return a[a.length-1]}case"reject":throw new RangeError("no such instant found")}}function GetPossibleInstantsFor(e,t){const r=e.getPossibleInstantsFor(t),o=[];for(const e of r){if(!IsTemporalInstant(e))throw new TypeError("bad return from getPossibleInstantsFor");_.call(o,e)}return o}function ISOYearString(e){let t;if(e<0||e>9999){t=(e<0?"-":"+")+`000000${K(e)}`.slice(-6)}else t=`0000${e}`.slice(-4);return t}function ISODateTimePartString(e){return`00${e}`.slice(-2)}function FormatSecondsStringPart(e,t,r,o,n){if("minute"===n)return"";const a=`:${ISODateTimePartString(e)}`;let i,s=1e6*t+1e3*r+o;if("auto"===n){if(0===s)return a;for(i=`${s}`.padStart(9,"0");"0"===i[i.length-1];)i=i.slice(0,-1)}else{if(0===n)return a;i=`${s}`.padStart(9,"0").slice(0,n)}return`${a}.${i}`}function TemporalInstantToString(e,t,r){let o=t;if(void 0===o){o=new(GetIntrinsic("%Temporal.TimeZone%"))("UTC")}const h=BuiltinTimeZoneGetPlainDateTimeFor(o,e,GetISO8601Calendar()),T=ISOYearString(GetSlot(h,n)),p=ISODateTimePartString(GetSlot(h,a)),f=ISODateTimePartString(GetSlot(h,i)),y=ISODateTimePartString(GetSlot(h,s)),S=ISODateTimePartString(GetSlot(h,l)),w=FormatSecondsStringPart(GetSlot(h,d),GetSlot(h,m),GetSlot(h,c),GetSlot(h,u),r);let g="Z";if(void 0!==t){g=FormatISOTimeZoneOffsetString(GetOffsetNanosecondsFor(o,e))}return`${T}-${p}-${f}T${y}:${S}${w}${g}`}function TemporalDurationToString(t,r="auto",o){function formatNumber(t){return t<=ie?t.toString(10):e.default.BigInt(t).toString(10)}const n=GetSlot(t,f),a=GetSlot(t,y),i=GetSlot(t,S),s=GetSlot(t,w),l=GetSlot(t,g),d=GetSlot(t,I);let m=GetSlot(t,D),c=GetSlot(t,G),u=GetSlot(t,v),h=GetSlot(t,O);const T=DurationSign(n,a,i,s,l,d,m,c,u,h);if(o){const{unit:e,increment:t,roundingMode:r}=o;({seconds:m,milliseconds:c,microseconds:u,nanoseconds:h}=RoundDuration(0,0,0,0,0,0,m,c,u,h,t,e,r))}const p=[];n&&p.push(`${formatNumber(K(n))}Y`),a&&p.push(`${formatNumber(K(a))}M`),i&&p.push(`${formatNumber(K(i))}W`),s&&p.push(`${formatNumber(K(s))}D`);const C=[];l&&C.push(`${formatNumber(K(l))}H`),d&&C.push(`${formatNumber(K(d))}M`);const E=[];let b,M,R,Z,P=TotalDurationNanoseconds(0,0,0,m,c,u,h,0);({quotient:P,remainder:b}=divmod(P,pe)),({quotient:P,remainder:M}=divmod(P,pe)),({quotient:Z,remainder:R}=divmod(P,pe));const F=1e6*K(e.default.toNumber(R))+1e3*K(e.default.toNumber(M))+K(e.default.toNumber(b));let Y;if("auto"===r){if(0!==F)for(Y=`${F}`.padStart(9,"0");"0"===Y[Y.length-1];)Y=Y.slice(0,-1)}else 0!==r&&(Y=`${F}`.padStart(9,"0").slice(0,r));return Y&&E.unshift(".",Y),e.default.equal(Z,ue)&&!E.length&&"auto"===r||E.unshift(abs(Z).toString()),E.length&&C.push(`${E.join("")}S`),C.length&&C.unshift("T"),p.length||C.length?`${T<0?"-":""}P${p.join("")}${C.join("")}`:"PT0S"}function TemporalDateToString(e,t="auto"){return`${ISOYearString(GetSlot(e,n))}-${ISODateTimePartString(GetSlot(e,a))}-${ISODateTimePartString(GetSlot(e,i))}${FormatCalendarAnnotation(ToString(GetSlot(e,h)),t)}`}function TemporalDateTimeToString(e,t,r="auto",o){let T=GetSlot(e,n),p=GetSlot(e,a),f=GetSlot(e,i),y=GetSlot(e,s),S=GetSlot(e,l),w=GetSlot(e,d),g=GetSlot(e,m),I=GetSlot(e,c),D=GetSlot(e,u);if(o){const{unit:e,increment:t,roundingMode:r}=o;({year:T,month:p,day:f,hour:y,minute:S,second:w,millisecond:g,microsecond:I,nanosecond:D}=RoundISODateTime(T,p,f,y,S,w,g,I,D,t,e,r))}return`${ISOYearString(T)}-${ISODateTimePartString(p)}-${ISODateTimePartString(f)}T${ISODateTimePartString(y)}:${ISODateTimePartString(S)}${FormatSecondsStringPart(w,g,I,D,t)}${FormatCalendarAnnotation(ToString(GetSlot(e,h)),r)}`}function TemporalMonthDayToString(e,t="auto"){let r=`${ISODateTimePartString(GetSlot(e,a))}-${ISODateTimePartString(GetSlot(e,i))}`;const o=ToString(GetSlot(e,h));if("always"===t||"iso8601"!==o){r=`${ISOYearString(GetSlot(e,n))}-${r}`}const s=FormatCalendarAnnotation(o,t);return s&&(r+=s),r}function TemporalYearMonthToString(e,t="auto"){let r=`${ISOYearString(GetSlot(e,n))}-${ISODateTimePartString(GetSlot(e,a))}`;const o=ToString(GetSlot(e,h));if("always"===t||"iso8601"!==o){r+=`-${ISODateTimePartString(GetSlot(e,i))}`}const s=FormatCalendarAnnotation(o,t);return s&&(r+=s),r}function TemporalZonedDateTimeToString(e,t,o="auto",f="auto",y="auto",S){let w=GetSlot(e,T);if(S){const{unit:t,increment:o,roundingMode:n}=S,a=RoundInstant(GetSlot(e,r),o,t,n);w=new(GetIntrinsic("%Temporal.Instant%"))(a)}const g=GetSlot(e,p),I=BuiltinTimeZoneGetPlainDateTimeFor(g,w,GetISO8601Calendar());let D=`${ISOYearString(GetSlot(I,n))}-${ISODateTimePartString(GetSlot(I,a))}-${ISODateTimePartString(GetSlot(I,i))}T${ISODateTimePartString(GetSlot(I,s))}:${ISODateTimePartString(GetSlot(I,l))}${FormatSecondsStringPart(GetSlot(I,d),GetSlot(I,m),GetSlot(I,c),GetSlot(I,u),t)}`;if("never"!==y){D+=FormatISOTimeZoneOffsetString(GetOffsetNanosecondsFor(g,w))}"never"!==f&&(D+=`[${g}]`);return D+=FormatCalendarAnnotation(ToString(GetSlot(e,h)),o),D}function TestTimeZoneOffsetString(e){return Be.test(ae(e))}function ParseTimeZoneOffsetString(e){const t=Be.exec(ae(e));if(!t)throw new RangeError(`invalid time zone offset: ${e}`);return("-"===t[1]||"−"===t[1]?-1:1)*(1e9*(60*(60*+t[2]+ +(t[3]||0))+ +(t[4]||0))+ +((t[5]||0)+"000000000").slice(0,9))}function GetCanonicalTimeZoneIdentifier(e){if(TestTimeZoneOffsetString(e)){return FormatTimeZoneOffsetString(ParseTimeZoneOffsetString(e))}return getIntlDateTimeFormatEnUsForTimeZone(ae(e)).resolvedOptions().timeZone}function GetIANATimeZoneOffsetNanoseconds(t,r){const{year:o,month:n,day:a,hour:i,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}=GetIANATimeZoneDateTimeParts(t,r),u=GetEpochFromISOParts(o,n,a,i,s,l,d,m,c);if(null===u)throw new RangeError("Date outside of supported range");return e.default.toNumber(e.default.subtract(u,t))}function FormatTimeZoneOffsetString(e){const t=e<0?"-":"+",r=K(e),o=r%1e9,n=Q(r/1e9)%60,a=Q(r/6e10)%60,i=ISODateTimePartString(Q(r/36e11)),s=ISODateTimePartString(a),l=ISODateTimePartString(n);let d="";if(o){let e=`${o}`.padStart(9,"0");for(;"0"===e[e.length-1];)e=e.slice(0,-1);d=`:${l}.${e}`}else n&&(d=`:${l}`);return`${t}${i}:${s}${d}`}function FormatISOTimeZoneOffsetString(t){let r=e.default.toNumber(RoundNumberToIncrement(e.default.BigInt(t),6e10,"halfExpand"));const o=r<0?"-":"+";r=K(r);const n=r/6e10%60;return`${o}${ISODateTimePartString(Q(r/36e11))}:${ISODateTimePartString(n)}`}function GetEpochFromISOParts(t,r,o,n,a,i,s,l,d){const m=new Date;m.setUTCHours(n,a,i,s),m.setUTCFullYear(t,r-1,o);const c=m.getTime();if(re(c))return null;let u=e.default.multiply(e.default.BigInt(c),fe);return u=e.default.add(u,e.default.multiply(e.default.BigInt(l),pe)),u=e.default.add(u,e.default.BigInt(d)),e.default.lessThan(u,ge)||e.default.greaterThan(u,Ie)?null:u}function GetISOPartsFromEpoch(t){const{quotient:r,remainder:o}=divmod(t,fe);let n=e.default.toNumber(r),a=e.default.toNumber(o);a<0&&(a+=1e6,n-=1);const i=Q(a/1e3)%1e3,s=a%1e3,l=new Date(n);return{epochMilliseconds:n,year:l.getUTCFullYear(),month:l.getUTCMonth()+1,day:l.getUTCDate(),hour:l.getUTCHours(),minute:l.getUTCMinutes(),second:l.getUTCSeconds(),millisecond:l.getUTCMilliseconds(),microsecond:i,nanosecond:s}}function GetIANATimeZoneDateTimeParts(e,t){const{epochMilliseconds:r,millisecond:o,microsecond:n,nanosecond:a}=GetISOPartsFromEpoch(e),{year:i,month:s,day:l,hour:d,minute:m,second:c}=function GetFormatterParts(e,t){const r=getIntlDateTimeFormatEnUsForTimeZone(e);return function parseFromEnUsFormat(e){const t=e.split(/[^\w]+/);if(7!==t.length)throw new RangeError(`expected 7 parts in "${e}`);const r=+t[0],o=+t[1];let n=+t[2];const a=t[3].toUpperCase();if("B"===a||"BC"===a)n=1-n;else if("A"!==a&&"AD"!==a)throw new RangeError(`Unknown era ${a} in "${e}`);let i=+t[4];24===i&&(i=0);const s=+t[5],l=+t[6];if(!(oe(n)&&oe(r)&&oe(o)&&oe(i)&&oe(s)&&oe(l)))throw new RangeError(`Invalid number in "${e}`);return{year:n,month:r,day:o,hour:i,minute:s,second:l}}(r.format(new Date(t)))}(t,r);return BalanceISODateTime(i,s,l,d,m,c,o,n,a)}function maxJSBI(t,r){return e.default.lessThan(t,r)?r:t}function afterLatestPossibleTzdbRuleChange(){return e.default.add($e(),Ge)}function GetIANATimeZonePreviousTransition(t,r){const o=afterLatestPossibleTzdbRuleChange(),n=e.default.greaterThan(t,o),a=n?e.default.subtract(t,ve):De;let i=e.default.subtract(t,he);const s=GetIANATimeZoneOffsetNanoseconds(i,r);let l=i,d=s;for(;s===d&&e.default.greaterThan(i,a);)l=e.default.subtract(i,Oe),d=GetIANATimeZoneOffsetNanoseconds(l,r),s===d&&(i=l);if(s===d){if(n){return GetIANATimeZonePreviousTransition(e.default.subtract(o,we),r)}return null}return bisect((e=>GetIANATimeZoneOffsetNanoseconds(e,r)),l,i,d,s)}function LeapYear(e){if(void 0===e)return!1;return e%4==0&&(!(e%100==0)||e%400==0)}function ISODaysInMonth(e,t){return{standard:[31,28,31,30,31,30,31,31,30,31,30,31],leapyear:[31,29,31,30,31,30,31,31,30,31,30,31]}[LeapYear(e)?"leapyear":"standard"][t-1]}function DayOfWeek(e,t,r){const o=t+(t<3?10:-2),n=e-(t<3?1:0),a=Q(n/100),i=n-100*a,s=(r+Q(2.6*o-.2)+(i+Q(i/4))+(Q(a/4)-2*a))%7;return s+(s<=0?7:0)}function DayOfYear(e,t,r){let o=r;for(let r=t-1;r>0;r--)o+=ISODaysInMonth(e,r);return o}function DurationSign(e,t,r,o,n,a,i,s,l,d){for(const m of[e,t,r,o,n,a,i,s,l,d])if(0!==m)return m<0?-1:1;return 0}function BalanceISOYearMonth(e,t){let r=e,o=t;if(!oe(r)||!oe(o))throw new RangeError("infinity is out of range");return o-=1,r+=Q(o/12),o%=12,o<0&&(o+=12),o+=1,{year:r,month:o}}function BalanceISODate(e,t,r){let o=e,n=t,a=r;if(!oe(a))throw new RangeError("infinity is out of range");({year:o,month:n}=BalanceISOYearMonth(o,n));let i=0,s=n>2?o:o-1;for(;i=LeapYear(s)?366:365,a<-i;)o-=1,s-=1,a+=i;for(s+=1;i=LeapYear(s)?366:365,a>i;)o+=1,s+=1,a-=i;for(;a<1;)({year:o,month:n}=BalanceISOYearMonth(o,n-1)),a+=ISODaysInMonth(o,n);for(;a>ISODaysInMonth(o,n);)a-=ISODaysInMonth(o,n),({year:o,month:n}=BalanceISOYearMonth(o,n+1));return{year:o,month:n,day:a}}function BalanceISODateTime(e,t,r,o,n,a,i,s,l){const{deltaDays:d,hour:m,minute:c,second:u,millisecond:h,microsecond:T,nanosecond:p}=BalanceTime(o,n,a,i,s,l),{year:f,month:y,day:S}=BalanceISODate(e,t,r+d);return{year:f,month:y,day:S,hour:m,minute:c,second:u,millisecond:h,microsecond:T,nanosecond:p}}function BalanceTime(e,t,r,o,n,a){let i=e,s=t,l=r,d=o,m=n,c=a;if(!(oe(i)&&oe(s)&&oe(l)&&oe(d)&&oe(m)&&oe(c)))throw new RangeError("infinity is out of range");m+=Q(c/1e3),c=NonNegativeModulo(c,1e3),d+=Q(m/1e3),m=NonNegativeModulo(m,1e3),l+=Q(d/1e3),d=NonNegativeModulo(d,1e3),s+=Q(l/60),l=NonNegativeModulo(l,60),i+=Q(s/60),s=NonNegativeModulo(s,60);const u=Q(i/24);return i=NonNegativeModulo(i,24),{deltaDays:u,hour:i,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}}function TotalDurationNanoseconds(t,r,o,n,a,i,s,l){const d=e.default.BigInt(t);let m=e.default.BigInt(s);0!==t&&(m=e.default.subtract(e.default.BigInt(s),e.default.BigInt(l)));const c=e.default.add(e.default.BigInt(r),e.default.multiply(d,e.default.BigInt(24))),u=e.default.add(e.default.BigInt(o),e.default.multiply(c,Te)),h=e.default.add(e.default.BigInt(n),e.default.multiply(u,Te)),T=e.default.add(e.default.BigInt(a),e.default.multiply(h,pe)),p=e.default.add(e.default.BigInt(i),e.default.multiply(T,pe));return e.default.add(e.default.BigInt(m),e.default.multiply(p,pe))}function NanosecondsToDays(t,o){const f=GetIntrinsic("%Temporal.Instant%"),y=ee(e.default.toNumber(t));let S=e.default.BigInt(t),w=864e11;if(0===y)return{days:0,nanoseconds:ue,dayLengthNs:w};if(!IsTemporalZonedDateTime(o)){let t;return({quotient:t,remainder:S}=divmod(S,e.default.BigInt(w))),{days:e.default.toNumber(t),nanoseconds:S,dayLengthNs:w}}const g=GetSlot(o,r),I=GetSlot(o,T),D=e.default.add(g,S),G=new f(D),v=GetSlot(o,p),O=GetSlot(o,h),C=BuiltinTimeZoneGetPlainDateTimeFor(v,I,O),E=BuiltinTimeZoneGetPlainDateTimeFor(v,G,O);let{days:b}=DifferenceISODateTime(GetSlot(C,n),GetSlot(C,a),GetSlot(C,i),GetSlot(C,s),GetSlot(C,l),GetSlot(C,d),GetSlot(C,m),GetSlot(C,c),GetSlot(C,u),GetSlot(E,n),GetSlot(E,a),GetSlot(E,i),GetSlot(E,s),GetSlot(E,l),GetSlot(E,d),GetSlot(E,m),GetSlot(E,c),GetSlot(E,u),O,"day",le(null)),M=AddZonedDateTime(I,v,O,0,0,0,b,0,0,0,0,0,0);if(1===y)for(;b>0&&e.default.greaterThan(M,D);)--b,M=AddZonedDateTime(I,v,O,0,0,0,b,0,0,0,0,0,0);S=e.default.subtract(D,M);let R=!1,Z=new f(M);do{const t=AddZonedDateTime(Z,v,O,0,0,0,y,0,0,0,0,0,0),o=GetSlot(Z,r);w=e.default.toNumber(e.default.subtract(t,o)),R=e.default.greaterThan(e.default.multiply(e.default.subtract(S,e.default.BigInt(w)),e.default.BigInt(y)),ue),R&&(S=e.default.subtract(S,e.default.BigInt(w)),Z=new f(t),b+=y)}while(R);return{days:b,nanoseconds:S,dayLengthNs:K(w)}}function BalanceDuration(t,o,n,a,i,s,l,d,m){let c,u,f,y,S,w,g=t;if(IsTemporalZonedDateTime(m)){const t=AddZonedDateTime(GetSlot(m,T),GetSlot(m,p),GetSlot(m,h),0,0,0,g,o,n,a,i,s,l),d=GetSlot(m,r);c=e.default.subtract(t,d)}else c=TotalDurationNanoseconds(g,o,n,a,i,s,l,0);"year"===d||"month"===d||"week"===d||"day"===d?({days:g,nanoseconds:c}=NanosecondsToDays(c,m)):g=0;const I=e.default.lessThan(c,ue)?-1:1;switch(c=abs(c),u=f=y=S=w=ue,d){case"year":case"month":case"week":case"day":case"hour":({quotient:u,remainder:c}=divmod(c,pe)),({quotient:f,remainder:u}=divmod(u,pe)),({quotient:y,remainder:f}=divmod(f,pe)),({quotient:S,remainder:y}=divmod(y,Te)),({quotient:w,remainder:S}=divmod(S,Te));break;case"minute":({quotient:u,remainder:c}=divmod(c,pe)),({quotient:f,remainder:u}=divmod(u,pe)),({quotient:y,remainder:f}=divmod(f,pe)),({quotient:S,remainder:y}=divmod(y,Te));break;case"second":({quotient:u,remainder:c}=divmod(c,pe)),({quotient:f,remainder:u}=divmod(u,pe)),({quotient:y,remainder:f}=divmod(f,pe));break;case"millisecond":({quotient:u,remainder:c}=divmod(c,pe)),({quotient:f,remainder:u}=divmod(u,pe));break;case"microsecond":({quotient:u,remainder:c}=divmod(c,pe));break;case"nanosecond":break;default:throw new Error("assert not reached")}return{days:g,hours:e.default.toNumber(w)*I,minutes:e.default.toNumber(S)*I,seconds:e.default.toNumber(y)*I,milliseconds:e.default.toNumber(f)*I,microseconds:e.default.toNumber(u)*I,nanoseconds:e.default.toNumber(c)*I}}function UnbalanceDurationRelative(e,t,r,o,n,a){let i=e,s=t,l=r,d=o;const m=GetIntrinsic("%Temporal.Duration%"),c=DurationSign(i,s,l,d,0,0,0,0,0,0);let u,T;a&&(T=ToTemporalDate(a),u=GetSlot(T,h));const p=new m(c),f=new m(0,c),S=new m(0,0,c);switch(n){case"year":break;case"month":{if(!u)throw new RangeError("a starting point is required for months balancing");const e=u.dateAdd,t=u.dateUntil;let r=T;for(;K(i)>0;){const o=CalendarDateAdd(u,r,p,void 0,e),n=le(null);n.largestUnit="month";const a=GetSlot(CalendarDateUntil(u,r,o,n,t),y);r=o,s+=a,i-=c}}break;case"week":if(!u)throw new RangeError("a starting point is required for weeks balancing");for(;K(i)>0;){let e;({relativeTo:T,days:e}=MoveRelativeDate(u,T,p)),d+=e,i-=c}for(;K(s)>0;){let e;({relativeTo:T,days:e}=MoveRelativeDate(u,T,f)),d+=e,s-=c}break;default:for(;K(i)>0;){if(!u)throw new RangeError("a starting point is required for balancing calendar units");let e;({relativeTo:T,days:e}=MoveRelativeDate(u,T,p)),d+=e,i-=c}for(;K(s)>0;){if(!u)throw new RangeError("a starting point is required for balancing calendar units");let e;({relativeTo:T,days:e}=MoveRelativeDate(u,T,f)),d+=e,s-=c}for(;K(l)>0;){if(!u)throw new RangeError("a starting point is required for balancing calendar units");let e;({relativeTo:T,days:e}=MoveRelativeDate(u,T,S)),d+=e,l-=c}}return{years:i,months:s,weeks:l,days:d}}function CalculateOffsetShift(e,t,r,o,n){if(IsTemporalZonedDateTime(e)){const a=GetSlot(e,T),i=GetSlot(e,p),s=GetSlot(e,h),l=GetOffsetNanosecondsFor(i,a),d=AddZonedDateTime(a,i,s,t,r,o,n,0,0,0,0,0,0);return GetOffsetNanosecondsFor(i,new(GetIntrinsic("%Temporal.Instant%"))(d))-l}return 0}function CreateNegatedTemporalDuration(e){return new(GetIntrinsic("%Temporal.Duration%"))(-GetSlot(e,f),-GetSlot(e,y),-GetSlot(e,S),-GetSlot(e,w),-GetSlot(e,g),-GetSlot(e,I),-GetSlot(e,D),-GetSlot(e,G),-GetSlot(e,v),-GetSlot(e,O))}function ConstrainToRange(e,t,r){return V(r,X(t,e))}function ConstrainISODate(e,t,r){const o=ConstrainToRange(t,1,12);return{year:e,month:o,day:ConstrainToRange(r,1,ISODaysInMonth(e,o))}}function RejectToRange(e,t,r){if(er)throw new RangeError(`value out of range: ${t} <= ${e} <= ${r}`)}function RejectISODate(e,t,r){RejectToRange(t,1,12),RejectToRange(r,1,ISODaysInMonth(e,t))}function RejectDateRange(e,t,r){RejectDateTimeRange(e,t,r,12,0,0,0,0,0)}function RejectTime(e,t,r,o,n,a){RejectToRange(e,0,23),RejectToRange(t,0,59),RejectToRange(r,0,59),RejectToRange(o,0,999),RejectToRange(n,0,999),RejectToRange(a,0,999)}function RejectDateTime(e,t,r,o,n,a,i,s,l){RejectISODate(e,t,r),RejectTime(o,n,a,i,s,l)}function RejectDateTimeRange(e,t,r,o,n,a,i,s,l){if(RejectToRange(e,-271821,275760),-271821===e&&null==GetEpochFromISOParts(e,t,r+1,o,n,a,i,s,l-1)||275760===e&&null==GetEpochFromISOParts(e,t,r-1,o,n,a,i,s,l+1))throw new RangeError("DateTime outside of supported range")}function ValidateEpochNanoseconds(t){if(e.default.lessThan(t,ge)||e.default.greaterThan(t,Ie))throw new RangeError("Instant outside of supported range")}function RejectDuration(e,t,r,o,n,a,i,s,l,d){const m=DurationSign(e,t,r,o,n,a,i,s,l,d);for(const c of[e,t,r,o,n,a,i,s,l,d]){if(!oe(c))throw new RangeError("infinite values not allowed as duration fields");const e=ee(c);if(0!==e&&e!==m)throw new RangeError("mixed-sign values not allowed as duration fields")}}function DifferenceISODate(e,t,r,o,n,a,i){switch(i){case"year":case"month":{const s=-CompareISODate(e,t,r,o,n,a);if(0===s)return{years:0,months:0,weeks:0,days:0};const l={year:e,month:t,day:r},d={year:o,month:n,day:a};let m=d.year-l.year,c=AddISODate(e,t,r,m,0,0,0,"constrain"),u=-CompareISODate(c.year,c.month,c.day,o,n,a);if(0===u)return"year"===i?{years:m,months:0,weeks:0,days:0}:{years:0,months:12*m,weeks:0,days:0};let h=d.month-l.month;if(u!==s&&(m-=s,h+=12*s),c=AddISODate(e,t,r,m,h,0,0,"constrain"),u=-CompareISODate(c.year,c.month,c.day,o,n,a),0===u)return"year"===i?{years:m,months:h,weeks:0,days:0}:{years:0,months:h+12*m,weeks:0,days:0};u!==s&&(h-=s,h===-s&&(m-=s,h=11*s),c=AddISODate(e,t,r,m,h,0,0,"constrain"));let T=0;return T=c.month===d.month?d.day-c.day:s<0?-c.day-(ISODaysInMonth(d.year,d.month)-d.day):d.day+(ISODaysInMonth(c.year,c.month)-c.day),"month"===i&&(h+=12*m,m=0),{years:m,months:h,weeks:0,days:T}}case"week":case"day":{let s,l,d;CompareISODate(e,t,r,o,n,a)<0?(l={year:e,month:t,day:r},s={year:o,month:n,day:a},d=1):(l={year:o,month:n,day:a},s={year:e,month:t,day:r},d=-1);let m=DayOfYear(s.year,s.month,s.day)-DayOfYear(l.year,l.month,l.day);for(let e=l.year;e("date"===o&&"week"!==r&&"day"!==r&&e.push(r,t),e)),[]),u=GetTemporalUnit(m,"smallestUnit","date","month");if("week"===u||"day"===u)throw new RangeError(`smallestUnit must be one of ${c.join(", ")}, not ${u}`);let T=GetTemporalUnit(m,"largestUnit","date","auto");if("week"===T||"day"===T)throw new RangeError(`largestUnit must be one of ${c.join(", ")}, not ${T}`);if("auto"===T&&(T="year"),LargerOfTwoTemporalUnits(T,u)!==T)throw new RangeError(`largestUnit ${T} cannot be smaller than smallestUnit ${u}`);let p=ToTemporalRoundingMode(m,"trunc");"since"===e&&(p=NegateTemporalRoundingMode(p));const f=ToTemporalRoundingIncrement(m,void 0,!1),y=CalendarFields(i,["monthCode","year"]),S=PrepareTemporalFields(a,y,[]);S.day=1;const w=PrepareTemporalFields(t,y,[]);w.day=1;const g=CalendarDateFromFields(i,S),I=CalendarDateFromFields(i,w),D=MergeLargestUnitOption(m,T);let{years:G,months:v}=CalendarDateUntil(i,I,g,D);"month"===u&&1===f||({years:G,months:v}=RoundDuration(G,v,0,0,0,0,0,0,0,0,f,u,p,I));return new(GetIntrinsic("%Temporal.Duration%"))(n*G,n*v,0,0,0,0,0,0,0,0)}function DifferenceTemporalZonedDateTime(e,t,o,n){const a="since"===e?-1:1,i=ToTemporalZonedDateTime(o),s=GetSlot(t,h),l=GetSlot(i,h),d=ToString(s),m=ToString(l);if(d!==m)throw new RangeError(`cannot compute difference between dates of ${d} and ${m} calendars`);const c=GetOptionsObject(n),u=GetTemporalUnit(c,"smallestUnit","datetime","nanosecond"),T=LargerOfTwoTemporalUnits("hour",u);let f=GetTemporalUnit(c,"largestUnit","datetime","auto");if("auto"===f&&(f=T),LargerOfTwoTemporalUnits(f,u)!==f)throw new RangeError(`largestUnit ${f} cannot be smaller than smallestUnit ${u}`);let y=ToTemporalRoundingMode(c,"trunc");"since"===e&&(y=NegateTemporalRoundingMode(y));const S=ToTemporalDateTimeRoundingIncrement(c,u),w=GetSlot(t,r),g=GetSlot(i,r);let I,D,G,v,O,C,E,b,M,R;if("year"!==f&&"month"!==f&&"week"!==f&&"day"!==f)I=0,D=0,G=0,v=0,({seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=DifferenceInstant(w,g,S,u,y)),({hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=BalanceDuration(0,0,0,E,b,M,R,f));else{const e=GetSlot(t,p);if(!TimeZoneEquals(e,GetSlot(i,p)))throw new RangeError("When calculating difference between time zones, largestUnit must be 'hours' or smaller because day lengths can vary between time zones due to DST or time zone offset changes.");const r=MergeLargestUnitOption(c,f);({years:I,months:D,weeks:G,days:v,hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=DifferenceZonedDateTime(w,g,e,s,f,r)),({years:I,months:D,weeks:G,days:v,hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=RoundDuration(I,D,G,v,O,C,E,b,M,R,S,u,y,t)),({years:I,months:D,weeks:G,days:v,hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=AdjustRoundedDurationDays(I,D,G,v,O,C,E,b,M,R,S,u,y,t))}return new(GetIntrinsic("%Temporal.Duration%"))(a*I,a*D,a*G,a*v,a*O,a*C,a*E,a*b,a*M,a*R)}function AddISODate(e,t,r,o,n,a,i,s){let l=e,d=t,m=r,c=a,u=i;return l+=o,d+=n,({year:l,month:d}=BalanceISOYearMonth(l,d)),({year:l,month:d,day:m}=RegulateISODate(l,d,m,s)),u+=7*c,m+=u,({year:l,month:d,day:m}=BalanceISODate(l,d,m)),{year:l,month:d,day:m}}function AddTime(e,t,r,o,n,a,i,s,l,d,m,c){let u=e,h=t,T=r,p=o,f=n,y=a;u+=i,h+=s,T+=l,p+=d,f+=m,y+=c;let S=0;return({deltaDays:S,hour:u,minute:h,second:T,millisecond:p,microsecond:f,nanosecond:y}=BalanceTime(u,h,T,p,f,y)),{deltaDays:S,hour:u,minute:h,second:T,millisecond:p,microsecond:f,nanosecond:y}}function AddDuration(e,t,o,n,a,i,s,l,d,m,c,u,f,y,S,w,g,I,D,G,v){const O=LargerOfTwoTemporalUnits(DefaultTemporalLargestUnit(e,t,o,n,a,i,s,l,d,m),DefaultTemporalLargestUnit(c,u,f,y,S,w,g,I,D,G));let C,E,b,M,R,Z,P,F,Y,j;if(v)if(IsTemporalDate(v)){const r=GetIntrinsic("%Temporal.Duration%"),T=GetSlot(v,h),p=new r(e,t,o,n,0,0,0,0,0,0),$=new r(c,u,f,y,0,0,0,0,0,0),B=T.dateAdd,N=CalendarDateAdd(T,v,p,void 0,B),k=CalendarDateAdd(T,N,$,void 0,B),A=LargerOfTwoTemporalUnits("day",O),U=le(null);U.largestUnit=A,({years:C,months:E,weeks:b,days:M}=CalendarDateUntil(T,v,k,U)),({days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=BalanceDuration(M,a+S,i+w,s+g,l+I,d+D,m+G,O))}else{const $=GetIntrinsic("%Temporal.Instant%"),B=GetSlot(v,p),N=GetSlot(v,h),k=AddZonedDateTime(GetSlot(v,T),B,N,e,t,o,n,a,i,s,l,d,m),A=AddZonedDateTime(new $(k),B,N,c,u,f,y,S,w,g,I,D,G);"year"!==O&&"month"!==O&&"week"!==O&&"day"!==O?(C=0,E=0,b=0,M=0,({seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=DifferenceInstant(GetSlot(v,r),A,1,"nanosecond","halfExpand")),({hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=BalanceDuration(0,0,0,P,F,Y,j,O))):({years:C,months:E,weeks:b,days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=DifferenceZonedDateTime(GetSlot(v,r),A,B,N,O,le(null)))}else{if("year"===O||"month"===O||"week"===O)throw new RangeError("relativeTo is required for years, months, or weeks arithmetic");C=E=b=0,({days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=BalanceDuration(n+y,a+S,i+w,s+g,l+I,d+D,m+G,O))}return RejectDuration(C,E,b,M,R,Z,P,F,Y,j),{years:C,months:E,weeks:b,days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}}function AddInstant(t,r,o,n,a,i,s){let l=ue;l=e.default.add(l,e.default.BigInt(s)),l=e.default.add(l,e.default.multiply(e.default.BigInt(i),pe)),l=e.default.add(l,e.default.multiply(e.default.BigInt(a),fe)),l=e.default.add(l,e.default.multiply(e.default.BigInt(n),ye)),l=e.default.add(l,e.default.multiply(e.default.BigInt(o),e.default.BigInt(6e10))),l=e.default.add(l,e.default.multiply(e.default.BigInt(r),e.default.BigInt(36e11)));const d=e.default.add(t,l);return ValidateEpochNanoseconds(d),d}function AddDateTime(e,t,r,o,s,l,d,m,c,u,h,T,p,f,y,S,w,g,I,D,G){let v=f,{deltaDays:O,hour:C,minute:E,second:b,millisecond:M,microsecond:R,nanosecond:Z}=AddTime(o,s,l,d,m,c,y,S,w,g,I,D);v+=O;const P=GetIntrinsic("%Temporal.Duration%"),F=CalendarDateAdd(u,CreateTemporalDate(e,t,r,u),new P(h,T,p,v,0,0,0,0,0,0),G);return{year:GetSlot(F,n),month:GetSlot(F,a),day:GetSlot(F,i),hour:C,minute:E,second:b,millisecond:M,microsecond:R,nanosecond:Z}}function AddZonedDateTime(e,t,o,h,T,p,f,y,S,w,g,I,D,G){const v=GetIntrinsic("%Temporal.Duration%");if(0===DurationSign(h,T,p,f,0,0,0,0,0,0))return AddInstant(GetSlot(e,r),y,S,w,g,I,D);const O=BuiltinTimeZoneGetPlainDateTimeFor(t,e,o),C=CalendarDateAdd(o,CreateTemporalDate(GetSlot(O,n),GetSlot(O,a),GetSlot(O,i),o),new v(h,T,p,f,0,0,0,0,0,0),G),E=CreateTemporalDateTime(GetSlot(C,n),GetSlot(C,a),GetSlot(C,i),GetSlot(O,s),GetSlot(O,l),GetSlot(O,d),GetSlot(O,m),GetSlot(O,c),GetSlot(O,u),o);return AddInstant(GetSlot(BuiltinTimeZoneGetInstantFor(t,E,"compatible"),r),y,S,w,g,I,D)}function AddDurationToOrSubtractDurationFromDuration(e,t,r,o){const n="subtract"===e?-1:1;let{years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:u,microseconds:h,nanoseconds:T}=ToTemporalDurationRecord(r);const p=ToRelativeTemporalObject(GetOptionsObject(o));({years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:u,microseconds:h,nanoseconds:T}=AddDuration(GetSlot(t,f),GetSlot(t,y),GetSlot(t,S),GetSlot(t,w),GetSlot(t,g),GetSlot(t,I),GetSlot(t,D),GetSlot(t,G),GetSlot(t,v),GetSlot(t,O),n*a,n*i,n*s,n*l,n*d,n*m,n*c,n*u,n*h,n*T,p));return new(GetIntrinsic("%Temporal.Duration%"))(a,i,s,l,d,m,c,u,h,T)}function AddDurationToOrSubtractDurationFromInstant(e,t,o){const n="subtract"===e?-1:1,{hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=function ToLimitedTemporalDuration(e,t){let r=ToTemporalDurationRecord(e);for(const e of t)if(0!==r[e])throw new RangeError(`Duration field ${e} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);return r}(o,["years","months","weeks","days"]),c=AddInstant(GetSlot(t,r),n*a,n*i,n*s,n*l,n*d,n*m);return new(GetIntrinsic("%Temporal.Instant%"))(c)}function AddDurationToOrSubtractDurationFromPlainDateTime(e,t,r,o){const T="subtract"===e?-1:1,{years:p,months:f,weeks:y,days:S,hours:w,minutes:g,seconds:I,milliseconds:D,microseconds:G,nanoseconds:v}=ToTemporalDurationRecord(r),O=GetOptionsObject(o),C=GetSlot(t,h),{year:E,month:b,day:M,hour:R,minute:Z,second:P,millisecond:F,microsecond:Y,nanosecond:j}=AddDateTime(GetSlot(t,n),GetSlot(t,a),GetSlot(t,i),GetSlot(t,s),GetSlot(t,l),GetSlot(t,d),GetSlot(t,m),GetSlot(t,c),GetSlot(t,u),C,T*p,T*f,T*y,T*S,T*w,T*g,T*I,T*D,T*G,T*v,O);return CreateTemporalDateTime(E,b,M,R,Z,P,F,Y,j,C)}function AddDurationToOrSubtractDurationFromPlainTime(e,t,r){const o="subtract"===e?-1:1,{hours:n,minutes:a,seconds:i,milliseconds:h,microseconds:T,nanoseconds:p}=ToTemporalDurationRecord(r);let{hour:f,minute:y,second:S,millisecond:w,microsecond:g,nanosecond:I}=AddTime(GetSlot(t,s),GetSlot(t,l),GetSlot(t,d),GetSlot(t,m),GetSlot(t,c),GetSlot(t,u),o*n,o*a,o*i,o*h,o*T,o*p);({hour:f,minute:y,second:S,millisecond:w,microsecond:g,nanosecond:I}=RegulateTime(f,y,S,w,g,I,"reject"));return new(GetIntrinsic("%Temporal.PlainTime%"))(f,y,S,w,g,I)}function AddDurationToOrSubtractDurationFromPlainYearMonth(e,t,r,o){let n=ToTemporalDurationRecord(r);"subtract"===e&&(n={years:-n.years,months:-n.months,weeks:-n.weeks,days:-n.days,hours:-n.hours,minutes:-n.minutes,seconds:-n.seconds,milliseconds:-n.milliseconds,microseconds:-n.microseconds,nanoseconds:-n.nanoseconds});let{years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:u,microseconds:T,nanoseconds:p}=n;({days:l}=BalanceDuration(l,d,m,c,u,T,p,"day"));const f=GetOptionsObject(o),y=GetSlot(t,h),S=CalendarFields(y,["monthCode","year"]),w=PrepareTemporalFields(t,S,[]),g=DurationSign(a,i,s,l,0,0,0,0,0,0);w.day=g<0?ToPositiveInteger(CalendarDaysInMonth(y,t)):1;const I=CalendarDateFromFields(y,w),D=new(GetIntrinsic("%Temporal.Duration%"))(a,i,s,l,0,0,0,0,0,0),G=se(le(null),f);return CalendarYearMonthFromFields(y,PrepareTemporalFields(CalendarDateAdd(y,I,D,f),S,[]),G)}function AddDurationToOrSubtractDurationFromZonedDateTime(e,t,r,o){const n="subtract"===e?-1:1,{years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:u,microseconds:f,nanoseconds:y}=ToTemporalDurationRecord(r),S=GetOptionsObject(o),w=GetSlot(t,p),g=GetSlot(t,h);return CreateTemporalZonedDateTime(AddZonedDateTime(GetSlot(t,T),w,g,n*a,n*i,n*s,n*l,n*d,n*m,n*c,n*u,n*f,n*y,S),w,g)}function RoundNumberToIncrement(t,r,o){if(1===r)return t;let{quotient:n,remainder:a}=divmod(t,e.default.BigInt(r));if(e.default.equal(a,ue))return t;const i=e.default.lessThan(a,ue)?-1:1;switch(o){case"ceil":i>0&&(n=e.default.add(n,e.default.BigInt(i)));break;case"floor":i<0&&(n=e.default.add(n,e.default.BigInt(i)));break;case"trunc":break;case"halfExpand":e.default.toNumber(abs(e.default.multiply(a,e.default.BigInt(2))))>=r&&(n=e.default.add(n,e.default.BigInt(i)))}return e.default.multiply(n,e.default.BigInt(r))}function RoundInstant(t,r,o,n){let a=e.default.remainder(t,e.default.BigInt(864e11));e.default.lessThan(a,ue)&&(a=e.default.add(a,e.default.BigInt(864e11)));const i=e.default.subtract(t,a),s=RoundNumberToIncrement(a,Ne[o]*r,n);return e.default.add(i,s)}function RoundISODateTime(e,t,r,o,n,a,i,s,l,d,m,c,u=864e11){const{deltaDays:h,hour:T,minute:p,second:f,millisecond:y,microsecond:S,nanosecond:w}=RoundTime(o,n,a,i,s,l,d,m,c,u),{year:g,month:I,day:D}=BalanceISODate(e,t,r+h);return{year:g,month:I,day:D,hour:T,minute:p,second:f,millisecond:y,microsecond:S,nanosecond:w}}function RoundTime(t,r,o,n,a,i,s,l,d,m=864e11){let c=ue;switch(l){case"day":case"hour":c=e.default.BigInt(t);case"minute":c=e.default.add(e.default.multiply(c,Te),e.default.BigInt(r));case"second":c=e.default.add(e.default.multiply(c,Te),e.default.BigInt(o));case"millisecond":c=e.default.add(e.default.multiply(c,pe),e.default.BigInt(n));case"microsecond":c=e.default.add(e.default.multiply(c,pe),e.default.BigInt(a));case"nanosecond":c=e.default.add(e.default.multiply(c,pe),e.default.BigInt(i))}const u="day"===l?m:Ne[l],h=RoundNumberToIncrement(c,u*s,d),T=e.default.toNumber(e.default.divide(h,e.default.BigInt(u)));switch(l){case"day":return{deltaDays:T,hour:0,minute:0,second:0,millisecond:0,microsecond:0,nanosecond:0};case"hour":return BalanceTime(T,0,0,0,0,0);case"minute":return BalanceTime(t,T,0,0,0,0);case"second":return BalanceTime(t,r,T,0,0,0);case"millisecond":return BalanceTime(t,r,o,T,0,0);case"microsecond":return BalanceTime(t,r,o,n,T,0);case"nanosecond":return BalanceTime(t,r,o,n,a,T);default:throw new Error(`Invalid unit ${l}`)}}function DaysUntil(e,t){return DifferenceISODate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(t,n),GetSlot(t,a),GetSlot(t,i),"day").days}function MoveRelativeDate(e,t,r){const o=CalendarDateAdd(e,t,r,void 0);return{relativeTo:o,days:DaysUntil(t,o)}}function MoveRelativeZonedDateTime(e,t,r,o,n){const a=GetSlot(e,p),i=GetSlot(e,h);return CreateTemporalZonedDateTime(AddZonedDateTime(GetSlot(e,T),a,i,t,r,o,n,0,0,0,0,0,0),a,i)}function AdjustRoundedDurationDays(t,r,o,n,a,i,s,l,d,m,c,u,f,y){let S=t,w=r,g=o,I=n,D=a,G=i,v=s,O=l,C=d,E=m;if(!IsTemporalZonedDateTime(y)||"year"===u||"month"===u||"week"===u||"day"===u||"nanosecond"===u&&1===c)return{years:S,months:w,weeks:g,days:I,hours:D,minutes:G,seconds:v,milliseconds:O,microseconds:C,nanoseconds:E};let b=TotalDurationNanoseconds(0,D,G,v,O,C,E,0);const M=ee(e.default.toNumber(b)),R=GetSlot(y,p),Z=GetSlot(y,h),P=AddZonedDateTime(GetSlot(y,T),R,Z,S,w,g,I,0,0,0,0,0,0),F=AddZonedDateTime(new(GetIntrinsic("%Temporal.Instant%"))(P),R,Z,0,0,0,M,0,0,0,0,0,0),Y=e.default.subtract(F,P);return e.default.greaterThanOrEqual(e.default.multiply(e.default.subtract(b,Y),e.default.BigInt(M)),ue)&&(({years:S,months:w,weeks:g,days:I}=AddDuration(S,w,g,I,0,0,0,0,0,0,0,0,0,M,0,0,0,0,0,0,y)),b=RoundInstant(e.default.subtract(b,Y),c,u,f),({hours:D,minutes:G,seconds:v,milliseconds:O,microseconds:C,nanoseconds:E}=BalanceDuration(0,0,0,0,0,0,e.default.toNumber(b),"hour"))),{years:S,months:w,weeks:g,days:I,hours:D,minutes:G,seconds:v,milliseconds:O,microseconds:C,nanoseconds:E}}function RoundDuration(t,r,o,n,a,i,s,l,d,m,c,u,T,p){let f=t,y=r,S=o,w=n,g=a,I=i,D=s,G=l,v=d,O=e.default.BigInt(m);const C=GetIntrinsic("%Temporal.Duration%");let E,b,M,R,Z=p;if(Z){if(IsTemporalZonedDateTime(Z))b=Z,Z=ToTemporalDate(Z);else if(!IsTemporalDate(Z))throw new TypeError("starting point must be PlainDate or ZonedDateTime");E=GetSlot(Z,h)}if("year"===u||"month"===u||"week"===u||"day"===u){let t,r,o;O=TotalDurationNanoseconds(0,g,I,D,G,v,m,0),b&&(t=MoveRelativeZonedDateTime(b,f,y,S,w)),({days:r,nanoseconds:O,dayLengthNs:o}=NanosecondsToDays(O,t)),M=e.default.BigInt(o),w+=r,g=I=D=G=v=0}switch(u){case"year":{if(!E)throw new RangeError("A starting point is required for years rounding");const t=new C(f),r=E.dateAdd,o=CalendarDateAdd(E,Z,t,void 0,r),n=CalendarDateAdd(E,Z,new C(f,y,S),void 0,r);Z=o,w+=DaysUntil(o,n);const a=CalendarDateAdd(E,Z,{days:w},void 0,r),i=le(null);i.largestUnit="year";const s=CalendarDateUntil(E,Z,a,i).years;f+=s;const l=Z;Z=CalendarDateAdd(E,Z,{years:s},void 0,r);w-=DaysUntil(l,Z);const d=new C(w<0?-1:1);let{days:m}=MoveRelativeDate(E,Z,d);m=K(m);const u=e.default.multiply(e.default.BigInt(m),M);O=e.default.add(e.default.add(e.default.multiply(u,e.default.BigInt(f)),e.default.multiply(e.default.BigInt(w),M)),O);const h=RoundNumberToIncrement(O,e.default.toNumber(e.default.multiply(u,e.default.BigInt(c))),T);R=e.default.toNumber(O)/e.default.toNumber(u),f=e.default.toNumber(e.default.divide(h,u)),O=ue,y=S=w=0;break}case"month":{if(!E)throw new RangeError("A starting point is required for months rounding");const t=new C(f,y),r=E.dateAdd,o=CalendarDateAdd(E,Z,t,void 0,r),n=CalendarDateAdd(E,Z,new C(f,y,S),void 0,r);Z=o,w+=DaysUntil(o,n);const a=ee(w),i=new C(0,w<0?-1:1);let s;for(({relativeTo:Z,days:s}=MoveRelativeDate(E,Z,i));K(w)>=K(s);)y+=a,w-=s,({relativeTo:Z,days:s}=MoveRelativeDate(E,Z,i));s=K(s);const l=e.default.multiply(e.default.BigInt(s),M);O=e.default.add(e.default.add(e.default.multiply(l,e.default.BigInt(y)),e.default.multiply(e.default.BigInt(w),M)),O);const d=RoundNumberToIncrement(O,e.default.toNumber(e.default.multiply(l,e.default.BigInt(c))),T);R=e.default.toNumber(O)/e.default.toNumber(l),y=e.default.toNumber(e.default.divide(d,l)),O=ue,S=w=0;break}case"week":{if(!E)throw new RangeError("A starting point is required for weeks rounding");const t=ee(w),r=new C(0,0,w<0?-1:1);let o;for(({relativeTo:Z,days:o}=MoveRelativeDate(E,Z,r));K(w)>=K(o);)S+=t,w-=o,({relativeTo:Z,days:o}=MoveRelativeDate(E,Z,r));o=K(o);const n=e.default.multiply(e.default.BigInt(o),M);O=e.default.add(e.default.add(e.default.multiply(n,e.default.BigInt(S)),e.default.multiply(e.default.BigInt(w),M)),O);const a=RoundNumberToIncrement(O,e.default.toNumber(e.default.multiply(n,e.default.BigInt(c))),T);R=e.default.toNumber(O)/e.default.toNumber(n),S=e.default.toNumber(e.default.divide(a,n)),O=ue,w=0;break}case"day":{const t=M;O=e.default.add(e.default.multiply(t,e.default.BigInt(w)),O);const r=RoundNumberToIncrement(O,e.default.toNumber(e.default.multiply(t,e.default.BigInt(c))),T);R=e.default.toNumber(O)/e.default.toNumber(t),w=e.default.toNumber(e.default.divide(r,t)),O=ue;break}case"hour":{const t=36e11;let r=e.default.multiply(e.default.BigInt(g),e.default.BigInt(36e11));r=e.default.add(r,e.default.multiply(e.default.BigInt(I),e.default.BigInt(6e10))),r=e.default.add(r,e.default.multiply(e.default.BigInt(D),ye)),r=e.default.add(r,e.default.multiply(e.default.BigInt(G),fe)),r=e.default.add(r,e.default.multiply(e.default.BigInt(v),pe)),r=e.default.add(r,O),R=e.default.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);g=e.default.toNumber(e.default.divide(o,e.default.BigInt(t))),O=ue,I=D=G=v=0;break}case"minute":{const t=6e10;let r=e.default.multiply(e.default.BigInt(I),e.default.BigInt(6e10));r=e.default.add(r,e.default.multiply(e.default.BigInt(D),ye)),r=e.default.add(r,e.default.multiply(e.default.BigInt(G),fe)),r=e.default.add(r,e.default.multiply(e.default.BigInt(v),pe)),r=e.default.add(r,O),R=e.default.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);I=e.default.toNumber(e.default.divide(o,e.default.BigInt(t))),O=ue,D=G=v=0;break}case"second":{const t=1e9;let r=e.default.multiply(e.default.BigInt(D),ye);r=e.default.add(r,e.default.multiply(e.default.BigInt(G),fe)),r=e.default.add(r,e.default.multiply(e.default.BigInt(v),pe)),r=e.default.add(r,O),R=e.default.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);D=e.default.toNumber(e.default.divide(o,e.default.BigInt(t))),O=ue,G=v=0;break}case"millisecond":{const t=1e6;let r=e.default.multiply(e.default.BigInt(G),fe);r=e.default.add(r,e.default.multiply(e.default.BigInt(v),pe)),r=e.default.add(r,O),R=e.default.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);G=e.default.toNumber(e.default.divide(o,e.default.BigInt(t))),O=ue,v=0;break}case"microsecond":{const t=1e3;let r=e.default.multiply(e.default.BigInt(v),pe);r=e.default.add(r,O),R=e.default.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);v=e.default.toNumber(e.default.divide(o,e.default.BigInt(t))),O=ue;break}case"nanosecond":R=e.default.toNumber(O),O=RoundNumberToIncrement(O,c,T)}return{years:f,months:y,weeks:S,days:w,hours:g,minutes:I,seconds:D,milliseconds:G,microseconds:v,nanoseconds:e.default.toNumber(O),total:R}}function CompareISODate(e,t,r,o,n,a){for(const[i,s]of[[e,o],[t,n],[r,a]])if(i!==s)return ComparisonResult(i-s);return 0}function NonNegativeModulo(e,t){let r=e%t;return me(r,-0)?0:(r<0&&(r+=t),r)}function ToBigIntExternal(e){const t=ToBigInt(e);return void 0!==globalThis.BigInt?globalThis.BigInt(t.toString(10)):t}function ToBigInt(t){if(t instanceof e.default)return t;let r=t;if("object"==typeof t){const e=t[Symbol.toPrimitive];e&&"function"==typeof e&&(r=ce(e,t,["number"]))}switch(typeof r){case"undefined":case"object":case"number":case"symbol":default:throw new TypeError(`cannot convert ${typeof t} to bigint`);case"string":if(!r.match(/^\s*(?:[+-]?\d+\s*)?$/))throw new SyntaxError("invalid BigInt syntax");case"bigint":try{return e.default.BigInt(r.toString())}catch(e){if(e instanceof Error&&e.message.startsWith("Invalid integer"))throw new SyntaxError(e.message);throw e}case"boolean":return r?he:ue}}const $e=(()=>{let t=e.default.BigInt(Date.now()%1e6);return()=>{const r=e.default.BigInt(Date.now()),o=e.default.add(e.default.multiply(r,fe),t);return t=e.default.remainder(r,fe),e.default.greaterThan(o,Ie)?Ie:e.default.lessThan(o,ge)?ge:o}})();function ComparisonResult(e){return e<0?-1:e>0?1:e}function GetOptionsObject(e){if(void 0===e)return le(null);if(IsObject(e)&&null!==e)return e;throw new TypeError("Options parameter must be an object, not "+(null===e?"null":""+typeof e))}function CreateOnePropObject(e,t){const r=le(null);return r[e]=t,r}function GetOption(e,t,r,o){let n=e[t];if(void 0!==n){if(n=ToString(n),!r.includes(n))throw new RangeError(`${t} must be one of ${r.join(", ")}, not ${n}`);return n}return o}function IsBuiltinCalendar(e){return z.call(Ce,e)}const Be=new RegExp(`^${B.source}$`);function bisect(t,r,o,n=t(r),a=t(o)){let i=e.default.BigInt(r),s=e.default.BigInt(o),l=n,d=a;for(;e.default.greaterThan(e.default.subtract(s,i),he);){const r=e.default.divide(e.default.add(i,s),e.default.BigInt(2)),o=t(r);if(o===l)i=r,l=o;else{if(o!==d)throw new Error(`invalid state in bisection ${l} - ${o} - ${d}`);s=r,d=o}}return s}const Ne={hour:36e11,minute:6e10,second:1e9,millisecond:1e6,microsecond:1e3,nanosecond:1},ke=Symbol("date"),Ae=Symbol("ym"),Ue=Symbol("md"),Le=Symbol("time"),xe=Symbol("datetime"),He=Symbol("zoneddatetime"),qe=Symbol("instant"),We=Symbol("original"),ze=Symbol("timezone"),_e=Symbol("timezone-id-given"),Je=Symbol("calendar-id"),Ve=Symbol("locale"),Xe=Symbol("options"),descriptor=e=>({value:e,enumerable:!0,writable:!1,configurable:!0}),Ke=globalThis.Intl.DateTimeFormat,Qe=Object.assign,et=Object.prototype.hasOwnProperty,tt=Reflect.apply;function getPropLazy(e,t){let r=e[t];return"function"==typeof r&&(r=new Ke(e[Ve],r(e[Xe])),e[t]=r),r}function getResolvedTimeZoneLazy(e){let t=e[ze];return"string"==typeof t&&(t=ToTemporalTimeZone(t),e[ze]=t),t}function DateTimeFormatImpl(e,t={}){if(!(this instanceof DateTimeFormatImpl))return new DateTimeFormatImpl(e,t);const r=void 0!==t,o=r?Qe({},t):{},n=new Ke(e,o),a=n.resolvedOptions();if(r){const e=Qe({},a);for(const t in e)tt(et,o,[t])||delete e[t];this[Xe]=e}else this[Xe]=o;this[_e]=o.timeZone?o.timeZone:null,this[Ve]=a.locale,this[We]=n,this[ze]=a.timeZone,this[Je]=a.calendar,this[ke]=dateAmend,this[Ae]=yearMonthAmend,this[Ue]=monthDayAmend,this[Le]=timeAmend,this[xe]=datetimeAmend,this[He]=zonedDateTimeAmend,this[qe]=instantAmend}Object.defineProperty(DateTimeFormatImpl,"name",{writable:!0,value:"DateTimeFormat"}),DateTimeFormatImpl.supportedLocalesOf=function(e,t){return Ke.supportedLocalesOf(e,t)};const rt={resolvedOptions:descriptor((function resolvedOptions(){return this[We].resolvedOptions()})),format:descriptor((function format(e,...t){let{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this);if(r&&o)return o=adjustFormatterTimeZone(o,n),o.format(r.epochMilliseconds);return this[We].format(e,...t)})),formatRange:descriptor((function formatRange(e,t){if(isTemporalObject(e)||isTemporalObject(t)){if(!sameTemporalType(e,t))throw new TypeError("Intl.DateTimeFormat.formatRange accepts two values of the same type");const{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this),{instant:a,formatter:i,timeZone:s}=extractOverrides(t,this);if(n&&s&&n!==s)throw new RangeError("cannot format range between different time zones");if(r&&a&&o&&i&&o===i){return adjustFormatterTimeZone(o,n).formatRange(r.epochMilliseconds,a.epochMilliseconds)}}return this[We].formatRange(e,t)}))};"formatToParts"in Ke.prototype&&(rt.formatToParts=descriptor((function formatToParts(e,...t){let{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this);if(r&&o)return o=adjustFormatterTimeZone(o,n),o.formatToParts(r.epochMilliseconds);return this[We].formatToParts(e,...t)}))),"formatRangeToParts"in Ke.prototype&&(rt.formatRangeToParts=descriptor((function formatRangeToParts(e,t){if(isTemporalObject(e)||isTemporalObject(t)){if(!sameTemporalType(e,t))throw new TypeError("Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type");const{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this),{instant:a,formatter:i,timeZone:s}=extractOverrides(t,this);if(n&&s&&n!==s)throw new RangeError("cannot format range between different time zones");if(r&&a&&o&&i&&o===i){return adjustFormatterTimeZone(o,n).formatRangeToParts(r.epochMilliseconds,a.epochMilliseconds)}}return this[We].formatRangeToParts(e,t)}))),DateTimeFormatImpl.prototype=Object.create(Ke.prototype,rt),Object.defineProperty(DateTimeFormatImpl,"prototype",{writable:!1,enumerable:!1,configurable:!1});const ot=DateTimeFormatImpl;function adjustFormatterTimeZone(e,t){if(!t)return e;const r=e.resolvedOptions();return r.timeZone===t?e:((r.dateStyle||r.timeStyle)&&(delete r.weekday,delete r.era,delete r.year,delete r.month,delete r.day,delete r.hour,delete r.minute,delete r.second,delete r.timeZoneName,delete r.hourCycle,delete r.hour12,delete r.dayPeriod),new Ke(r.locale,{...r,timeZone:t}))}function amend(e={},t={}){const r=Qe({},e);for(const e of["year","month","day","hour","minute","second","weekday","dayPeriod","timeZoneName","dateStyle","timeStyle"])r[e]=e in t?t[e]:r[e],!1!==r[e]&&void 0!==r[e]||delete r[e];return r}function timeAmend(e){let t=amend(e,{year:!1,month:!1,day:!1,weekday:!1,timeZoneName:!1,dateStyle:!1});return hasTimeOptions(t)||(t=Qe({},t,{hour:"numeric",minute:"numeric",second:"numeric"})),t}function yearMonthAmend(e){let t=amend(e,{day:!1,hour:!1,minute:!1,second:!1,weekday:!1,dayPeriod:!1,timeZoneName:!1,dateStyle:!1,timeStyle:!1});return"year"in t||"month"in t||(t=Qe(t,{year:"numeric",month:"numeric"})),t}function monthDayAmend(e){let t=amend(e,{year:!1,hour:!1,minute:!1,second:!1,weekday:!1,dayPeriod:!1,timeZoneName:!1,dateStyle:!1,timeStyle:!1});return"month"in t||"day"in t||(t=Qe({},t,{month:"numeric",day:"numeric"})),t}function dateAmend(e){let t=amend(e,{hour:!1,minute:!1,second:!1,dayPeriod:!1,timeZoneName:!1,timeStyle:!1});return hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric"})),t}function datetimeAmend(e){let t=amend(e,{timeZoneName:!1});return hasTimeOptions(t)||hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),t}function zonedDateTimeAmend(e){let t=e;return hasTimeOptions(t)||hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}),void 0===t.timeZoneName&&(t.timeZoneName="short")),t}function instantAmend(e){let t=e;return hasTimeOptions(t)||hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),t}function hasDateOptions(e){return"year"in e||"month"in e||"day"in e||"weekday"in e||"dateStyle"in e}function hasTimeOptions(e){return"hour"in e||"minute"in e||"second"in e||"timeStyle"in e||"dayPeriod"in e}function isTemporalObject(e){return IsTemporalDate(e)||IsTemporalTime(e)||IsTemporalDateTime(e)||IsTemporalZonedDateTime(e)||IsTemporalYearMonth(e)||IsTemporalMonthDay(e)||IsTemporalInstant(e)}function sameTemporalType(e,t){return!(!isTemporalObject(e)||!isTemporalObject(t))&&(!(IsTemporalTime(e)&&!IsTemporalTime(t))&&(!(IsTemporalDate(e)&&!IsTemporalDate(t))&&(!(IsTemporalDateTime(e)&&!IsTemporalDateTime(t))&&(!(IsTemporalZonedDateTime(e)&&!IsTemporalZonedDateTime(t))&&(!(IsTemporalYearMonth(e)&&!IsTemporalYearMonth(t))&&(!(IsTemporalMonthDay(e)&&!IsTemporalMonthDay(t))&&!(IsTemporalInstant(e)&&!IsTemporalInstant(t))))))))}function extractOverrides(e,t){const r=GetIntrinsic("%Temporal.PlainDateTime%");if(IsTemporalTime(e)){const o=new r(1970,1,1,GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,u),t[Je]);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),o,"compatible"),formatter:getPropLazy(t,Le)}}if(IsTemporalYearMonth(e)){const o=GetSlot(e,n),s=GetSlot(e,a),l=GetSlot(e,i),d=ToString(GetSlot(e,h));if(d!==t[Je])throw new RangeError(`cannot format PlainYearMonth with calendar ${d} in locale with calendar ${t[Je]}`);const m=new r(o,s,l,12,0,0,0,0,0,d);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),m,"compatible"),formatter:getPropLazy(t,Ae)}}if(IsTemporalMonthDay(e)){const o=GetSlot(e,n),s=GetSlot(e,a),l=GetSlot(e,i),d=ToString(GetSlot(e,h));if(d!==t[Je])throw new RangeError(`cannot format PlainMonthDay with calendar ${d} in locale with calendar ${t[Je]}`);const m=new r(o,s,l,12,0,0,0,0,0,d);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),m,"compatible"),formatter:getPropLazy(t,Ue)}}if(IsTemporalDate(e)){const o=GetSlot(e,n),s=GetSlot(e,a),l=GetSlot(e,i),d=ToString(GetSlot(e,h));if("iso8601"!==d&&d!==t[Je])throw new RangeError(`cannot format PlainDate with calendar ${d} in locale with calendar ${t[Je]}`);const m=new r(o,s,l,12,0,0,0,0,0,t[Je]);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),m,"compatible"),formatter:getPropLazy(t,ke)}}if(IsTemporalDateTime(e)){const o=GetSlot(e,n),T=GetSlot(e,a),p=GetSlot(e,i),f=GetSlot(e,s),y=GetSlot(e,l),S=GetSlot(e,d),w=GetSlot(e,m),g=GetSlot(e,c),I=GetSlot(e,u),D=ToString(GetSlot(e,h));if("iso8601"!==D&&D!==t[Je])throw new RangeError(`cannot format PlainDateTime with calendar ${D} in locale with calendar ${t[Je]}`);let G=e;return"iso8601"===D&&(G=new r(o,T,p,f,y,S,w,g,I,t[Je])),{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),G,"compatible"),formatter:getPropLazy(t,xe)}}if(IsTemporalZonedDateTime(e)){const r=ToString(GetSlot(e,h));if("iso8601"!==r&&r!==t[Je])throw new RangeError(`cannot format ZonedDateTime with calendar ${r} in locale with calendar ${t[Je]}`);const o=ToString(GetSlot(e,p));if(t[_e]&&t[_e]!==o)throw new RangeError(`timeZone option ${t[_e]} doesn't match actual time zone ${o}`);return{instant:GetSlot(e,T),formatter:getPropLazy(t,He),timeZone:o}}return IsTemporalInstant(e)?{instant:e,formatter:getPropLazy(t,qe)}:{}}var nt=Object.freeze({__proto__:null,DateTimeFormat:ot});class Instant{constructor(e){if(arguments.length<1)throw new TypeError("missing argument: epochNanoseconds is required");const t=ToBigInt(e);ValidateEpochNanoseconds(t),CreateSlots(this),SetSlot(this,r,t)}get epochSeconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return e.default.toNumber(e.default.divide(t,ye))}get epochMilliseconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=e.default.BigInt(GetSlot(this,r));return e.default.toNumber(e.default.divide(t,fe))}get epochMicroseconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=e.default.BigInt(GetSlot(this,r));return ToBigIntExternal(e.default.divide(t,pe))}get epochNanoseconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return ToBigIntExternal(e.default.BigInt(GetSlot(this,r)))}add(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromInstant("add",this,e)}subtract(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromInstant("subtract",this,e)}until(e,t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return DifferenceTemporalInstant("until",this,e,t)}since(e,t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return DifferenceTemporalInstant("since",this,e,t)}round(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");const t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),o=GetTemporalUnit(t,"smallestUnit","time",je),n=ToTemporalRoundingMode(t,"halfExpand"),a=ToTemporalRoundingIncrement(t,{hour:24,minute:1440,second:86400,millisecond:864e5,microsecond:864e8,nanosecond:864e11}[o],!0),i=RoundInstant(GetSlot(this,r),a,o,n);return new Instant(i)}equals(t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const o=ToTemporalInstant(t),n=GetSlot(this,r),a=GetSlot(o,r);return e.default.equal(e.default.BigInt(n),e.default.BigInt(a))}toString(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e);let o=t.timeZone;void 0!==o&&(o=ToTemporalTimeZone(o));const{precision:n,unit:a,increment:i}=ToSecondsStringPrecision(t),s=ToTemporalRoundingMode(t,"trunc"),l=RoundInstant(GetSlot(this,r),i,a,s);return TemporalInstantToString(new Instant(l),o,n)}toJSON(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return TemporalInstantToString(this,void 0,"auto")}toLocaleString(e,t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.Instant")}toZonedDateTime(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument in toZonedDateTime");const t=e.calendar;if(void 0===t)throw new TypeError("missing calendar property in toZonedDateTime");const o=ToTemporalCalendar(t),n=e.timeZone;if(void 0===n)throw new TypeError("missing timeZone property in toZonedDateTime");const a=ToTemporalTimeZone(n);return CreateTemporalZonedDateTime(GetSlot(this,r),a,o)}toZonedDateTimeISO(e){let t=e;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(IsObject(t)){const e=t.timeZone;void 0!==e&&(t=e)}const o=ToTemporalTimeZone(t),n=GetISO8601Calendar();return CreateTemporalZonedDateTime(GetSlot(this,r),o,n)}static fromEpochSeconds(t){const r=ToNumber(t),o=e.default.multiply(e.default.BigInt(r),ye);return ValidateEpochNanoseconds(o),new Instant(o)}static fromEpochMilliseconds(t){const r=ToNumber(t),o=e.default.multiply(e.default.BigInt(r),fe);return ValidateEpochNanoseconds(o),new Instant(o)}static fromEpochMicroseconds(t){const r=ToBigInt(t),o=e.default.multiply(r,pe);return ValidateEpochNanoseconds(o),new Instant(o)}static fromEpochNanoseconds(e){const t=ToBigInt(e);return ValidateEpochNanoseconds(t),new Instant(t)}static from(e){return IsTemporalInstant(e)?new Instant(GetSlot(e,r)):ToTemporalInstant(e)}static compare(t,o){const n=ToTemporalInstant(t),a=ToTemporalInstant(o),i=GetSlot(n,r),s=GetSlot(a,r);return e.default.lessThan(i,s)?-1:e.default.greaterThan(i,s)?1:0}}MakeIntrinsicClass(Instant,"Temporal.Instant");const at=Array.prototype.includes,it=Array.prototype.push,st=globalThis.Intl.DateTimeFormat,lt=Array.prototype.sort,dt=Math.abs,mt=Math.floor,ct=Object.entries,ut=Object.keys,ht={};class Calendar{constructor(e){if(arguments.length<1)throw new RangeError("missing argument: id is required");const t=ToString(e);if(!IsBuiltinCalendar(t))throw new RangeError(`invalid calendar identifier ${t}`);CreateSlots(this),SetSlot(this,C,t)}get id(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ToString(this)}dateFromFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");const r=GetOptionsObject(t);return ht[GetSlot(this,C)].dateFromFields(e,r,this)}yearMonthFromFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");const r=GetOptionsObject(t);return ht[GetSlot(this,C)].yearMonthFromFields(e,r,this)}monthDayFromFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");const r=GetOptionsObject(t);return ht[GetSlot(this,C)].monthDayFromFields(e,r,this)}fields(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=[],r=new Set(["year","month","monthCode","day","hour","minute","second","millisecond","microsecond","nanosecond"]);for(const o of e){if("string"!=typeof o)throw new TypeError("invalid fields");if(!r.has(o))throw new RangeError(`invalid field name ${o}`);r.delete(o),it.call(t,o)}return ht[GetSlot(this,C)].fields(t)}mergeFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ht[GetSlot(this,C)].mergeFields(e,t)}dateAdd(e,t,r){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const o=ToTemporalDate(e),n=ToTemporalDuration(t),a=ToTemporalOverflow(GetOptionsObject(r)),{days:i}=BalanceDuration(GetSlot(n,w),GetSlot(n,g),GetSlot(n,I),GetSlot(n,D),GetSlot(n,G),GetSlot(n,v),GetSlot(n,O),"day");return ht[GetSlot(this,C)].dateAdd(o,GetSlot(n,f),GetSlot(n,y),GetSlot(n,S),i,a,this)}dateUntil(e,t,r){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const o=ToTemporalDate(e),n=ToTemporalDate(t);let a=GetTemporalUnit(GetOptionsObject(r),"largestUnit","date","auto");"auto"===a&&(a="day");const{years:i,months:s,weeks:l,days:d}=ht[GetSlot(this,C)].dateUntil(o,n,a);return new(GetIntrinsic("%Temporal.Duration%"))(i,s,l,d,0,0,0,0,0,0)}year(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].year(t)}month(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(IsTemporalMonthDay(t))throw new TypeError("use monthCode on PlainMonthDay instead");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].month(t)}monthCode(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||IsTemporalMonthDay(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].monthCode(t)}day(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalMonthDay(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].day(t)}era(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].era(t)}eraYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].eraYear(t)}dayOfWeek(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ht[GetSlot(this,C)].dayOfWeek(t)}dayOfYear(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ht[GetSlot(this,C)].dayOfYear(t)}weekOfYear(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ht[GetSlot(this,C)].weekOfYear(t)}daysInWeek(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ht[GetSlot(this,C)].daysInWeek(t)}daysInMonth(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].daysInMonth(t)}daysInYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].daysInYear(t)}monthsInYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].monthsInYear(t)}inLeapYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ht[GetSlot(this,C)].inLeapYear(t)}toString(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return GetSlot(this,C)}toJSON(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ToString(this)}static from(e){return ToTemporalCalendar(e)}}function monthCodeNumberPart(e){if(!e.startsWith("M"))throw new RangeError(`Invalid month code: ${e}. Month codes must start with M.`);const t=+e.slice(1);if(isNaN(t))throw new RangeError(`Invalid month code: ${e}`);return t}function buildMonthCode(e,t=!1){return`M${e.toString().padStart(2,"0")}${t?"L":""}`}function resolveNonLunisolarMonth(e,t,r=12){let{month:o,monthCode:n}=e;if(void 0===n){if(void 0===o)throw new TypeError("Either month or monthCode are required");"reject"===t&&RejectToRange(o,1,r),"constrain"===t&&(o=ConstrainToRange(o,1,r)),n=buildMonthCode(o)}else{const e=monthCodeNumberPart(n);if(void 0!==o&&o!==e)throw new RangeError(`monthCode ${n} and month ${o} must match if both are present`);if(n!==buildMonthCode(e))throw new RangeError(`Invalid month code: ${n}`);if(o=e,o<1||o>r)throw new RangeError(`Invalid monthCode: ${n}`)}return{...e,month:o,monthCode:n}}MakeIntrinsicClass(Calendar,"Temporal.Calendar"),DefineIntrinsic("Temporal.Calendar.from",Calendar.from),ht.iso8601={dateFromFields(e,t,r){const o=ToTemporalOverflow(t);let n=PrepareTemporalFields(e,["day","month","monthCode","year"],["year","day"]);n=resolveNonLunisolarMonth(n);let{year:a,month:i,day:s}=n;return({year:a,month:i,day:s}=RegulateISODate(a,i,s,o)),CreateTemporalDate(a,i,s,r)},yearMonthFromFields(e,t,r){const o=ToTemporalOverflow(t);let n=PrepareTemporalFields(e,["month","monthCode","year"],["year"]);n=resolveNonLunisolarMonth(n);let{year:a,month:i}=n;return({year:a,month:i}=function RegulateISOYearMonth(e,t,r){let o=e,n=t;switch(r){case"reject":RejectISODate(o,n,1);break;case"constrain":({year:o,month:n}=ConstrainISODate(o,n))}return{year:o,month:n}}(a,i,o)),CreateTemporalYearMonth(a,i,r,1)},monthDayFromFields(e,t,r){const o=ToTemporalOverflow(t);let n=PrepareTemporalFields(e,["day","month","monthCode","year"],["day"]);if(void 0!==n.month&&void 0===n.year&&void 0===n.monthCode)throw new TypeError("either year or monthCode required with month");const a=void 0===n.monthCode;n=resolveNonLunisolarMonth(n);let{month:i,day:s,year:l}=n;return({month:i,day:s}=RegulateISODate(a?l:1972,i,s,o)),CreateTemporalMonthDay(i,s,r,1972)},fields:e=>e,mergeFields(e,t){const r={};for(const t of ut(e))"month"!==t&&"monthCode"!==t&&(r[t]=e[t]);const o=ut(t);for(const e of o)r[e]=t[e];if(!at.call(o,"month")&&!at.call(o,"monthCode")){const{month:t,monthCode:o}=e;void 0!==t&&(r.month=t),void 0!==o&&(r.monthCode=o)}return r},dateAdd(e,t,r,o,s,l,d){let m=GetSlot(e,n),c=GetSlot(e,a),u=GetSlot(e,i);return({year:m,month:c,day:u}=AddISODate(m,c,u,t,r,o,s,l)),CreateTemporalDate(m,c,u,d)},dateUntil:(e,t,r)=>DifferenceISODate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(t,n),GetSlot(t,a),GetSlot(t,i),r),year:e=>GetSlot(e,n),era(){},eraYear(){},month:e=>GetSlot(e,a),monthCode:e=>buildMonthCode(GetSlot(e,a)),day:e=>GetSlot(e,i),dayOfWeek:e=>DayOfWeek(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i)),dayOfYear:e=>DayOfYear(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i)),weekOfYear:e=>function WeekOfYear(e,t,r){const o=DayOfYear(e,t,r),n=DayOfWeek(e,t,r)||7,a=DayOfWeek(e,1,1),i=Q((o-n+10)/7);return i<1?5===a||6===a&&LeapYear(e-1)?53:52:53===i&&(LeapYear(e)?366:365)-o<4-n?1:i}(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i)),daysInWeek:()=>7,daysInMonth:e=>ISODaysInMonth(GetSlot(e,n),GetSlot(e,a)),daysInYear(e){let t=e;return HasSlot(t,n)||(t=ToTemporalDate(t)),LeapYear(GetSlot(t,n))?366:365},monthsInYear:()=>12,inLeapYear(e){let t=e;return HasSlot(t,n)||(t=ToTemporalDate(t)),LeapYear(GetSlot(t,n))}};class OneObjectCache{constructor(e){if(this.map=new Map,this.calls=0,this.hits=0,this.misses=0,this.now=globalThis.performance?globalThis.performance.now():Date.now(),void 0!==e){let t=0;for(const r of e.map.entries()){if(++t>OneObjectCache.MAX_CACHE_ENTRIES)break;this.map.set(...r)}}}get(e){const t=this.map.get(e);return t&&(this.hits++,this.report()),this.calls++,t}set(e,t){this.map.set(e,t),this.misses++,this.report()}report(){}setObject(e){if(OneObjectCache.objectMap.get(e))throw new RangeError("object already cached");OneObjectCache.objectMap.set(e,this),this.report()}static getCacheForObject(e){let t=OneObjectCache.objectMap.get(e);return t||(t=new OneObjectCache,OneObjectCache.objectMap.set(e,t)),t}}function toUtcIsoDateString({isoYear:e,isoMonth:t,isoDay:r}){return`${ISOYearString(e)}-${ISODateTimePartString(t)}-${ISODateTimePartString(r)}T00:00Z`}function simpleDateDiff(e,t){return{years:e.year-t.year,months:e.month-t.month,days:e.day-t.day}}OneObjectCache.objectMap=new WeakMap,OneObjectCache.MAX_CACHE_ENTRIES=1e3;class HelperBase{constructor(){this.eraLength="short",this.hasEra=!0}getFormatter(){return void 0===this.formatter&&(this.formatter=new st(`en-US-u-ca-${this.id}`,{day:"numeric",month:"numeric",year:"numeric",era:this.eraLength,timeZone:"UTC"})),this.formatter}isoToCalendarDate(e,t){const{year:r,month:o,day:n}=e,a=JSON.stringify({func:"isoToCalendarDate",isoYear:r,isoMonth:o,isoDay:n,id:this.id}),i=t.get(a);if(i)return i;const s=this.getFormatter();let l,d;try{d=toUtcIsoDateString({isoYear:r,isoMonth:o,isoDay:n}),l=s.formatToParts(new Date(d))}catch(e){throw new RangeError(`Invalid ISO date: ${JSON.stringify({isoYear:r,isoMonth:o,isoDay:n})}`)}const m={};for(let{type:e,value:t}of l){if("year"===e&&(m.eraYear=+t),"relatedYear"===e&&(m.eraYear=+t),"month"===e){const e=/^([0-9]*)(.*?)$/.exec(t);if(!e||3!=e.length||!e[1]&&!e[2])throw new RangeError(`Unexpected month: ${t}`);if(m.month=e[1]?+e[1]:1,m.month<1)throw new RangeError(`Invalid month ${t} from ${d}[u-ca-${this.id}] (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)`);if(m.month>13)throw new RangeError(`Invalid month ${t} from ${d}[u-ca-${this.id}] (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)`);e[2]&&(m.monthExtra=e[2])}"day"===e&&(m.day=+t),this.hasEra&&"era"===e&&null!=t&&""!==t&&(t=t.split(" (")[0],m.era=t.normalize("NFD").replace(/[^-0-9 \p{L}]/gu,"").replace(" ","-").toLowerCase())}if(void 0===m.eraYear)throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);if(this.reviseIntlEra){const{era:t,eraYear:r}=this.reviseIntlEra(m,e);m.era=t,m.eraYear=r}this.checkIcuBugs&&this.checkIcuBugs(e);const c=this.adjustCalendarDate(m,t,"constrain",!0);if(void 0===c.year)throw new RangeError(`Missing year converting ${JSON.stringify(e)}`);if(void 0===c.month)throw new RangeError(`Missing month converting ${JSON.stringify(e)}`);if(void 0===c.day)throw new RangeError(`Missing day converting ${JSON.stringify(e)}`);return t.set(a,c),["constrain","reject"].forEach((r=>{const o=JSON.stringify({func:"calendarToIsoDate",year:c.year,month:c.month,day:c.day,overflow:r,id:this.id});t.set(o,e)})),c}validateCalendarDate(e){const{era:t,month:r,year:o,day:n,eraYear:a,monthCode:i,monthExtra:s}=e;if(void 0!==s)throw new RangeError("Unexpected `monthExtra` value");if(void 0===o&&void 0===a)throw new TypeError("year or eraYear is required");if(void 0===r&&void 0===i)throw new TypeError("month or monthCode is required");if(void 0===n)throw new RangeError("Missing day");if(void 0!==i){if("string"!=typeof i)throw new RangeError("monthCode must be a string, not "+typeof i);if(!/^M([01]?\d)(L?)$/.test(i))throw new RangeError(`Invalid monthCode: ${i}`)}if(this.constantEra){if(void 0!==t&&t!==this.constantEra)throw new RangeError(`era must be ${this.constantEra}, not ${t}`);if(void 0!==a&&void 0!==o&&a!==o)throw new RangeError(`eraYear ${a} does not match year ${o}`)}}adjustCalendarDate(e,t,r="constrain",o=!1){if("lunisolar"===this.calendarType)throw new RangeError("Override required for lunisolar calendars");let n=e;if(this.validateCalendarDate(n),this.constantEra){const{year:e,eraYear:t}=n;n={...n,era:this.constantEra,year:void 0!==e?e:t,eraYear:void 0!==t?t:e}}const a=this.monthsInYear(n,t);let{month:i,monthCode:s}=n;return({month:i,monthCode:s}=resolveNonLunisolarMonth(n,r,a)),{...n,month:i,monthCode:s}}regulateMonthDayNaive(e,t,r){const o=this.monthsInYear(e,r);let{month:n,day:a}=e;return"reject"===t?(RejectToRange(n,1,o),RejectToRange(a,1,this.maximumMonthLength(e))):(n=ConstrainToRange(n,1,o),a=ConstrainToRange(a,1,this.maximumMonthLength({...e,month:n}))),{...e,month:n,day:a}}calendarToIsoDate(e,t="constrain",r){const o=e;let n=this.adjustCalendarDate(e,r,t,!1);n=this.regulateMonthDayNaive(n,t,r);const{year:a,month:i,day:s}=n,l=JSON.stringify({func:"calendarToIsoDate",year:a,month:i,day:s,overflow:t,id:this.id});let d,m=r.get(l);if(m)return m;if(void 0!==o.year&&void 0!==o.month&&void 0!==o.day&&(o.year!==n.year||o.month!==n.month||o.day!==n.day)&&(d=JSON.stringify({func:"calendarToIsoDate",year:o.year,month:o.month,day:o.day,overflow:t,id:this.id}),m=r.get(d),m))return m;let c=this.estimateIsoDate({year:a,month:i,day:s});const calculateSameMonthResult=e=>{let o=this.addDaysIso(c,e);if(n.day>this.minimumMonthLength(n)){let e=this.isoToCalendarDate(o,r);for(;e.month!==i||e.year!==a;){if("reject"===t)throw new RangeError(`day ${s} does not exist in month ${i} of year ${a}`);o=this.addDaysIso(o,-1),e=this.isoToCalendarDate(o,r)}}return o};let u=0,h=this.isoToCalendarDate(c,r),T=simpleDateDiff(n,h);if(0!==T.years||0!==T.months||0!==T.days){const e=365*T.years+30*T.months+T.days;c=this.addDaysIso(c,e),h=this.isoToCalendarDate(c,r),T=simpleDateDiff(n,h),0===T.years&&0===T.months?c=calculateSameMonthResult(T.days):u=this.compareCalendarDates(n,h)}let p=8,f=!1;for(;u;){c=this.addDaysIso(c,u*p);const e=h;h=this.isoToCalendarDate(c,r);const a=u;if(u=this.compareCalendarDates(n,h),u)if(T=simpleDateDiff(n,h),0===T.years&&0===T.months)c=calculateSameMonthResult(T.days),u=0,f=n.day>this.minimumMonthLength(n);else if(a&&u!==a)if(p>1)p/=2;else{if("reject"===t)throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({...o})}`);this.compareCalendarDates(h,e)>0&&(c=this.addDaysIso(c,-1)),f=!0,u=0}}if(r.set(l,c),d&&r.set(d,c),void 0===n.year||void 0===n.month||void 0===n.day||void 0===n.monthCode||this.hasEra&&(void 0===n.era||void 0===n.eraYear))throw new RangeError("Unexpected missing property");if(!f){const e=JSON.stringify({func:"isoToCalendarDate",isoYear:c.year,isoMonth:c.month,isoDay:c.day,id:this.id});r.set(e,n)}return c}temporalToCalendarDate(e,t){const r={year:GetSlot(e,n),month:GetSlot(e,a),day:GetSlot(e,i)};return this.isoToCalendarDate(r,t)}compareCalendarDates(e,t){const r=PrepareTemporalFields(e,["day","month","year"],["day","month","year"]),o=PrepareTemporalFields(t,["day","month","year"],["day","month","year"]);return r.year!==o.year?ComparisonResult(r.year-o.year):r.month!==o.month?ComparisonResult(r.month-o.month):r.day!==o.day?ComparisonResult(r.day-o.day):0}regulateDate(e,t="constrain",r){const o=this.calendarToIsoDate(e,t,r);return this.isoToCalendarDate(o,r)}addDaysIso(e,t){return AddISODate(e.year,e.month,e.day,0,0,0,t,"constrain")}addDaysCalendar(e,t,r){const o=this.calendarToIsoDate(e,"constrain",r),n=this.addDaysIso(o,t);return this.isoToCalendarDate(n,r)}addMonthsCalendar(e,t,r,o){let n=e;const{day:a}=n;for(let e=0,r=dt(t);e0){const t=this.monthsInYear(r,o);for(;n.month-1!=e%t;)l=this.addDaysIso(l,-1),n=this.isoToCalendarDate(l,o)}n.day!==a&&(n=this.regulateDate({...n,day:a},"constrain",o))}if("reject"===r&&n.day!==a)throw new RangeError(`Day ${a} does not exist in resulting calendar month`);return n}addCalendar(e,{years:t=0,months:r=0,weeks:o=0,days:n=0},a,i){const{year:s,day:l,monthCode:d}=e,m=this.adjustCalendarDate({year:s+t,monthCode:d,day:l},i),c=this.addMonthsCalendar(m,r,a,i),u=n+7*o;return this.addDaysCalendar(c,u,i)}untilCalendar(e,t,r,o){let n=0,a=0,i=0,s=0;switch(r){case"day":n=this.calendarDaysUntil(e,t,o);break;case"week":{const r=this.calendarDaysUntil(e,t,o);n=r%7,a=(r-n)/7;break}case"month":case"year":{const a=t.year-e.year,l=t.month-e.month,d=t.day-e.day,m=this.compareCalendarDates(t,e);if(!m)return{years:0,months:0,weeks:0,days:0};if("year"===r&&a){s=l*m<0||0===l&&d*m<0?a-m:a}let c,u=s?this.addCalendar(e,{years:s},"constrain",o):e;do{i+=m,c=u,u=this.addMonthsCalendar(c,m,"constrain",o),u.day!==e.day&&(u=this.regulateDate({...u,day:e.day},"constrain",o))}while(this.compareCalendarDates(t,u)*m>=0);i-=m;n=this.calendarDaysUntil(c,t,o);break}}return{years:s,months:i,weeks:a,days:n}}daysInMonth(e,t){const{day:r}=e,o=this.maximumMonthLength(e),n=this.minimumMonthLength(e);if(n===o)return n;const a=r<=o-n?o:n,i=this.calendarToIsoDate(e,"constrain",t),s=this.addDaysIso(i,a),l=this.isoToCalendarDate(s,t),d=this.addDaysIso(s,-l.day);return this.isoToCalendarDate(d,t).day}daysInPreviousMonth(e,t){const{day:r,month:o,year:n}=e;let a={year:o>1?n:n-1,month:o,day:1};const i=o>1?o-1:this.monthsInYear(a,t);a={...a,month:i};const s=this.minimumMonthLength(a),l=this.maximumMonthLength(a);if(s===l)return l;const d=this.calendarToIsoDate(e,"constrain",t),m=this.addDaysIso(d,-r);return this.isoToCalendarDate(m,t).day}startOfCalendarYear(e){return{year:e.year,month:1,monthCode:"M01",day:1}}startOfCalendarMonth(e){return{year:e.year,month:e.month,day:1}}calendarDaysUntil(e,t,r){const o=this.calendarToIsoDate(e,"constrain",r),n=this.calendarToIsoDate(t,"constrain",r);return this.isoDaysUntil(o,n)}isoDaysUntil(e,t){return DifferenceISODate(e.year,e.month,e.day,t.year,t.month,t.day,"day").days}monthDayFromFields(e,t,r){let o,n,a,i,s,{year:l,month:d,monthCode:m,day:c,era:u,eraYear:h}=e;if(void 0===m){if(void 0===l&&(void 0===u||void 0===h))throw new TypeError("`monthCode`, `year`, or `era` and `eraYear` is required");({monthCode:m,year:l}=this.adjustCalendarDate({year:l,month:d,monthCode:m,day:c,era:u,eraYear:h},r,t))}const{year:T}=this.isoToCalendarDate({year:1972,month:1,day:1},r);for(let e=0;e<100;e++){const l=this.adjustCalendarDate({day:c,monthCode:m,year:T-e},r),d=this.calendarToIsoDate(l,"constrain",r),u=this.isoToCalendarDate(d,r);if(({year:o,month:n,day:a}=d),u.monthCode===m&&u.day===c)return{month:n,day:a,year:o};"constrain"===t&&(void 0===i||u.monthCode===i.monthCode&&u.day>i.day)&&(i=u,s=d)}if("constrain"===t&&void 0!==s)return s;throw new RangeError(`No recent ${this.id} year with monthCode ${m} and day ${c}`)}}class HebrewHelper extends HelperBase{constructor(){super(...arguments),this.id="hebrew",this.calendarType="lunisolar",this.months={Tishri:{leap:1,regular:1,monthCode:"M01",days:30},Heshvan:{leap:2,regular:2,monthCode:"M02",days:{min:29,max:30}},Kislev:{leap:3,regular:3,monthCode:"M03",days:{min:29,max:30}},Tevet:{leap:4,regular:4,monthCode:"M04",days:29},Shevat:{leap:5,regular:5,monthCode:"M05",days:30},Adar:{leap:void 0,regular:6,monthCode:"M06",days:29},"Adar I":{leap:6,regular:void 0,monthCode:"M05L",days:30},"Adar II":{leap:7,regular:void 0,monthCode:"M06",days:29},Nisan:{leap:8,regular:7,monthCode:"M07",days:30},Iyar:{leap:9,regular:8,monthCode:"M08",days:29},Sivan:{leap:10,regular:9,monthCode:"M09",days:30},Tamuz:{leap:11,regular:10,monthCode:"M10",days:29},Av:{leap:12,regular:11,monthCode:"M11",days:30},Elul:{leap:13,regular:12,monthCode:"M12",days:29}},this.hasEra=!1}inLeapYear(e){const{year:t}=e;return(7*t+1)%19<7}monthsInYear(e){return this.inLeapYear(e)?13:12}minimumMonthLength(e){return this.minMaxMonthLength(e,"min")}maximumMonthLength(e){return this.minMaxMonthLength(e,"max")}minMaxMonthLength(e,t){const{month:r,year:o}=e,n=this.getMonthCode(o,r),a=ct(this.months).find((e=>e[1].monthCode===n));if(void 0===a)throw new RangeError(`unmatched Hebrew month: ${r}`);const i=a[1].days;return"number"==typeof i?i:i[t]}estimateIsoDate(e){const{year:t}=e;return{year:t-3760,month:1,day:1}}getMonthCode(e,t){return this.inLeapYear({year:e})?6===t?buildMonthCode(5,!0):buildMonthCode(t<6?t:t-1):buildMonthCode(t)}adjustCalendarDate(e,t,r="constrain",o=!1){let{year:n,eraYear:a,month:i,monthCode:s,day:l,monthExtra:d}=e;if(void 0===n&&void 0!==a&&(n=a),void 0===a&&void 0!==n&&(a=n),o){if(d){const e=this.months[d];if(!e)throw new RangeError(`Unrecognized month from formatToParts: ${d}`);i=this.inLeapYear({year:n})?e.leap:e.regular}s=this.getMonthCode(n,i);return{year:n,month:i,day:l,era:void 0,eraYear:a,monthCode:s}}if(this.validateCalendarDate(e),void 0===i)if(s.endsWith("L")){if("M05L"!==s)throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${s}`);if(i=6,!this.inLeapYear({year:n})){if("reject"===r)throw new RangeError(`Hebrew monthCode M05L is invalid in year ${n} which is not a leap year`);i=5,l=30,s="M05"}}else{i=monthCodeNumberPart(s),this.inLeapYear({year:n})&&i>=6&&i++;const e=this.monthsInYear({year:n});if(i<1||i>e)throw new RangeError(`Invalid monthCode: ${s}`)}else if("reject"===r?(RejectToRange(i,1,this.monthsInYear({year:n})),RejectToRange(l,1,this.maximumMonthLength({year:n,month:i}))):(i=ConstrainToRange(i,1,this.monthsInYear({year:n})),l=ConstrainToRange(l,1,this.maximumMonthLength({year:n,month:i}))),void 0===s)s=this.getMonthCode(n,i);else{if(this.getMonthCode(n,i)!==s)throw new RangeError(`monthCode ${s} doesn't correspond to month ${i} in Hebrew year ${n}`)}return{...e,day:l,month:i,monthCode:s,year:n,eraYear:a}}}class IslamicBaseHelper extends HelperBase{constructor(){super(...arguments),this.calendarType="lunar",this.DAYS_PER_ISLAMIC_YEAR=354+11/30,this.DAYS_PER_ISO_YEAR=365.2425,this.constantEra="ah"}inLeapYear(e,t){return 30===this.daysInMonth({year:e.year,month:12,day:1},t)}monthsInYear(){return 12}minimumMonthLength(){return 29}maximumMonthLength(){return 30}estimateIsoDate(e){const{year:t}=this.adjustCalendarDate(e);return{year:mt(t*this.DAYS_PER_ISLAMIC_YEAR/this.DAYS_PER_ISO_YEAR)+622,month:1,day:1}}}class IslamicHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic"}}class IslamicUmalquraHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-umalqura"}}class IslamicTblaHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-tbla"}}class IslamicCivilHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-civil"}}class IslamicRgsaHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-rgsa"}}class IslamicCcHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamicc"}}class PersianHelper extends HelperBase{constructor(){super(...arguments),this.id="persian",this.calendarType="solar",this.constantEra="ap"}inLeapYear(e,t){return IslamicHelper.prototype.inLeapYear.call(this,e,t)}monthsInYear(){return 12}minimumMonthLength(e){const{month:t}=e;return 12===t?29:t<=6?31:30}maximumMonthLength(e){const{month:t}=e;return 12===t?30:t<=6?31:30}estimateIsoDate(e){const{year:t}=this.adjustCalendarDate(e);return{year:t+621,month:1,day:1}}}class IndianHelper extends HelperBase{constructor(){super(...arguments),this.id="indian",this.calendarType="solar",this.constantEra="saka",this.months={1:{length:30,month:3,day:22,leap:{length:31,month:3,day:21}},2:{length:31,month:4,day:21},3:{length:31,month:5,day:22},4:{length:31,month:6,day:22},5:{length:31,month:7,day:23},6:{length:31,month:8,day:23},7:{length:30,month:9,day:23},8:{length:30,month:10,day:23},9:{length:30,month:11,day:22},10:{length:30,month:12,day:22},11:{length:30,month:1,nextYear:!0,day:21},12:{length:30,month:2,nextYear:!0,day:20}},this.vulnerableToBceBug="10/11/-79 Saka"!==new Date("0000-01-01T00:00Z").toLocaleDateString("en-US-u-ca-indian",{timeZone:"UTC"})}inLeapYear(e){return isGregorianLeapYear(e.year+78)}monthsInYear(){return 12}minimumMonthLength(e){return this.getMonthInfo(e).length}maximumMonthLength(e){return this.getMonthInfo(e).length}getMonthInfo(e){const{month:t}=e;let r=this.months[t];if(void 0===r)throw new RangeError(`Invalid month: ${t}`);return this.inLeapYear(e)&&r.leap&&(r=r.leap),r}estimateIsoDate(e){const t=this.adjustCalendarDate(e),r=this.getMonthInfo(t);return AddISODate(t.year+78+(r.nextYear?1:0),r.month,r.day,0,0,0,t.day-1,"constrain")}checkIcuBugs(e){if(this.vulnerableToBceBug&&e.year<1)throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01 (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)`)}}function isGregorianLeapYear(e){return e%4==0&&(e%100!=0||e%400==0)}class GregorianBaseHelper extends HelperBase{constructor(e,t){super(),this.calendarType="solar",this.v8IsVulnerableToJulianBug=new Date("+001001-01-01T00:00Z").toLocaleDateString("en-US-u-ca-japanese",{timeZone:"UTC"}).startsWith("12"),this.calendarIsVulnerableToJulianBug=!1,this.id=e;const{eras:r,anchorEra:o}=function adjustEras(e){let t,r=e;if(0===r.length)throw new RangeError("Invalid era data: eras are required");if(1===r.length&&r[0].reverseOf)throw new RangeError("Invalid era data: anchor era cannot count years backwards");if(1===r.length&&!r[0].name)throw new RangeError("Invalid era data: at least one named era is required");if(r.filter((e=>null!=e.reverseOf)).length>1)throw new RangeError("Invalid era data: only one era can count years backwards");r.forEach((e=>{if(e.isAnchor||!e.anchorEpoch&&!e.reverseOf){if(t)throw new RangeError("Invalid era data: cannot have multiple anchor eras");t=e,e.anchorEpoch={year:e.hasYearZero?0:1}}else if(!e.name)throw new RangeError("If era name is blank, it must be the anchor era")})),r=r.filter((e=>e.name)),r.forEach((e=>{const{reverseOf:t}=e;if(t){const o=r.find((e=>e.name===t));if(void 0===o)throw new RangeError(`Invalid era data: unmatched reverseOf era: ${t}`);e.reverseOf=o,e.anchorEpoch=o.anchorEpoch,e.isoEpoch=o.isoEpoch}void 0===e.anchorEpoch.month&&(e.anchorEpoch.month=1),void 0===e.anchorEpoch.day&&(e.anchorEpoch.day=1)})),lt.call(r,((e,t)=>{if(e.reverseOf)return 1;if(t.reverseOf)return-1;if(!e.isoEpoch||!t.isoEpoch)throw new RangeError("Invalid era data: missing ISO epoch");return t.isoEpoch.year-e.isoEpoch.year}));const o=r[r.length-1].reverseOf;if(o&&o!==r[r.length-2])throw new RangeError("Invalid era data: invalid reverse-sign era");return r.forEach(((e,t)=>{e.genericName="era"+(r.length-1-t)})),{eras:r,anchorEra:t||r[0]}}(t);this.anchorEra=o,this.eras=r}inLeapYear(e){const{year:t}=this.estimateIsoDate({month:1,day:1,year:e.year});return isGregorianLeapYear(t)}monthsInYear(){return 12}minimumMonthLength(e){const{month:t}=e;return 2===t?this.inLeapYear(e)?29:28:[4,6,9,11].indexOf(t)>=0?30:31}maximumMonthLength(e){return this.minimumMonthLength(e)}completeEraYear(e){const checkField=(t,r)=>{const o=e[t];if(null!=o&&o!=r)throw new RangeError(`Input ${t} ${o} doesn't match calculated value ${r}`)},eraFromYear=t=>{let r;const o={...e,year:t},n=this.eras.find(((e,n)=>{if(n===this.eras.length-1){if(e.reverseOf){if(t>0)throw new RangeError(`Signed year ${t} is invalid for era ${e.name}`);return r=e.anchorEpoch.year-t,!0}return r=t-e.anchorEpoch.year+(e.hasYearZero?0:1),!0}return this.compareCalendarDates(o,e.anchorEpoch)>=0&&(r=t-e.anchorEpoch.year+(e.hasYearZero?0:1),!0)}));if(!n)throw new RangeError(`Year ${t} was not matched by any era`);return{eraYear:r,era:n.name}};let{year:t,eraYear:r,era:o}=e;if(null!=t)({eraYear:r,era:o}=eraFromYear(t)),checkField("era",o),checkField("eraYear",r);else{if(null==r)throw new RangeError("Either `year` or `eraYear` and `era` are required");{const e=void 0===o?void 0:this.eras.find((e=>e.name===o||e.genericName===o));if(!e)throw new RangeError(`Era ${o} (ISO year ${r}) was not matched by any era`);if(r<1&&e.reverseOf)throw new RangeError(`Years in ${o} era must be positive, not ${t}`);t=e.reverseOf?e.anchorEpoch.year-r:r+e.anchorEpoch.year-(e.hasYearZero?0:1),checkField("year",t),({eraYear:r,era:o}=eraFromYear(t))}}return{...e,year:t,eraYear:r,era:o}}adjustCalendarDate(e,t,r="constrain"){let o=e;const{month:n,monthCode:a}=o;return void 0===n&&(o={...o,month:monthCodeNumberPart(a)}),this.validateCalendarDate(o),o=this.completeEraYear(o),super.adjustCalendarDate(o,t,r)}estimateIsoDate(e){const t=this.adjustCalendarDate(e),{year:r,month:o,day:n}=t,{anchorEra:a}=this;return RegulateISODate(r+a.isoEpoch.year-(a.hasYearZero?0:1),o,n,"constrain")}checkIcuBugs(e){if(this.calendarIsVulnerableToJulianBug&&this.v8IsVulnerableToJulianBug){if(CompareISODate(e.year,e.month,e.day,1582,10,15)<0)throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15 (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)`)}}}class OrthodoxBaseHelper extends GregorianBaseHelper{constructor(e,t){super(e,t)}inLeapYear(e){const{year:t}=e;return(t+1)%4==0}monthsInYear(){return 13}minimumMonthLength(e){const{month:t}=e;return 13===t?this.inLeapYear(e)?6:5:30}maximumMonthLength(e){return this.minimumMonthLength(e)}}class EthioaaHelper extends OrthodoxBaseHelper{constructor(){super("ethioaa",[{name:"era0",isoEpoch:{year:-5492,month:7,day:17}}])}}class CopticHelper extends OrthodoxBaseHelper{constructor(){super("coptic",[{name:"era1",isoEpoch:{year:284,month:8,day:29}},{name:"era0",reverseOf:"era1"}])}}class EthiopicHelper extends OrthodoxBaseHelper{constructor(){super("ethiopic",[{name:"era0",isoEpoch:{year:-5492,month:7,day:17}},{name:"era1",isoEpoch:{year:8,month:8,day:27},anchorEpoch:{year:5501}}])}}class RocHelper extends GregorianBaseHelper{constructor(){super("roc",[{name:"minguo",isoEpoch:{year:1912,month:1,day:1}},{name:"before-roc",reverseOf:"minguo"}]),this.calendarIsVulnerableToJulianBug=!0}}class BuddhistHelper extends GregorianBaseHelper{constructor(){super("buddhist",[{name:"be",hasYearZero:!0,isoEpoch:{year:-543,month:1,day:1}}]),this.calendarIsVulnerableToJulianBug=!0}}class GregoryHelper extends GregorianBaseHelper{constructor(){super("gregory",[{name:"ce",isoEpoch:{year:1,month:1,day:1}},{name:"bce",reverseOf:"ce"}])}reviseIntlEra(e){let{era:t,eraYear:r}=e;return"bc"!==t&&"b"!==t||(t="bce"),"ad"!==t&&"a"!==t||(t="ce"),{era:t,eraYear:r}}}class JapaneseHelper extends GregorianBaseHelper{constructor(){super("japanese",[{name:"reiwa",isoEpoch:{year:2019,month:5,day:1},anchorEpoch:{year:2019,month:5,day:1}},{name:"heisei",isoEpoch:{year:1989,month:1,day:8},anchorEpoch:{year:1989,month:1,day:8}},{name:"showa",isoEpoch:{year:1926,month:12,day:25},anchorEpoch:{year:1926,month:12,day:25}},{name:"taisho",isoEpoch:{year:1912,month:7,day:30},anchorEpoch:{year:1912,month:7,day:30}},{name:"meiji",isoEpoch:{year:1868,month:9,day:8},anchorEpoch:{year:1868,month:9,day:8}},{name:"ce",isoEpoch:{year:1,month:1,day:1}},{name:"bce",reverseOf:"ce"}]),this.calendarIsVulnerableToJulianBug=!0,this.eraLength="long"}reviseIntlEra(e,t){const{era:r,eraYear:o}=e,{year:n}=t;return this.eras.find((e=>e.name===r))?{era:r,eraYear:o}:n<1?{era:"bce",eraYear:1-n}:{era:"ce",eraYear:n}}}class ChineseBaseHelper extends HelperBase{constructor(){super(...arguments),this.calendarType="lunisolar",this.hasEra=!1}inLeapYear(e,t){const r=this.getMonthList(e.year,t);return 13===ct(r).length}monthsInYear(e,t){return this.inLeapYear(e,t)?13:12}minimumMonthLength(){return 29}maximumMonthLength(){return 30}getMonthList(e,t){if(void 0===e)throw new TypeError("Missing year");const r=JSON.stringify({func:"getMonthList",calendarYear:e,id:this.id}),o=t.get(r);if(o)return o;const n=this.getFormatter(),getCalendarDate=(e,t)=>{const r=toUtcIsoDateString({isoYear:e,isoMonth:2,isoDay:1}),o=new Date(r);o.setUTCDate(t+1);const a=n.formatToParts(o),i=a.find((e=>"month"===e.type)).value,s=+a.find((e=>"day"===e.type)).value;let l=a.find((e=>"relatedYear"===e.type));if(void 0===l)throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);return l=+l.value,{calendarMonthString:i,calendarDay:s,calendarYearToVerify:l}};let a=17,{calendarMonthString:i,calendarDay:s,calendarYearToVerify:l}=getCalendarDate(e,a);"1"!==i&&(a+=29,({calendarMonthString:i,calendarDay:s}=getCalendarDate(e,a))),a-=s-5;const d={};let m,c,u=1,h=!1;do{({calendarMonthString:i,calendarDay:s,calendarYearToVerify:l}=getCalendarDate(e,a)),m&&(d[c].daysInMonth=m+30-s),l!==e?h=!0:(d[i]={monthIndex:u++},a+=30),m=s,c=i}while(!h);return d[c].daysInMonth=m+30-s,t.set(r,d),d}estimateIsoDate(e){const{year:t,month:r}=e;return{year:t,month:r>=12?12:r+1,day:1}}adjustCalendarDate(e,t,r="constrain",o=!1){let{year:n,month:a,monthExtra:i,day:s,monthCode:l,eraYear:d}=e;if(o){if(n=d,i&&"bis"!==i)throw new RangeError(`Unexpected leap month suffix: ${i}`);const e=buildMonthCode(a,void 0!==i),r=`${a}${i||""}`,o=this.getMonthList(n,t)[r];if(void 0===o)throw new RangeError(`Unmatched month ${r} in Chinese year ${n}`);return a=o.monthIndex,{year:n,month:a,day:s,era:void 0,eraYear:d,monthCode:e}}if(this.validateCalendarDate(e),void 0===n&&(n=d),void 0===d&&(d=n),void 0===a){const e=this.getMonthList(n,t);let o=l.replace("L","bis").slice(1);"0"===o[0]&&(o=o.slice(1));let i=e[o];if(a=i&&i.monthIndex,void 0===a&&l.endsWith("L")&&!at.call(["M01L","M12L","M13L"],l)&&"constrain"===r){let t=l.slice(1,-1);"0"===t[0]&&(t=t.slice(1)),i=e[t],i&&(({daysInMonth:s,monthIndex:a}=i),l=buildMonthCode(t))}if(void 0===a)throw new RangeError(`Unmatched month ${l} in Chinese year ${n}`)}else if(void 0===l){const e=this.getMonthList(n,t),o=ct(e),i=o.length;"reject"===r?(RejectToRange(a,1,i),RejectToRange(s,1,this.maximumMonthLength())):(a=ConstrainToRange(a,1,i),s=ConstrainToRange(s,1,this.maximumMonthLength()));const d=o.find((([,e])=>e.monthIndex===a));if(void 0===d)throw new RangeError(`Invalid month ${a} in Chinese year ${n}`);l=buildMonthCode(d[0].replace("bis",""),-1!==d[0].indexOf("bis"))}else{const e=this.getMonthList(n,t);let r=l.replace("L","bis").slice(1);"0"===r[0]&&(r=r.slice(1));const o=e[r];if(!o)throw new RangeError(`Unmatched monthCode ${l} in Chinese year ${n}`);if(a!==o.monthIndex)throw new RangeError(`monthCode ${l} doesn't correspond to month ${a} in Chinese year ${n}`)}return{...e,year:n,eraYear:d,month:a,monthCode:l,day:s}}}class ChineseHelper extends ChineseBaseHelper{constructor(){super(...arguments),this.id="chinese"}}class DangiHelper extends ChineseBaseHelper{constructor(){super(...arguments),this.id="dangi"}}const Tt={helper:void 0,dateFromFields(e,t,r){const o=ToTemporalOverflow(t),n=new OneObjectCache,a=PrepareTemporalFields(e,["day","era","eraYear","month","monthCode","year"],["day"]),{year:i,month:s,day:l}=this.helper.calendarToIsoDate(a,o,n),d=CreateTemporalDate(i,s,l,r);return n.setObject(d),d},yearMonthFromFields(e,t,r){const o=ToTemporalOverflow(t),n=new OneObjectCache,a=PrepareTemporalFields(e,["era","eraYear","month","monthCode","year"],[]),{year:i,month:s,day:l}=this.helper.calendarToIsoDate({...a,day:1},o,n),d=CreateTemporalYearMonth(i,s,r,l);return n.setObject(d),d},monthDayFromFields(e,t,r){const o=ToTemporalOverflow(t),n=new OneObjectCache,a=PrepareTemporalFields(e,["day","era","eraYear","month","monthCode","year"],["day"]),{year:i,month:s,day:l}=this.helper.monthDayFromFields(a,o,n),d=CreateTemporalMonthDay(s,l,r,i);return n.setObject(d),d},fields(e){let t=e;return at.call(t,"year")&&(t=[...t,"era","eraYear"]),t},mergeFields(e,t){const r={...e},o={...t},{month:n,monthCode:a,year:i,era:s,eraYear:l,...d}=r,{month:m,monthCode:c,year:u,era:h,eraYear:T}=o;return void 0===m&&void 0===c&&(d.month=n,d.monthCode=a),void 0===u&&void 0===h&&void 0===T&&(d.year=i),{...d,...o}},dateAdd(e,t,r,o,n,a,i){const s=OneObjectCache.getCacheForObject(e),l=this.helper.temporalToCalendarDate(e,s),d=this.helper.addCalendar(l,{years:t,months:r,weeks:o,days:n},a,s),m=this.helper.calendarToIsoDate(d,"constrain",s),{year:c,month:u,day:h}=m,T=CreateTemporalDate(c,u,h,i);return new OneObjectCache(s).setObject(T),T},dateUntil(e,t,r){const o=OneObjectCache.getCacheForObject(e),n=OneObjectCache.getCacheForObject(t),a=this.helper.temporalToCalendarDate(e,o),i=this.helper.temporalToCalendarDate(t,n);return this.helper.untilCalendar(a,i,r,o)},year(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).year},month(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).month},day(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).day},era(e){if(!this.helper.hasEra)return;const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).era},eraYear(e){if(!this.helper.hasEra)return;const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).eraYear},monthCode(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).monthCode},dayOfWeek:e=>ht.iso8601.dayOfWeek(e),dayOfYear(e){const t=OneObjectCache.getCacheForObject(e),r=this.helper.isoToCalendarDate(e,t),o=this.helper.startOfCalendarYear(r);return this.helper.calendarDaysUntil(o,r,t)+1},weekOfYear:e=>ht.iso8601.weekOfYear(e),daysInWeek:e=>ht.iso8601.daysInWeek(e),daysInMonth(e){const t=OneObjectCache.getCacheForObject(e),r=this.helper.temporalToCalendarDate(e,t),o=this.helper.maximumMonthLength(r);if(o===this.helper.minimumMonthLength(r))return o;const n=this.helper.startOfCalendarMonth(r),a=this.helper.addMonthsCalendar(n,1,"constrain",t);return this.helper.calendarDaysUntil(n,a,t)},daysInYear(e){let t=e;HasSlot(t,n)||(t=ToTemporalDate(t));const r=OneObjectCache.getCacheForObject(t),o=this.helper.temporalToCalendarDate(t,r),a=this.helper.startOfCalendarYear(o),i=this.helper.addCalendar(a,{years:1},"constrain",r);return this.helper.calendarDaysUntil(a,i,r)},monthsInYear(e){const t=OneObjectCache.getCacheForObject(e),r=this.helper.temporalToCalendarDate(e,t);return this.helper.monthsInYear(r,t)},inLeapYear(e){let t=e;HasSlot(t,n)||(t=ToTemporalDate(t));const r=OneObjectCache.getCacheForObject(t),o=this.helper.temporalToCalendarDate(t,r);return this.helper.inLeapYear(o,r)}};for(const e of[HebrewHelper,PersianHelper,EthiopicHelper,EthioaaHelper,CopticHelper,ChineseHelper,DangiHelper,RocHelper,IndianHelper,BuddhistHelper,GregoryHelper,JapaneseHelper,IslamicHelper,IslamicUmalquraHelper,IslamicTblaHelper,IslamicCivilHelper,IslamicRgsaHelper,IslamicCcHelper]){const t=new e;ht[t.id]={...Tt,helper:t}}class PlainDate{constructor(e,t,r,o=GetISO8601Calendar()){const n=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToIntegerThrowOnInfinity(r),s=ToTemporalCalendar(o);if(arguments.length<3)throw new RangeError("missing argument: isoYear, isoMonth and isoDay are required");CreateTemporalDateSlots(this,n,a,i,s)}get calendar(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}get era(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,h),this)}get eraYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,h),this)}get year(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,h),this)}get month(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,h),this)}get monthCode(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,h),this)}get day(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,h),this)}get dayOfWeek(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,h),this)}get dayOfYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,h),this)}get weekOfYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,h),this)}get daysInWeek(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,h),this)}get daysInMonth(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,h),this)}get daysInYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,h),this)}get monthsInYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,h),this)}get inLeapYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,h),this)}with(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetSlot(this,h),o=CalendarFields(r,["day","month","monthCode","year"]),n=PrepareTemporalFields(e,o,"partial");if(!n)throw new TypeError("invalid date-like");let a=PrepareTemporalFields(this,o,[]);a=CalendarMergeFields(r,a,n),a=PrepareTemporalFields(a,o,[]);return CalendarDateFromFields(r,a,GetOptionsObject(t))}withCalendar(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const t=ToTemporalCalendar(e);return new PlainDate(GetSlot(this,n),GetSlot(this,a),GetSlot(this,i),t)}add(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const r=ToTemporalDuration(e),o=GetOptionsObject(t);return CalendarDateAdd(GetSlot(this,h),this,r,o)}subtract(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const r=CreateNegatedTemporalDuration(ToTemporalDuration(e)),o=GetOptionsObject(t);return CalendarDateAdd(GetSlot(this,h),this,r,o)}until(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDate("until",this,e,t)}since(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDate("since",this,e,t)}equals(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);for(const e of[n,a,i]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,h),GetSlot(t,h))}toString(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return TemporalDateToString(this,ToShowCalendarOption(GetOptionsObject(e)))}toJSON(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return TemporalDateToString(this)}toLocaleString(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainDate")}toPlainDateTime(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const t=GetSlot(this,n),r=GetSlot(this,a),o=GetSlot(this,i),T=GetSlot(this,h);if(void 0===e)return CreateTemporalDateTime(t,r,o,0,0,0,0,0,0,T);const p=ToTemporalTime(e);return CreateTemporalDateTime(t,r,o,GetSlot(p,s),GetSlot(p,l),GetSlot(p,d),GetSlot(p,m),GetSlot(p,c),GetSlot(p,u),T)}toZonedDateTime(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");let t,o;if(IsObject(e)){const r=e.timeZone;void 0===r?t=ToTemporalTimeZone(e):(t=ToTemporalTimeZone(r),o=e.plainTime)}else t=ToTemporalTimeZone(e);const T=GetSlot(this,n),p=GetSlot(this,a),f=GetSlot(this,i),y=GetSlot(this,h);let S=0,w=0,g=0,I=0,D=0,G=0;void 0!==o&&(o=ToTemporalTime(o),S=GetSlot(o,s),w=GetSlot(o,l),g=GetSlot(o,d),I=GetSlot(o,m),D=GetSlot(o,c),G=GetSlot(o,u));return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(t,CreateTemporalDateTime(T,p,f,S,w,g,I,D,G,y),"compatible"),r),t,y)}toPlainYearMonth(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const e=GetSlot(this,h);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}toPlainMonthDay(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const e=GetSlot(this,h);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}getISOFields(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,h),isoDay:GetSlot(this,i),isoMonth:GetSlot(this,a),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalDate(e)?(ToTemporalOverflow(r),CreateTemporalDate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(e,h))):ToTemporalDate(e,r)}static compare(e,t){const r=ToTemporalDate(e),o=ToTemporalDate(t);return CompareISODate(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(o,n),GetSlot(o,a),GetSlot(o,i))}}MakeIntrinsicClass(PlainDate,"Temporal.PlainDate");class PlainDateTime{constructor(e,t,r,o=0,n=0,a=0,i=0,s=0,l=0,d=GetISO8601Calendar()){const m=ToIntegerThrowOnInfinity(e),c=ToIntegerThrowOnInfinity(t),u=ToIntegerThrowOnInfinity(r),h=ToIntegerThrowOnInfinity(o),T=ToIntegerThrowOnInfinity(n),p=ToIntegerThrowOnInfinity(a),f=ToIntegerThrowOnInfinity(i),y=ToIntegerThrowOnInfinity(s),S=ToIntegerThrowOnInfinity(l),w=ToTemporalCalendar(d);if(arguments.length<3)throw new RangeError("missing argument: isoYear, isoMonth and isoDay are required");CreateTemporalDateTimeSlots(this,m,c,u,h,T,p,f,y,S,w)}get calendar(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}get year(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,h),this)}get month(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,h),this)}get monthCode(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,h),this)}get day(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,h),this)}get hour(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,s)}get minute(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,l)}get second(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,d)}get millisecond(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,m)}get microsecond(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,c)}get nanosecond(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}get era(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,h),this)}get eraYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,h),this)}get dayOfWeek(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,h),this)}get dayOfYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,h),this)}get weekOfYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,h),this)}get daysInWeek(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,h),this)}get daysInYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,h),this)}get daysInMonth(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,h),this)}get monthsInYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,h),this)}get inLeapYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,h),this)}with(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetOptionsObject(t),o=GetSlot(this,h),n=CalendarFields(o,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),a=PrepareTemporalFields(e,n,"partial");if(!a)throw new TypeError("invalid date-time-like");let i=PrepareTemporalFields(this,n,[]);i=CalendarMergeFields(o,i,a),i=PrepareTemporalFields(i,n,[]);const{year:s,month:l,day:d,hour:m,minute:c,second:u,millisecond:T,microsecond:p,nanosecond:f}=InterpretTemporalDateTimeFields(o,i,r);return CreateTemporalDateTime(s,l,d,m,c,u,T,p,f,o)}withPlainTime(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,n),r=GetSlot(this,a),o=GetSlot(this,i),T=GetSlot(this,h);if(void 0===e)return CreateTemporalDateTime(t,r,o,0,0,0,0,0,0,T);const p=ToTemporalTime(e);return CreateTemporalDateTime(t,r,o,GetSlot(p,s),GetSlot(p,l),GetSlot(p,d),GetSlot(p,m),GetSlot(p,c),GetSlot(p,u),T)}withPlainDate(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e),r=GetSlot(t,n),o=GetSlot(t,a),T=GetSlot(t,i);let p=GetSlot(t,h);const f=GetSlot(this,s),y=GetSlot(this,l),S=GetSlot(this,d),w=GetSlot(this,m),g=GetSlot(this,c),I=GetSlot(this,u);return p=ConsolidateCalendars(GetSlot(this,h),p),CreateTemporalDateTime(r,o,T,f,y,S,w,g,I,p)}withCalendar(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalCalendar(e);return new PlainDateTime(GetSlot(this,n),GetSlot(this,a),GetSlot(this,i),GetSlot(this,s),GetSlot(this,l),GetSlot(this,d),GetSlot(this,m),GetSlot(this,c),GetSlot(this,u),t)}add(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainDateTime("add",this,e,t)}subtract(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainDateTime("subtract",this,e,t)}until(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDateTime("until",this,e,t)}since(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDateTime("since",this,e,t)}round(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");const t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",je,["day"]),o=ToTemporalRoundingMode(t,"halfExpand"),T=ToTemporalRoundingIncrement(t,{day:1,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[r],!1);let p=GetSlot(this,n),f=GetSlot(this,a),y=GetSlot(this,i),S=GetSlot(this,s),w=GetSlot(this,l),g=GetSlot(this,d),I=GetSlot(this,m),D=GetSlot(this,c),G=GetSlot(this,u);return({year:p,month:f,day:y,hour:S,minute:w,second:g,millisecond:I,microsecond:D,nanosecond:G}=RoundISODateTime(p,f,y,S,w,g,I,D,G,T,r,o)),CreateTemporalDateTime(p,f,y,S,w,g,I,D,G,GetSlot(this,h))}equals(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDateTime(e);for(const e of[n,a,i,s,l,d,m,c,u]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,h),GetSlot(t,h))}toString(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t);return TemporalDateTimeToString(this,r,ToShowCalendarOption(t),{unit:o,increment:n,roundingMode:ToTemporalRoundingMode(t,"trunc")})}toJSON(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToString(this,"auto")}toLocaleString(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainDateTime")}toZonedDateTime(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const o=ToTemporalTimeZone(e);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(o,this,ToTemporalDisambiguation(GetOptionsObject(t))),r),o,GetSlot(this,h))}toPlainDate(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToDate(this)}toPlainYearMonth(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,h);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}toPlainMonthDay(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,h);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}toPlainTime(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToTime(this)}getISOFields(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,h),isoDay:GetSlot(this,i),isoHour:GetSlot(this,s),isoMicrosecond:GetSlot(this,c),isoMillisecond:GetSlot(this,m),isoMinute:GetSlot(this,l),isoMonth:GetSlot(this,a),isoNanosecond:GetSlot(this,u),isoSecond:GetSlot(this,d),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalDateTime(e)?(ToTemporalOverflow(r),CreateTemporalDateTime(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,u),GetSlot(e,h))):ToTemporalDateTime(e,r)}static compare(e,t){const r=ToTemporalDateTime(e),o=ToTemporalDateTime(t);for(const e of[n,a,i,s,l,d,m,c,u]){const t=GetSlot(r,e),n=GetSlot(o,e);if(t!==n)return ComparisonResult(t-n)}return 0}}MakeIntrinsicClass(PlainDateTime,"Temporal.PlainDateTime");class Duration{constructor(e=0,t=0,r=0,o=0,n=0,a=0,i=0,s=0,l=0,d=0){const m=ToIntegerWithoutRounding(e),c=ToIntegerWithoutRounding(t),u=ToIntegerWithoutRounding(r),h=ToIntegerWithoutRounding(o),T=ToIntegerWithoutRounding(n),p=ToIntegerWithoutRounding(a),C=ToIntegerWithoutRounding(i),E=ToIntegerWithoutRounding(s),b=ToIntegerWithoutRounding(l),M=ToIntegerWithoutRounding(d);RejectDuration(m,c,u,h,T,p,C,E,b,M),CreateSlots(this),SetSlot(this,f,m),SetSlot(this,y,c),SetSlot(this,S,u),SetSlot(this,w,h),SetSlot(this,g,T),SetSlot(this,I,p),SetSlot(this,D,C),SetSlot(this,G,E),SetSlot(this,v,b),SetSlot(this,O,M)}get years(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}get months(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,y)}get weeks(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,S)}get days(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,w)}get hours(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,g)}get minutes(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,I)}get seconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,D)}get milliseconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,G)}get microseconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,v)}get nanoseconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,O)}get sign(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return DurationSign(GetSlot(this,f),GetSlot(this,y),GetSlot(this,S),GetSlot(this,w),GetSlot(this,g),GetSlot(this,I),GetSlot(this,D),GetSlot(this,G),GetSlot(this,v),GetSlot(this,O))}get blank(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return 0===DurationSign(GetSlot(this,f),GetSlot(this,y),GetSlot(this,S),GetSlot(this,w),GetSlot(this,g),GetSlot(this,I),GetSlot(this,D),GetSlot(this,G),GetSlot(this,v),GetSlot(this,O))}with(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");const t=PrepareTemporalFields(e,["days","hours","microseconds","milliseconds","minutes","months","nanoseconds","seconds","weeks","years"],"partial");if(!t)throw new TypeError("invalid duration-like");const{years:r=GetSlot(this,f),months:o=GetSlot(this,y),weeks:n=GetSlot(this,S),days:a=GetSlot(this,w),hours:i=GetSlot(this,g),minutes:s=GetSlot(this,I),seconds:l=GetSlot(this,D),milliseconds:d=GetSlot(this,G),microseconds:m=GetSlot(this,v),nanoseconds:c=GetSlot(this,O)}=t;return new Duration(r,o,n,a,i,s,l,d,m,c)}negated(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return CreateNegatedTemporalDuration(this)}abs(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return new Duration(Math.abs(GetSlot(this,f)),Math.abs(GetSlot(this,y)),Math.abs(GetSlot(this,S)),Math.abs(GetSlot(this,w)),Math.abs(GetSlot(this,g)),Math.abs(GetSlot(this,I)),Math.abs(GetSlot(this,D)),Math.abs(GetSlot(this,G)),Math.abs(GetSlot(this,v)),Math.abs(GetSlot(this,O)))}add(e,t){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromDuration("add",this,e,t)}subtract(e,t){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromDuration("subtract",this,e,t)}round(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");let t=GetSlot(this,f),r=GetSlot(this,y),o=GetSlot(this,S),n=GetSlot(this,w),a=GetSlot(this,g),i=GetSlot(this,I),s=GetSlot(this,D),l=GetSlot(this,G),d=GetSlot(this,v),m=GetSlot(this,O),c=DefaultTemporalLargestUnit(t,r,o,n,a,i,s,l,d,m);const u="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e);let T=GetTemporalUnit(u,"smallestUnit","datetime",void 0),p=!0;T||(p=!1,T="nanosecond"),c=LargerOfTwoTemporalUnits(c,T);let C=GetTemporalUnit(u,"largestUnit","datetime",void 0,["auto"]),E=!0;if(C||(E=!1,C=c),"auto"===C&&(C=c),!p&&!E)throw new RangeError("at least one of smallestUnit or largestUnit is required");if(LargerOfTwoTemporalUnits(C,T)!==C)throw new RangeError(`largestUnit ${C} cannot be smaller than smallestUnit ${T}`);const b=ToTemporalRoundingMode(u,"halfExpand"),M=ToTemporalDateTimeRoundingIncrement(u,T);let R=ToRelativeTemporalObject(u);return({years:t,months:r,weeks:o,days:n}=UnbalanceDurationRelative(t,r,o,n,C,R)),({years:t,months:r,weeks:o,days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=RoundDuration(t,r,o,n,a,i,s,l,d,m,M,T,b,R)),({years:t,months:r,weeks:o,days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=AdjustRoundedDurationDays(t,r,o,n,a,i,s,l,d,m,M,T,b,R)),({years:t,months:r,weeks:o,days:n}=function BalanceDurationRelative(e,t,r,o,n,a){let i=e,s=t,l=r,d=o;const m=GetIntrinsic("%Temporal.Duration%"),c=DurationSign(i,s,l,d,0,0,0,0,0,0);if(0===c)return{years:i,months:s,weeks:l,days:d};let u,T;a&&(T=ToTemporalDate(a),u=GetSlot(T,h));const p=new m(c),f=new m(0,c),S=new m(0,0,c);switch(n){case"year":{if(!u)throw new RangeError("a starting point is required for years balancing");let e,t,r;for(({relativeTo:e,days:t}=MoveRelativeDate(u,T,p));K(d)>=K(t);)d-=t,i+=c,T=e,({relativeTo:e,days:t}=MoveRelativeDate(u,T,p));for(({relativeTo:e,days:r}=MoveRelativeDate(u,T,f));K(d)>=K(r);)d-=r,s+=c,T=e,({relativeTo:e,days:r}=MoveRelativeDate(u,T,f));const o=u.dateAdd;e=CalendarDateAdd(u,T,p,void 0,o);const n=u.dateUntil,a=le(null);a.largestUnit="month";let l=CalendarDateUntil(u,T,e,a,n),m=GetSlot(l,y);for(;K(s)>=K(m);){s-=m,i+=c,T=e,e=CalendarDateAdd(u,T,p,void 0,o);const t=le(null);t.largestUnit="month",l=CalendarDateUntil(u,T,e,t,n),m=GetSlot(l,y)}break}case"month":{if(!u)throw new RangeError("a starting point is required for months balancing");let e,t;for(({relativeTo:e,days:t}=MoveRelativeDate(u,T,f));K(d)>=K(t);)d-=t,s+=c,T=e,({relativeTo:e,days:t}=MoveRelativeDate(u,T,f));break}case"week":{if(!u)throw new RangeError("a starting point is required for weeks balancing");let e,t;for(({relativeTo:e,days:t}=MoveRelativeDate(u,T,S));K(d)>=K(t);)d-=t,l+=c,T=e,({relativeTo:e,days:t}=MoveRelativeDate(u,T,S));break}}return{years:i,months:s,weeks:l,days:d}}(t,r,o,n,C,R)),IsTemporalZonedDateTime(R)&&(R=MoveRelativeZonedDateTime(R,t,r,o,0)),({days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=BalanceDuration(n,a,i,s,l,d,m,C,R)),new Duration(t,r,o,n,a,i,s,l,d,m)}total(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");let t=GetSlot(this,f),r=GetSlot(this,y),o=GetSlot(this,S),n=GetSlot(this,w),a=GetSlot(this,g),i=GetSlot(this,I),s=GetSlot(this,D),l=GetSlot(this,G),d=GetSlot(this,v),m=GetSlot(this,O);if(void 0===e)throw new TypeError("options argument is required");const c="string"==typeof e?CreateOnePropObject("unit",e):GetOptionsObject(e),u=GetTemporalUnit(c,"unit","datetime",je),h=ToRelativeTemporalObject(c);let T;({years:t,months:r,weeks:o,days:n}=UnbalanceDurationRelative(t,r,o,n,u,h)),IsTemporalZonedDateTime(h)&&(T=MoveRelativeZonedDateTime(h,t,r,o,0)),({days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=BalanceDuration(n,a,i,s,l,d,m,u,T));const{total:p}=RoundDuration(t,r,o,n,a,i,s,l,d,m,1,u,"trunc",h);return p}toString(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t);if("minute"===r)throw new RangeError('smallestUnit must not be "minute"');return TemporalDurationToString(this,r,{unit:o,increment:n,roundingMode:ToTemporalRoundingMode(t,"trunc")})}toJSON(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return TemporalDurationToString(this)}toLocaleString(e,t){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return"undefined"!=typeof Intl&&void 0!==Intl.DurationFormat?new Intl.DurationFormat(e,t).format(this):(console.warn("Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat."),TemporalDurationToString(this))}valueOf(){throw new TypeError("use compare() to compare Temporal.Duration")}static from(e){return IsTemporalDuration(e)?new Duration(GetSlot(e,f),GetSlot(e,y),GetSlot(e,S),GetSlot(e,w),GetSlot(e,g),GetSlot(e,I),GetSlot(e,D),GetSlot(e,G),GetSlot(e,v),GetSlot(e,O)):ToTemporalDuration(e)}static compare(t,r,o){const n=ToTemporalDuration(t),a=ToTemporalDuration(r),i=ToRelativeTemporalObject(GetOptionsObject(o)),s=GetSlot(n,f),l=GetSlot(n,y),d=GetSlot(n,S);let m=GetSlot(n,w);const c=GetSlot(n,g),u=GetSlot(n,I),h=GetSlot(n,D),T=GetSlot(n,G),p=GetSlot(n,v);let C=GetSlot(n,O);const E=GetSlot(a,f),b=GetSlot(a,y),M=GetSlot(a,S);let R=GetSlot(a,w);const Z=GetSlot(a,g),P=GetSlot(a,I),F=GetSlot(a,D),Y=GetSlot(a,G),j=GetSlot(a,v);let $=GetSlot(a,O);const B=CalculateOffsetShift(i,s,l,d,m),N=CalculateOffsetShift(i,E,b,M,R);0===s&&0===E&&0===l&&0===b&&0===d&&0===M||(({days:m}=UnbalanceDurationRelative(s,l,d,m,"day",i)),({days:R}=UnbalanceDurationRelative(E,b,M,R,"day",i)));const k=TotalDurationNanoseconds(m,c,u,h,T,p,C,B),A=TotalDurationNanoseconds(R,Z,P,F,Y,j,$,N);return ComparisonResult(e.default.toNumber(e.default.subtract(k,A)))}}MakeIntrinsicClass(Duration,"Temporal.Duration");const pt=Object.create;class PlainMonthDay{constructor(e,t,r=GetISO8601Calendar(),o=1972){const n=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToTemporalCalendar(r),s=ToIntegerThrowOnInfinity(o);if(arguments.length<2)throw new RangeError("missing argument: isoMonth and isoDay are required");CreateTemporalMonthDaySlots(this,n,a,i,s)}get monthCode(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,h),this)}get day(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,h),this)}get calendar(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}with(e,t){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetSlot(this,h),o=CalendarFields(r,["day","month","monthCode","year"]),n=PrepareTemporalFields(e,o,"partial");if(!n)throw new TypeError("invalid month-day-like");let a=PrepareTemporalFields(this,o,[]);a=CalendarMergeFields(r,a,n),a=PrepareTemporalFields(a,o,[]);return CalendarMonthDayFromFields(r,a,GetOptionsObject(t))}equals(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");const t=ToTemporalMonthDay(e);for(const e of[a,i,n]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,h),GetSlot(t,h))}toString(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return TemporalMonthDayToString(this,ToShowCalendarOption(GetOptionsObject(e)))}toJSON(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return TemporalMonthDayToString(this)}toLocaleString(e,t){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use equals() to compare Temporal.PlainMonthDay")}toPlainDate(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("argument should be an object");const t=GetSlot(this,h),r=CalendarFields(t,["day","monthCode"]),o=PrepareTemporalFields(this,r,[]),n=CalendarFields(t,["year"]);let a=CalendarMergeFields(t,o,PrepareTemporalFields(e,n,[]));a=PrepareTemporalFields(a,[...new Set([...r,...n])],[]);const i=pt(null);return i.overflow="reject",CalendarDateFromFields(t,a,i)}getISOFields(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,h),isoDay:GetSlot(this,i),isoMonth:GetSlot(this,a),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalMonthDay(e)?(ToTemporalOverflow(r),CreateTemporalMonthDay(GetSlot(e,a),GetSlot(e,i),GetSlot(e,h),GetSlot(e,n))):ToTemporalMonthDay(e,r)}}MakeIntrinsicClass(PlainMonthDay,"Temporal.PlainMonthDay");const instant=()=>new(GetIntrinsic("%Temporal.Instant%"))($e()),plainDateTime=(e,t=timeZone())=>{const r=ToTemporalTimeZone(t),o=ToTemporalCalendar(e);return BuiltinTimeZoneGetPlainDateTimeFor(r,instant(),o)},plainDateTimeISO=(e=timeZone())=>{const t=ToTemporalTimeZone(e),r=GetISO8601Calendar();return BuiltinTimeZoneGetPlainDateTimeFor(t,instant(),r)},zonedDateTime=(e,t=timeZone())=>{const r=ToTemporalTimeZone(t),o=ToTemporalCalendar(e);return CreateTemporalZonedDateTime($e(),r,o)},timeZone=()=>function SystemTimeZone(){const e=new J("en-us");return new(GetIntrinsic("%Temporal.TimeZone%"))(ParseTemporalTimeZone(e.resolvedOptions().timeZone))}(),ft={instant,plainDateTime,plainDateTimeISO,plainDate:(e,t=timeZone())=>TemporalDateTimeToDate(plainDateTime(e,t)),plainDateISO:(e=timeZone())=>TemporalDateTimeToDate(plainDateTimeISO(e)),plainTimeISO:(e=timeZone())=>TemporalDateTimeToTime(plainDateTimeISO(e)),timeZone,zonedDateTime,zonedDateTimeISO:(e=timeZone())=>zonedDateTime(GetISO8601Calendar(),e),[Symbol.toStringTag]:"Temporal.Now"};Object.defineProperty(ft,Symbol.toStringTag,{value:"Temporal.Now",writable:!1,enumerable:!1,configurable:!0});const yt=Object.assign;function TemporalTimeToString(e,t,r){let o=GetSlot(e,s),n=GetSlot(e,l),a=GetSlot(e,d),i=GetSlot(e,m),h=GetSlot(e,c),T=GetSlot(e,u);if(r){const{unit:e,increment:t,roundingMode:s}=r;({hour:o,minute:n,second:a,millisecond:i,microsecond:h,nanosecond:T}=RoundTime(o,n,a,i,h,T,t,e,s))}return`${ISODateTimePartString(o)}:${ISODateTimePartString(n)}${FormatSecondsStringPart(a,i,h,T,t)}`}class PlainTime{constructor(e=0,t=0,r=0,o=0,n=0,a=0){const i=ToIntegerThrowOnInfinity(e),T=ToIntegerThrowOnInfinity(t),p=ToIntegerThrowOnInfinity(r),f=ToIntegerThrowOnInfinity(o),y=ToIntegerThrowOnInfinity(n),S=ToIntegerThrowOnInfinity(a);RejectTime(i,T,p,f,y,S),CreateSlots(this),SetSlot(this,s,i),SetSlot(this,l,T),SetSlot(this,d,p),SetSlot(this,m,f),SetSlot(this,c,y),SetSlot(this,u,S),SetSlot(this,h,GetISO8601Calendar())}get calendar(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}get hour(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,s)}get minute(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,l)}get second(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,d)}get millisecond(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,m)}get microsecond(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,c)}get nanosecond(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}with(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=ToTemporalTimeRecord(e,"partial"),o=ToTemporalOverflow(GetOptionsObject(t)),n=ToTemporalTimeRecord(this);let{hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=yt(n,r);return({hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=RegulateTime(a,i,s,l,d,m,o)),new PlainTime(a,i,s,l,d,m)}add(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainTime("add",this,e)}subtract(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainTime("subtract",this,e)}until(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainTime("until",this,e,t)}since(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainTime("since",this,e,t)}round(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");const t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",je),o=ToTemporalRoundingMode(t,"halfExpand"),n=ToTemporalRoundingIncrement(t,{hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[r],!1);let a=GetSlot(this,s),i=GetSlot(this,l),h=GetSlot(this,d),T=GetSlot(this,m),p=GetSlot(this,c),f=GetSlot(this,u);return({hour:a,minute:i,second:h,millisecond:T,microsecond:p,nanosecond:f}=RoundTime(a,i,h,T,p,f,n,r,o)),new PlainTime(a,i,h,T,p,f)}equals(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");const t=ToTemporalTime(e);for(const e of[s,l,d,m,c,u]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return!0}toString(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t);return TemporalTimeToString(this,r,{unit:o,increment:n,roundingMode:ToTemporalRoundingMode(t,"trunc")})}toJSON(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return TemporalTimeToString(this,"auto")}toLocaleString(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainTime")}toPlainDateTime(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e),r=GetSlot(t,n),o=GetSlot(t,a),T=GetSlot(t,i),p=GetSlot(t,h);return CreateTemporalDateTime(r,o,T,GetSlot(this,s),GetSlot(this,l),GetSlot(this,d),GetSlot(this,m),GetSlot(this,c),GetSlot(this,u),p)}toZonedDateTime(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");const t=e.plainDate;if(void 0===t)throw new TypeError("missing date property");const o=ToTemporalDate(t),T=e.timeZone;if(void 0===T)throw new TypeError("missing timeZone property");const p=ToTemporalTimeZone(T),f=GetSlot(o,n),y=GetSlot(o,a),S=GetSlot(o,i),w=GetSlot(o,h),g=GetSlot(this,s),I=GetSlot(this,l),D=GetSlot(this,d),G=GetSlot(this,m),v=GetSlot(this,c),O=GetSlot(this,u);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(p,new(GetIntrinsic("%Temporal.PlainDateTime%"))(f,y,S,g,I,D,G,v,O,w),"compatible"),r),p,w)}getISOFields(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,h),isoHour:GetSlot(this,s),isoMicrosecond:GetSlot(this,c),isoMillisecond:GetSlot(this,m),isoMinute:GetSlot(this,l),isoNanosecond:GetSlot(this,u),isoSecond:GetSlot(this,d)}}static from(e,t){const r=ToTemporalOverflow(GetOptionsObject(t));return IsTemporalTime(e)?new PlainTime(GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,u)):ToTemporalTime(e,r)}static compare(e,t){const r=ToTemporalTime(e),o=ToTemporalTime(t);for(const e of[s,l,d,m,c,u]){const t=GetSlot(r,e),n=GetSlot(o,e);if(t!==n)return ComparisonResult(t-n)}return 0}}MakeIntrinsicClass(PlainTime,"Temporal.PlainTime");class TimeZone{constructor(e){if(arguments.length<1)throw new RangeError("missing argument: identifier is required");const t=GetCanonicalTimeZoneIdentifier(e);CreateSlots(this),SetSlot(this,o,t)}get id(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(this)}getOffsetNanosecondsFor(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const t=ToTemporalInstant(e),n=GetSlot(this,o);return TestTimeZoneOffsetString(n)?ParseTimeZoneOffsetString(n):GetIANATimeZoneOffsetNanoseconds(GetSlot(t,r),n)}getOffsetStringFor(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetOffsetStringFor(this,ToTemporalInstant(e))}getPlainDateTimeFor(e,t=GetISO8601Calendar()){return BuiltinTimeZoneGetPlainDateTimeFor(this,ToTemporalInstant(e),ToTemporalCalendar(t))}getInstantFor(e,t){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetInstantFor(this,ToTemporalDateTime(e),ToTemporalDisambiguation(GetOptionsObject(t)))}getPossibleInstantsFor(t){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const r=ToTemporalDateTime(t),h=GetIntrinsic("%Temporal.Instant%"),T=GetSlot(this,o);if(TestTimeZoneOffsetString(T)){const t=GetEpochFromISOParts(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(r,s),GetSlot(r,l),GetSlot(r,d),GetSlot(r,m),GetSlot(r,c),GetSlot(r,u));if(null===t)throw new RangeError("DateTime outside of supported range");const o=ParseTimeZoneOffsetString(T);return[new h(e.default.subtract(t,e.default.BigInt(o)))]}return function GetIANATimeZoneEpochValue(t,r,o,n,a,i,s,l,d,m){const c=GetEpochFromISOParts(r,o,n,a,i,s,l,d,m);if(null===c)throw new RangeError("DateTime outside of supported range");let u=e.default.subtract(c,we);e.default.lessThan(u,ge)&&(u=c);let h=e.default.add(c,we);e.default.greaterThan(h,Ie)&&(h=c);const T=GetIANATimeZoneOffsetNanoseconds(u,t),p=GetIANATimeZoneOffsetNanoseconds(h,t);return(T===p?[T]:[T,p]).map((u=>{const h=e.default.subtract(c,e.default.BigInt(u)),T=GetIANATimeZoneDateTimeParts(h,t);if(r===T.year&&o===T.month&&n===T.day&&a===T.hour&&i===T.minute&&s===T.second&&l===T.millisecond&&d===T.microsecond&&m===T.nanosecond)return h})).filter((e=>void 0!==e))}(T,GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(r,s),GetSlot(r,l),GetSlot(r,d),GetSlot(r,m),GetSlot(r,c),GetSlot(r,u)).map((e=>new h(e)))}getNextTransition(t){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const n=ToTemporalInstant(t),a=GetSlot(this,o);if(TestTimeZoneOffsetString(a)||"UTC"===a)return null;let i=GetSlot(n,r);const s=GetIntrinsic("%Temporal.Instant%");return i=function GetIANATimeZoneNextTransition(t,r){const o=e.default.add(t,ve),n=maxJSBI(afterLatestPossibleTzdbRuleChange(),o);let a=maxJSBI(De,t);const i=GetIANATimeZoneOffsetNanoseconds(a,r);let s=a,l=i;for(;i===l&&e.default.lessThan(e.default.BigInt(a),n);)s=e.default.add(a,Oe),l=GetIANATimeZoneOffsetNanoseconds(s,r),i===l&&(a=s);return i===l?null:bisect((e=>GetIANATimeZoneOffsetNanoseconds(e,r)),a,s,i,l)}(i,a),null===i?null:new s(i)}getPreviousTransition(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const t=ToTemporalInstant(e),n=GetSlot(this,o);if(TestTimeZoneOffsetString(n)||"UTC"===n)return null;let a=GetSlot(t,r);const i=GetIntrinsic("%Temporal.Instant%");return a=GetIANATimeZonePreviousTransition(a,n),null===a?null:new i(a)}toString(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(GetSlot(this,o))}toJSON(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(this)}static from(e){return ToTemporalTimeZone(e)}}MakeIntrinsicClass(TimeZone,"Temporal.TimeZone");const St=Object.create;class PlainYearMonth{constructor(e,t,r=GetISO8601Calendar(),o=1){const n=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToTemporalCalendar(r),s=ToIntegerThrowOnInfinity(o);if(arguments.length<2)throw new RangeError("missing argument: isoYear and isoMonth are required");CreateTemporalYearMonthSlots(this,n,a,i,s)}get year(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,h),this)}get month(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,h),this)}get monthCode(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,h),this)}get calendar(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}get era(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,h),this)}get eraYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,h),this)}get daysInMonth(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,h),this)}get daysInYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,h),this)}get monthsInYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,h),this)}get inLeapYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,h),this)}with(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetSlot(this,h),o=CalendarFields(r,["month","monthCode","year"]),n=PrepareTemporalFields(e,o,"partial");if(!n)throw new TypeError("invalid year-month-like");let a=PrepareTemporalFields(this,o,[]);a=CalendarMergeFields(r,a,n),a=PrepareTemporalFields(a,o,[]);return CalendarYearMonthFromFields(r,a,GetOptionsObject(t))}add(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainYearMonth("add",this,e,t)}subtract(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainYearMonth("subtract",this,e,t)}until(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainYearMonth("until",this,e,t)}since(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainYearMonth("since",this,e,t)}equals(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");const t=ToTemporalYearMonth(e);for(const e of[n,a,i]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,h),GetSlot(t,h))}toString(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return TemporalYearMonthToString(this,ToShowCalendarOption(GetOptionsObject(e)))}toJSON(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return TemporalYearMonthToString(this)}toLocaleString(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainYearMonth")}toPlainDate(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("argument should be an object");const t=GetSlot(this,h),r=CalendarFields(t,["monthCode","year"]),o=PrepareTemporalFields(this,r,[]),n=CalendarFields(t,["day"]);let a=CalendarMergeFields(t,o,PrepareTemporalFields(e,n,[]));a=PrepareTemporalFields(a,[...new Set([...r,...n])],[]);const i=St(null);return i.overflow="reject",CalendarDateFromFields(t,a,i)}getISOFields(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,h),isoDay:GetSlot(this,i),isoMonth:GetSlot(this,a),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalYearMonth(e)?(ToTemporalOverflow(r),CreateTemporalYearMonth(GetSlot(e,n),GetSlot(e,a),GetSlot(e,h),GetSlot(e,i))):ToTemporalYearMonth(e,r)}static compare(e,t){const r=ToTemporalYearMonth(e),o=ToTemporalYearMonth(t);return CompareISODate(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(o,n),GetSlot(o,a),GetSlot(o,i))}}MakeIntrinsicClass(PlainYearMonth,"Temporal.PlainYearMonth");class ZonedDateTime{constructor(e,t,r=GetISO8601Calendar()){if(arguments.length<1)throw new TypeError("missing argument: epochNanoseconds is required");CreateTemporalZonedDateTimeSlots(this,ToBigInt(e),ToTemporalTimeZone(t),ToTemporalCalendar(r))}get calendar(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}get timeZone(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,p)}get year(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,h),dateTime(this))}get month(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,h),dateTime(this))}get monthCode(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,h),dateTime(this))}get day(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,h),dateTime(this))}get hour(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),s)}get minute(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),l)}get second(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),d)}get millisecond(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),m)}get microsecond(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),c)}get nanosecond(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),u)}get era(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,h),dateTime(this))}get eraYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,h),dateTime(this))}get epochSeconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return e.default.toNumber(e.default.divide(t,ye))}get epochMilliseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return e.default.toNumber(e.default.divide(t,fe))}get epochMicroseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return ToBigIntExternal(e.default.divide(t,pe))}get epochNanoseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return ToBigIntExternal(GetSlot(this,r))}get dayOfWeek(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,h),dateTime(this))}get dayOfYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,h),dateTime(this))}get weekOfYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,h),dateTime(this))}get hoursInDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=dateTime(this),o=GetIntrinsic("%Temporal.PlainDateTime%"),s=GetSlot(t,n),l=GetSlot(t,a),d=GetSlot(t,i),m=new o(s,l,d,0,0,0,0,0,0),c=AddISODate(s,l,d,0,0,0,1,"reject"),u=new o(c.year,c.month,c.day,0,0,0,0,0,0),h=GetSlot(this,p),T=GetSlot(BuiltinTimeZoneGetInstantFor(h,m,"compatible"),r),f=GetSlot(BuiltinTimeZoneGetInstantFor(h,u,"compatible"),r);return e.default.toNumber(e.default.subtract(f,T))/36e11}get daysInWeek(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,h),dateTime(this))}get daysInMonth(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,h),dateTime(this))}get daysInYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,h),dateTime(this))}get monthsInYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,h),dateTime(this))}get inLeapYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,h),dateTime(this))}get offset(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetOffsetStringFor(GetSlot(this,p),GetSlot(this,T))}get offsetNanoseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetOffsetNanosecondsFor(GetSlot(this,p),GetSlot(this,T))}with(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid zoned-date-time-like");RejectObjectWithCalendarOrTimeZone(e);const r=GetOptionsObject(t),o=ToTemporalDisambiguation(r),n=ToTemporalOffset(r,"prefer"),a=GetSlot(this,p),i=GetSlot(this,h),s=ArrayPush(CalendarFields(i,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),"offset"),l=PrepareTemporalFields(e,s,"partial"),d=ArrayPush(s,"timeZone");let m=PrepareTemporalFields(this,d,["timeZone","offset"]);m=CalendarMergeFields(i,m,l),m=PrepareTemporalFields(m,d,["timeZone","offset"]);let{year:c,month:u,day:T,hour:f,minute:y,second:S,millisecond:w,microsecond:g,nanosecond:I}=InterpretTemporalDateTimeFields(i,m,r);return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(c,u,T,f,y,S,w,g,I,"option",ParseTimeZoneOffsetString(m.offset),a,o,n,!1),GetSlot(this,p),i)}withPlainDate(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e),o=GetSlot(t,n),T=GetSlot(t,a),f=GetSlot(t,i);let y=GetSlot(t,h);const S=dateTime(this),w=GetSlot(S,s),g=GetSlot(S,l),I=GetSlot(S,d),D=GetSlot(S,m),G=GetSlot(S,c),v=GetSlot(S,u);y=ConsolidateCalendars(GetSlot(this,h),y);const O=GetSlot(this,p);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(O,new(GetIntrinsic("%Temporal.PlainDateTime%"))(o,T,f,w,g,I,D,G,v,y),"compatible"),r),O,y)}withPlainTime(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetIntrinsic("%Temporal.PlainTime%"),o=void 0===e?new t:ToTemporalTime(e),T=dateTime(this),f=GetSlot(T,n),y=GetSlot(T,a),S=GetSlot(T,i),w=GetSlot(this,h),g=GetSlot(o,s),I=GetSlot(o,l),D=GetSlot(o,d),G=GetSlot(o,m),v=GetSlot(o,c),O=GetSlot(o,u),C=GetSlot(this,p);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(C,new(GetIntrinsic("%Temporal.PlainDateTime%"))(f,y,S,g,I,D,G,v,O,w),"compatible"),r),C,w)}withTimeZone(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalTimeZone(e);return CreateTemporalZonedDateTime(GetSlot(this,r),t,GetSlot(this,h))}withCalendar(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalCalendar(e);return CreateTemporalZonedDateTime(GetSlot(this,r),GetSlot(this,p),t)}add(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromZonedDateTime("add",this,e,t)}subtract(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromZonedDateTime("subtract",this,e,t)}until(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalZonedDateTime("until",this,e,t)}since(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalZonedDateTime("since",this,e,t)}round(t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");if(void 0===t)throw new TypeError("options parameter is required");const o="string"==typeof t?CreateOnePropObject("smallestUnit",t):GetOptionsObject(t),f=GetTemporalUnit(o,"smallestUnit","time",je,["day"]),y=ToTemporalRoundingMode(o,"halfExpand"),S=ToTemporalRoundingIncrement(o,{day:1,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[f],!1),w=dateTime(this);let g=GetSlot(w,n),I=GetSlot(w,a),D=GetSlot(w,i),G=GetSlot(w,s),v=GetSlot(w,l),O=GetSlot(w,d),C=GetSlot(w,m),E=GetSlot(w,c),b=GetSlot(w,u);const M=GetIntrinsic("%Temporal.PlainDateTime%"),R=GetSlot(this,p),Z=GetSlot(this,h),P=BuiltinTimeZoneGetInstantFor(R,new M(GetSlot(w,n),GetSlot(w,a),GetSlot(w,i),0,0,0,0,0,0),"compatible"),F=AddZonedDateTime(P,R,Z,0,0,0,1,0,0,0,0,0,0),Y=e.default.subtract(F,e.default.BigInt(GetSlot(P,r)));if(e.default.equal(Y,ue))throw new RangeError("cannot round a ZonedDateTime in a calendar with zero-length days");({year:g,month:I,day:D,hour:G,minute:v,second:O,millisecond:C,microsecond:E,nanosecond:b}=RoundISODateTime(g,I,D,G,v,O,C,E,b,S,f,y,e.default.toNumber(Y)));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(g,I,D,G,v,O,C,E,b,"option",GetOffsetNanosecondsFor(R,GetSlot(this,T)),R,"compatible","prefer",!1),R,GetSlot(this,h))}equals(t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const o=ToTemporalZonedDateTime(t),n=GetSlot(this,r),a=GetSlot(o,r);return!!e.default.equal(e.default.BigInt(n),e.default.BigInt(a))&&(!!TimeZoneEquals(GetSlot(this,p),GetSlot(o,p))&&CalendarEquals(GetSlot(this,h),GetSlot(o,h)))}toString(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t),a=ToTemporalRoundingMode(t,"trunc");return TemporalZonedDateTimeToString(this,r,ToShowCalendarOption(t),function ToShowTimeZoneNameOption(e){return GetOption(e,"timeZoneName",["auto","never"],"auto")}(t),function ToShowOffsetOption(e){return GetOption(e,"offset",["auto","never"],"auto")}(t),{unit:o,increment:n,roundingMode:a})}toLocaleString(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}toJSON(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalZonedDateTimeToString(this,"auto")}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.ZonedDateTime")}startOfDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=dateTime(this),t=GetIntrinsic("%Temporal.PlainDateTime%"),o=GetSlot(this,h),s=new t(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),0,0,0,0,0,0,o),l=GetSlot(this,p);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(l,s,"compatible"),r),l,o)}toInstant(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(this,r))}toPlainDate(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToDate(dateTime(this))}toPlainTime(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToTime(dateTime(this))}toPlainDateTime(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return dateTime(this)}toPlainYearMonth(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,h);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}toPlainMonthDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,h);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}getISOFields(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=dateTime(this),t=GetSlot(this,p);return{calendar:GetSlot(this,h),isoDay:GetSlot(e,i),isoHour:GetSlot(e,s),isoMicrosecond:GetSlot(e,c),isoMillisecond:GetSlot(e,m),isoMinute:GetSlot(e,l),isoMonth:GetSlot(e,a),isoNanosecond:GetSlot(e,u),isoSecond:GetSlot(e,d),isoYear:GetSlot(e,n),offset:BuiltinTimeZoneGetOffsetStringFor(t,GetSlot(this,T)),timeZone:t}}static from(e,t){const o=GetOptionsObject(t);return IsTemporalZonedDateTime(e)?(ToTemporalOverflow(o),ToTemporalDisambiguation(o),ToTemporalOffset(o,"reject"),CreateTemporalZonedDateTime(GetSlot(e,r),GetSlot(e,p),GetSlot(e,h))):ToTemporalZonedDateTime(e,o)}static compare(t,o){const n=ToTemporalZonedDateTime(t),a=ToTemporalZonedDateTime(o),i=GetSlot(n,r),s=GetSlot(a,r);return e.default.lessThan(e.default.BigInt(i),e.default.BigInt(s))?-1:e.default.greaterThan(e.default.BigInt(i),e.default.BigInt(s))?1:0}}function dateTime(e){return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(e,p),GetSlot(e,T),GetSlot(e,h))}MakeIntrinsicClass(ZonedDateTime,"Temporal.ZonedDateTime");var wt=Object.freeze({__proto__:null,Instant,Calendar,PlainDate,PlainDateTime,Duration,PlainMonthDay,Now:ft,PlainTime,TimeZone,PlainYearMonth,ZonedDateTime});const gt=[Instant,Calendar,PlainDate,PlainDateTime,Duration,PlainMonthDay,PlainTime,TimeZone,PlainYearMonth,ZonedDateTime];for(const e of gt){const t=Object.getOwnPropertyDescriptor(e,"prototype");(t.configurable||t.enumerable||t.writable)&&(t.configurable=!1,t.enumerable=!1,t.writable=!1,Object.defineProperty(e,"prototype",t))}exports.Intl=nt,exports.Temporal=wt,exports.toTemporalInstant=function toTemporalInstant(){const t=e.default.multiply(e.default.BigInt(+this),fe);return new Instant(ToBigInt(t))}; ++'use strict'; ++ ++Object.defineProperty(exports, '__esModule', { value: true }); ++ ++var JSBI = require('jsbi'); ++ ++function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } ++ ++var JSBI__default = /*#__PURE__*/_interopDefaultLegacy(JSBI); ++ ++const INTRINSICS = {}; ++const customUtilInspectFormatters = { ++ ['Temporal.Duration'](depth, options) { ++ const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special'); ++ if (depth < 1) ++ return descr; ++ const entries = []; ++ for (const prop of [ ++ 'years', ++ 'months', ++ 'weeks', ++ 'days', ++ 'hours', ++ 'minutes', ++ 'seconds', ++ 'milliseconds', ++ 'microseconds', ++ 'nanoseconds' ++ ]) { ++ if (this[prop] !== 0) ++ entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`); ++ } ++ return descr + ' {\n' + entries.join(',\n') + '\n}'; ++ } ++}; ++function defaultUtilInspectFormatter(depth, options) { ++ return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special'); ++} ++function MakeIntrinsicClass(Class, name) { ++ Object.defineProperty(Class.prototype, Symbol.toStringTag, { ++ value: name, ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ { ++ Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), { ++ value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter, ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ } ++ for (const prop of Object.getOwnPropertyNames(Class)) { ++ // we know that `prop` is present, so the descriptor is never undefined ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const desc = Object.getOwnPropertyDescriptor(Class, prop); ++ if (!desc.configurable || !desc.enumerable) ++ continue; ++ desc.enumerable = false; ++ Object.defineProperty(Class, prop, desc); ++ } ++ for (const prop of Object.getOwnPropertyNames(Class.prototype)) { ++ // we know that `prop` is present, so the descriptor is never undefined ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop); ++ if (!desc.configurable || !desc.enumerable) ++ continue; ++ desc.enumerable = false; ++ Object.defineProperty(Class.prototype, prop, desc); ++ } ++ DefineIntrinsic(name, Class); ++ DefineIntrinsic(`${name}.prototype`, Class.prototype); ++} ++function DefineIntrinsic(name, value) { ++ const key = `%${name}%`; ++ if (INTRINSICS[key] !== undefined) ++ throw new Error(`intrinsic ${name} already exists`); ++ INTRINSICS[key] = value; ++} ++function GetIntrinsic(intrinsic) { ++ return INTRINSICS[intrinsic]; ++} ++ ++// Instant ++const EPOCHNANOSECONDS = 'slot-epochNanoSeconds'; ++// TimeZone ++const TIMEZONE_ID = 'slot-timezone-identifier'; ++// DateTime, Date, Time, YearMonth, MonthDay ++const ISO_YEAR = 'slot-year'; ++const ISO_MONTH = 'slot-month'; ++const ISO_DAY = 'slot-day'; ++const ISO_HOUR = 'slot-hour'; ++const ISO_MINUTE = 'slot-minute'; ++const ISO_SECOND = 'slot-second'; ++const ISO_MILLISECOND = 'slot-millisecond'; ++const ISO_MICROSECOND = 'slot-microsecond'; ++const ISO_NANOSECOND = 'slot-nanosecond'; ++const CALENDAR = 'slot-calendar'; ++// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed: ++const DATE_BRAND = 'slot-date-brand'; ++const YEAR_MONTH_BRAND = 'slot-year-month-brand'; ++const MONTH_DAY_BRAND = 'slot-month-day-brand'; ++// ZonedDateTime ++const INSTANT = 'slot-cached-instant'; ++const TIME_ZONE = 'slot-time-zone'; ++// Duration ++const YEARS = 'slot-years'; ++const MONTHS = 'slot-months'; ++const WEEKS = 'slot-weeks'; ++const DAYS = 'slot-days'; ++const HOURS = 'slot-hours'; ++const MINUTES = 'slot-minutes'; ++const SECONDS = 'slot-seconds'; ++const MILLISECONDS = 'slot-milliseconds'; ++const MICROSECONDS = 'slot-microseconds'; ++const NANOSECONDS = 'slot-nanoseconds'; ++// Calendar ++const CALENDAR_ID = 'slot-calendar-identifier'; ++const slots = new WeakMap(); ++function CreateSlots(container) { ++ slots.set(container, Object.create(null)); ++} ++function GetSlots(container) { ++ return slots.get(container); ++} ++function HasSlot(container, ...ids) { ++ if (!container || 'object' !== typeof container) ++ return false; ++ const myslots = GetSlots(container); ++ return !!myslots && ids.reduce((all, id) => all && id in myslots, true); ++} ++function GetSlot(container, id) { ++ const value = GetSlots(container)[id]; ++ if (value === undefined) ++ throw new TypeError(`Missing internal slot ${id}`); ++ return value; ++} ++function SetSlot(container, id, value) { ++ GetSlots(container)[id] = value; ++} ++ ++const tzComponent = /\.[-A-Za-z_]|\.\.[-A-Za-z._]{1,12}|\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/; ++const offsetNoCapture = /(?:[+\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\d{1,9})?)?)?)/; ++const timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\d{1,2}|${offsetNoCapture.source})`); ++const calComponent = /[A-Za-z0-9]{3,8}/; ++const calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`); ++const yearpart = /(?:[+\u2212-]\d{6}|\d{4})/; ++const monthpart = /(?:0[1-9]|1[0-2])/; ++const daypart = /(?:0[1-9]|[12]\d|3[01])/; ++const datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`); ++const timesplit = /(\d{2})(?::(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?|(\d{2})(?:(\d{2})(?:[.,](\d{1,9}))?)?)?/; ++const offset = /([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?/; ++const zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\[(${timeZoneID.source})\\])?`); ++const calendar = new RegExp(`\\[u-ca=(${calendarID.source})\\]`); ++const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i'); ++const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i'); ++// The short forms of YearMonth and MonthDay are only for the ISO calendar. ++// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate, ++// with the reference fields. ++// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by ++// RFC 3339 and we don't allow 2-digit years, so we allow it. ++// Not ambiguous with HHMMSS because that requires a 'T' prefix ++const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`); ++const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`); ++const fraction = /(\d+)(?:[.,](\d{1,9}))?/; ++const durationDate = /(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)W)?(?:(\d+)D)?/; ++const durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`); ++const duration = new RegExp(`^([+\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i'); ++ ++const ArrayIncludes$1 = Array.prototype.includes; ++const ArrayPrototypePush$1 = Array.prototype.push; ++const IntlDateTimeFormat$2 = globalThis.Intl.DateTimeFormat; ++const MathMin = Math.min; ++const MathMax = Math.max; ++const MathAbs$1 = Math.abs; ++const MathFloor$1 = Math.floor; ++const MathSign = Math.sign; ++const MathTrunc = Math.trunc; ++const NumberIsNaN = Number.isNaN; ++const NumberIsFinite = Number.isFinite; ++const NumberCtor = Number; ++const StringCtor = String; ++const NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER; ++const ObjectAssign$2 = Object.assign; ++const ObjectCreate$2 = Object.create; ++const ObjectDefineProperty = Object.defineProperty; ++const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; ++const ObjectIs = Object.is; ++const ReflectApply$1 = Reflect.apply; ++const ZERO = JSBI__default["default"].BigInt(0); ++const ONE = JSBI__default["default"].BigInt(1); ++const SIXTY = JSBI__default["default"].BigInt(60); ++const THOUSAND = JSBI__default["default"].BigInt(1e3); ++const MILLION = JSBI__default["default"].BigInt(1e6); ++const BILLION = JSBI__default["default"].BigInt(1e9); ++const NEGATIVE_ONE = JSBI__default["default"].BigInt(-1); ++const DAY_SECONDS = 86400; ++const DAY_NANOS = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(DAY_SECONDS), BILLION); ++const NS_MIN = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(-86400), JSBI__default["default"].BigInt(1e17)); ++const NS_MAX = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(86400), JSBI__default["default"].BigInt(1e17)); ++const YEAR_MIN = -271821; ++const YEAR_MAX = 275760; ++const BEFORE_FIRST_OFFSET_TRANSITION = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(-388152), JSBI__default["default"].BigInt(1e13)); // 1847-01-01T00:00:00Z ++const ABOUT_TEN_YEARS_NANOS = JSBI__default["default"].multiply(DAY_NANOS, JSBI__default["default"].BigInt(366 * 10)); ++const ABOUT_ONE_YEAR_NANOS = JSBI__default["default"].multiply(DAY_NANOS, JSBI__default["default"].BigInt(366 * 1)); ++const TWO_WEEKS_NANOS = JSBI__default["default"].multiply(DAY_NANOS, JSBI__default["default"].BigInt(2 * 7)); ++const BUILTIN_CALENDAR_IDS = [ ++ 'iso8601', ++ 'hebrew', ++ 'islamic', ++ 'islamic-umalqura', ++ 'islamic-tbla', ++ 'islamic-civil', ++ 'islamic-rgsa', ++ 'islamicc', ++ 'persian', ++ 'ethiopic', ++ 'ethioaa', ++ 'coptic', ++ 'chinese', ++ 'dangi', ++ 'roc', ++ 'indian', ++ 'buddhist', ++ 'japanese', ++ 'gregory' ++]; ++function IsInteger(value) { ++ if (typeof value !== 'number' || !NumberIsFinite(value)) ++ return false; ++ const abs = MathAbs$1(value); ++ return MathFloor$1(abs) === abs; ++} ++function IsObject(value) { ++ return (typeof value === 'object' && value !== null) || typeof value === 'function'; ++} ++function ToNumber(value) { ++ if (typeof value === 'bigint') ++ throw new TypeError('Cannot convert BigInt to number'); ++ return NumberCtor(value); ++} ++function ToInteger(value) { ++ const num = ToNumber(value); ++ if (NumberIsNaN(num)) ++ return 0; ++ const integer = MathTrunc(num); ++ if (num === 0) ++ return 0; ++ return integer; ++} ++function ToString(value) { ++ if (typeof value === 'symbol') { ++ throw new TypeError('Cannot convert a Symbol value to a String'); ++ } ++ return StringCtor(value); ++} ++function ToIntegerThrowOnInfinity(value) { ++ const integer = ToInteger(value); ++ if (!NumberIsFinite(integer)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ return integer; ++} ++function ToPositiveInteger(valueParam, property) { ++ const value = ToInteger(valueParam); ++ if (!NumberIsFinite(value)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ if (value < 1) { ++ if (property !== undefined) { ++ throw new RangeError(`property '${property}' cannot be a a number less than one`); ++ } ++ throw new RangeError('Cannot convert a number less than one to a positive integer'); ++ } ++ return value; ++} ++function ToIntegerWithoutRounding(valueParam) { ++ const value = ToNumber(valueParam); ++ if (NumberIsNaN(value)) ++ return 0; ++ if (!NumberIsFinite(value)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ if (!IsInteger(value)) { ++ throw new RangeError(`unsupported fractional value ${value}`); ++ } ++ return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0 ++} ++function divmod(x, y) { ++ const quotient = JSBI__default["default"].divide(x, y); ++ const remainder = JSBI__default["default"].remainder(x, y); ++ return { quotient, remainder }; ++} ++function abs(x) { ++ if (JSBI__default["default"].lessThan(x, ZERO)) ++ return JSBI__default["default"].multiply(x, NEGATIVE_ONE); ++ return x; ++} ++function ArrayPush(arr, ...newItem) { ++ ArrayPrototypePush$1.apply(arr, newItem); ++ return arr; ++} ++const BUILTIN_CASTS = new Map([ ++ ['year', ToIntegerThrowOnInfinity], ++ ['month', ToPositiveInteger], ++ ['monthCode', ToString], ++ ['day', ToPositiveInteger], ++ ['hour', ToIntegerThrowOnInfinity], ++ ['minute', ToIntegerThrowOnInfinity], ++ ['second', ToIntegerThrowOnInfinity], ++ ['millisecond', ToIntegerThrowOnInfinity], ++ ['microsecond', ToIntegerThrowOnInfinity], ++ ['nanosecond', ToIntegerThrowOnInfinity], ++ ['years', ToIntegerWithoutRounding], ++ ['months', ToIntegerWithoutRounding], ++ ['weeks', ToIntegerWithoutRounding], ++ ['days', ToIntegerWithoutRounding], ++ ['hours', ToIntegerWithoutRounding], ++ ['minutes', ToIntegerWithoutRounding], ++ ['seconds', ToIntegerWithoutRounding], ++ ['milliseconds', ToIntegerWithoutRounding], ++ ['microseconds', ToIntegerWithoutRounding], ++ ['nanoseconds', ToIntegerWithoutRounding], ++ ['era', ToString], ++ ['eraYear', ToInteger], ++ ['offset', ToString] ++]); ++const BUILTIN_DEFAULTS = new Map([ ++ ['hour', 0], ++ ['minute', 0], ++ ['second', 0], ++ ['millisecond', 0], ++ ['microsecond', 0], ++ ['nanosecond', 0] ++]); ++// each item is [plural, singular, category] ++const SINGULAR_PLURAL_UNITS = [ ++ ['years', 'year', 'date'], ++ ['months', 'month', 'date'], ++ ['weeks', 'week', 'date'], ++ ['days', 'day', 'date'], ++ ['hours', 'hour', 'time'], ++ ['minutes', 'minute', 'time'], ++ ['seconds', 'second', 'time'], ++ ['milliseconds', 'millisecond', 'time'], ++ ['microseconds', 'microsecond', 'time'], ++ ['nanoseconds', 'nanosecond', 'time'] ++]; ++const SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]])); ++const PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p])); ++const UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s); ++const DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort(); ++const IntlDateTimeFormatEnUsCache = new Map(); ++function getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) { ++ let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier); ++ if (instance === undefined) { ++ instance = new IntlDateTimeFormat$2('en-us', { ++ timeZone: StringCtor(timeZoneIdentifier), ++ hour12: false, ++ era: 'short', ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance); ++ } ++ return instance; ++} ++function IsTemporalInstant(item) { ++ return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR); ++} ++function IsTemporalTimeZone(item) { ++ return HasSlot(item, TIMEZONE_ID); ++} ++function IsTemporalCalendar(item) { ++ return HasSlot(item, CALENDAR_ID); ++} ++function IsTemporalDuration(item) { ++ return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS); ++} ++function IsTemporalDate(item) { ++ return HasSlot(item, DATE_BRAND); ++} ++function IsTemporalTime(item) { ++ return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) && ++ !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY)); ++} ++function IsTemporalDateTime(item) { ++ return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND); ++} ++function IsTemporalYearMonth(item) { ++ return HasSlot(item, YEAR_MONTH_BRAND); ++} ++function IsTemporalMonthDay(item) { ++ return HasSlot(item, MONTH_DAY_BRAND); ++} ++function IsTemporalZonedDateTime(item) { ++ return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR); ++} ++function RejectObjectWithCalendarOrTimeZone(item) { ++ if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) { ++ throw new TypeError('with() does not support a calendar or timeZone property'); ++ } ++ if (item.calendar !== undefined) { ++ throw new TypeError('with() does not support a calendar property'); ++ } ++ if (item.timeZone !== undefined) { ++ throw new TypeError('with() does not support a timeZone property'); ++ } ++} ++function ParseTemporalTimeZone(stringIdent) { ++ let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent); ++ if (ianaName) ++ return ianaName; ++ if (z) ++ return 'UTC'; ++ return offset; // if !ianaName && !z then offset must be present ++} ++function FormatCalendarAnnotation(id, showCalendar) { ++ if (showCalendar === 'never') ++ return ''; ++ if (showCalendar === 'auto' && id === 'iso8601') ++ return ''; ++ return `[u-ca=${id}]`; ++} ++function ParseISODateTime(isoString) { ++ // ZDT is the superset of fields for every other Temporal type ++ const match = zoneddatetime.exec(isoString); ++ if (!match) ++ throw new RangeError(`invalid ISO 8601 string: ${isoString}`); ++ let yearString = match[1]; ++ if (yearString[0] === '\u2212') ++ yearString = `-${yearString.slice(1)}`; ++ if (yearString === '-000000') ++ throw new RangeError(`invalid ISO 8601 string: ${isoString}`); ++ const year = ToInteger(yearString); ++ const month = ToInteger(match[2] || match[4]); ++ const day = ToInteger(match[3] || match[5]); ++ const hour = ToInteger(match[6]); ++ const hasTime = match[6] !== undefined; ++ const minute = ToInteger(match[7] || match[10]); ++ let second = ToInteger(match[8] || match[11]); ++ if (second === 60) ++ second = 59; ++ const fraction = (match[9] || match[12]) + '000000000'; ++ const millisecond = ToInteger(fraction.slice(0, 3)); ++ const microsecond = ToInteger(fraction.slice(3, 6)); ++ const nanosecond = ToInteger(fraction.slice(6, 9)); ++ let offset; ++ let z = false; ++ if (match[13]) { ++ offset = undefined; ++ z = true; ++ } ++ else if (match[14] && match[15]) { ++ const offsetSign = match[14] === '-' || match[14] === '\u2212' ? '-' : '+'; ++ const offsetHours = match[15] || '00'; ++ const offsetMinutes = match[16] || '00'; ++ const offsetSeconds = match[17] || '00'; ++ let offsetFraction = match[18] || '0'; ++ offset = `${offsetSign}${offsetHours}:${offsetMinutes}`; ++ if (+offsetFraction) { ++ while (offsetFraction.endsWith('0')) ++ offsetFraction = offsetFraction.slice(0, -1); ++ offset += `:${offsetSeconds}.${offsetFraction}`; ++ } ++ else if (+offsetSeconds) { ++ offset += `:${offsetSeconds}`; ++ } ++ if (offset === '-00:00') ++ offset = '+00:00'; ++ } ++ let ianaName = match[19]; ++ if (ianaName) { ++ try { ++ // Canonicalize name if it is an IANA link name or is capitalized wrong ++ ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString(); ++ } ++ catch { ++ // Not an IANA name, may be a custom ID, pass through unchanged ++ } ++ } ++ const calendar = match[20]; ++ RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ return { ++ year, ++ month, ++ day, ++ hasTime, ++ hour, ++ minute, ++ second, ++ millisecond, ++ microsecond, ++ nanosecond, ++ ianaName, ++ offset, ++ z, ++ calendar ++ }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalInstantString(isoString) { ++ const result = ParseISODateTime(isoString); ++ if (!result.z && !result.offset) ++ throw new RangeError('Temporal.Instant requires a time zone offset'); ++ return result; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalZonedDateTimeString(isoString) { ++ const result = ParseISODateTime(isoString); ++ if (!result.ianaName) ++ throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets'); ++ return result; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalDateTimeString(isoString) { ++ return ParseISODateTime(isoString); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalDateString(isoString) { ++ return ParseISODateTime(isoString); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalTimeString(isoString) { ++ const match = time.exec(isoString); ++ let hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ if (match) { ++ hour = ToInteger(match[1]); ++ minute = ToInteger(match[2] || match[5]); ++ second = ToInteger(match[3] || match[6]); ++ if (second === 60) ++ second = 59; ++ const fraction = (match[4] || match[7]) + '000000000'; ++ millisecond = ToInteger(fraction.slice(0, 3)); ++ microsecond = ToInteger(fraction.slice(3, 6)); ++ nanosecond = ToInteger(fraction.slice(6, 9)); ++ calendar = match[15]; ++ } ++ else { ++ let z, hasTime; ++ ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } = ++ ParseISODateTime(isoString)); ++ if (!hasTime) ++ throw new RangeError(`time is missing in string: ${isoString}`); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainTime'); ++ } ++ // if it's a date-time string, OK ++ if (/[tT ][0-9][0-9]/.test(isoString)) { ++ return { hour, minute, second, millisecond, microsecond, nanosecond, calendar }; ++ } ++ // slow but non-grammar-dependent way to ensure that time-only strings that ++ // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to ++ // assertion in spec text ++ try { ++ const { month, day } = ParseTemporalMonthDayString(isoString); ++ RejectISODate(1972, month, day); ++ } ++ catch { ++ try { ++ const { year, month } = ParseTemporalYearMonthString(isoString); ++ RejectISODate(year, month, 1); ++ } ++ catch { ++ return { hour, minute, second, millisecond, microsecond, nanosecond, calendar }; ++ } ++ } ++ throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalYearMonthString(isoString) { ++ const match = yearmonth.exec(isoString); ++ let year, month, calendar, referenceISODay; ++ if (match) { ++ let yearString = match[1]; ++ if (yearString[0] === '\u2212') ++ yearString = `-${yearString.slice(1)}`; ++ if (yearString === '-000000') ++ throw new RangeError(`invalid ISO 8601 string: ${isoString}`); ++ year = ToInteger(yearString); ++ month = ToInteger(match[2]); ++ calendar = match[3]; ++ } ++ else { ++ let z; ++ ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString)); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainYearMonth'); ++ } ++ return { year, month, calendar, referenceISODay }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalMonthDayString(isoString) { ++ const match = monthday.exec(isoString); ++ let month, day, calendar, referenceISOYear; ++ if (match) { ++ month = ToInteger(match[1]); ++ day = ToInteger(match[2]); ++ } ++ else { ++ let z; ++ ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString)); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainMonthDay'); ++ } ++ return { month, day, calendar, referenceISOYear }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalTimeZoneString(stringIdent) { ++ try { ++ let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent); ++ if (canonicalIdent) ++ return { ianaName: canonicalIdent.toString() }; ++ } ++ catch { ++ // fall through ++ } ++ try { ++ // Try parsing ISO string instead ++ const result = ParseISODateTime(stringIdent); ++ if (result.z || result.offset || result.ianaName) { ++ return result; ++ } ++ } ++ catch { ++ // fall through ++ } ++ throw new RangeError(`Invalid time zone: ${stringIdent}`); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalDurationString(isoString) { ++ const match = duration.exec(isoString); ++ if (!match) ++ throw new RangeError(`invalid duration: ${isoString}`); ++ if (match.slice(2).every((element) => element === undefined)) { ++ throw new RangeError(`invalid duration: ${isoString}`); ++ } ++ const sign = match[1] === '-' || match[1] === '\u2212' ? -1 : 1; ++ const years = ToInteger(match[2]) * sign; ++ const months = ToInteger(match[3]) * sign; ++ const weeks = ToInteger(match[4]) * sign; ++ const days = ToInteger(match[5]) * sign; ++ const hours = ToInteger(match[6]) * sign; ++ let fHours = match[7]; ++ let minutes = ToInteger(match[8]) * sign; ++ let fMinutes = match[9]; ++ let seconds = ToInteger(match[10]) * sign; ++ const fSeconds = match[11] + '000000000'; ++ let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign; ++ let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign; ++ let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign; ++ fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0; ++ fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0; ++ ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds)); ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalInstant(isoString) { ++ let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString); ++ if (!z && !offset) ++ throw new RangeError('Temporal.Instant requires a time zone offset'); ++ // At least one of z or offset is defined, but TS doesn't seem to understand ++ // that we only use offset if z is not defined (and thus offset must be defined). ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs)); ++ const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (epochNs === null) ++ throw new RangeError('DateTime outside of supported range'); ++ return epochNs; ++} ++function RegulateISODate(yearParam, monthParam, dayParam, overflow) { ++ let year = yearParam; ++ let month = monthParam; ++ let day = dayParam; ++ switch (overflow) { ++ case 'reject': ++ RejectISODate(year, month, day); ++ break; ++ case 'constrain': ++ ({ year, month, day } = ConstrainISODate(year, month, day)); ++ break; ++ } ++ return { year, month, day }; ++} ++function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) { ++ let hour = hourParam; ++ let minute = minuteParam; ++ let second = secondParam; ++ let millisecond = millisecondParam; ++ let microsecond = microsecondParam; ++ let nanosecond = nanosecondParam; ++ switch (overflow) { ++ case 'reject': ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ break; ++ case 'constrain': ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond)); ++ break; ++ } ++ return { hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function RegulateISOYearMonth(yearParam, monthParam, overflow) { ++ let year = yearParam; ++ let month = monthParam; ++ const referenceISODay = 1; ++ switch (overflow) { ++ case 'reject': ++ RejectISODate(year, month, referenceISODay); ++ break; ++ case 'constrain': ++ ({ year, month } = ConstrainISODate(year, month)); ++ break; ++ } ++ return { year, month }; ++} ++function DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) { ++ let fHours = fHoursParam; ++ let minutes = minutesParam; ++ let fMinutes = fMinutesParam; ++ let seconds = secondsParam; ++ let milliseconds = millisecondsParam; ++ let microseconds = microsecondsParam; ++ let nanoseconds = nanosecondsParam; ++ if (fHours !== 0) { ++ [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => { ++ if (val !== 0) ++ throw new RangeError('only the smallest unit can be fractional'); ++ }); ++ const mins = fHours * 60; ++ minutes = MathTrunc(mins); ++ fMinutes = mins % 1; ++ } ++ if (fMinutes !== 0) { ++ [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => { ++ if (val !== 0) ++ throw new RangeError('only the smallest unit can be fractional'); ++ }); ++ const secs = fMinutes * 60; ++ seconds = MathTrunc(secs); ++ const fSeconds = secs % 1; ++ if (fSeconds !== 0) { ++ const mils = fSeconds * 1000; ++ milliseconds = MathTrunc(mils); ++ const fMilliseconds = mils % 1; ++ if (fMilliseconds !== 0) { ++ const mics = fMilliseconds * 1000; ++ microseconds = MathTrunc(mics); ++ const fMicroseconds = mics % 1; ++ if (fMicroseconds !== 0) { ++ const nans = fMicroseconds * 1000; ++ nanoseconds = MathTrunc(nans); ++ } ++ } ++ } ++ } ++ return { minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function ToTemporalDurationRecord(item) { ++ if (!IsObject(item)) { ++ return ParseTemporalDurationString(ToString(item)); ++ } ++ if (IsTemporalDuration(item)) { ++ return { ++ years: GetSlot(item, YEARS), ++ months: GetSlot(item, MONTHS), ++ weeks: GetSlot(item, WEEKS), ++ days: GetSlot(item, DAYS), ++ hours: GetSlot(item, HOURS), ++ minutes: GetSlot(item, MINUTES), ++ seconds: GetSlot(item, SECONDS), ++ milliseconds: GetSlot(item, MILLISECONDS), ++ microseconds: GetSlot(item, MICROSECONDS), ++ nanoseconds: GetSlot(item, NANOSECONDS) ++ }; ++ } ++ const result = { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0, ++ hours: 0, ++ minutes: 0, ++ seconds: 0, ++ milliseconds: 0, ++ microseconds: 0, ++ nanoseconds: 0 ++ }; ++ let partial = ToTemporalPartialDurationRecord(item); ++ for (const property of DURATION_FIELDS) { ++ const value = partial[property]; ++ if (value !== undefined) { ++ result[property] = value; ++ } ++ } ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result; ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function ToTemporalPartialDurationRecord(temporalDurationLike) { ++ if (!IsObject(temporalDurationLike)) { ++ throw new TypeError('invalid duration-like'); ++ } ++ const result = { ++ years: undefined, ++ months: undefined, ++ weeks: undefined, ++ days: undefined, ++ hours: undefined, ++ minutes: undefined, ++ seconds: undefined, ++ milliseconds: undefined, ++ microseconds: undefined, ++ nanoseconds: undefined ++ }; ++ let any = false; ++ for (const property of DURATION_FIELDS) { ++ const value = temporalDurationLike[property]; ++ if (value !== undefined) { ++ any = true; ++ result[property] = ToIntegerWithoutRounding(value); ++ } ++ } ++ if (!any) { ++ throw new TypeError('invalid duration-like'); ++ } ++ return result; ++} ++function ToLimitedTemporalDuration(item, disallowedProperties) { ++ let record = ToTemporalDurationRecord(item); ++ for (const property of disallowedProperties) { ++ if (record[property] !== 0) { ++ throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`); ++ } ++ } ++ return record; ++} ++function ToTemporalOverflow(options) { ++ if (options === undefined) ++ return 'constrain'; ++ return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain'); ++} ++function ToTemporalDisambiguation(options) { ++ if (options === undefined) ++ return 'compatible'; ++ return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible'); ++} ++function ToTemporalRoundingMode(options, fallback) { ++ return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback); ++} ++function NegateTemporalRoundingMode(roundingMode) { ++ switch (roundingMode) { ++ case 'ceil': ++ return 'floor'; ++ case 'floor': ++ return 'ceil'; ++ default: ++ return roundingMode; ++ } ++} ++function ToTemporalOffset(options, fallback) { ++ if (options === undefined) ++ return fallback; ++ return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback); ++} ++function ToShowCalendarOption(options) { ++ return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto'); ++} ++function ToShowTimeZoneNameOption(options) { ++ return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto'); ++} ++function ToShowOffsetOption(options) { ++ return GetOption(options, 'offset', ['auto', 'never'], 'auto'); ++} ++function ToTemporalRoundingIncrement(options, dividend, inclusive) { ++ let maximum = Infinity; ++ if (dividend !== undefined) ++ maximum = dividend; ++ if (!inclusive && dividend !== undefined) ++ maximum = dividend > 1 ? dividend - 1 : 1; ++ const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1); ++ if (dividend !== undefined && dividend % increment !== 0) { ++ throw new RangeError(`Rounding increment must divide evenly into ${dividend}`); ++ } ++ return increment; ++} ++function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) { ++ const maximumIncrements = { ++ year: undefined, ++ month: undefined, ++ week: undefined, ++ day: undefined, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++} ++function ToSecondsStringPrecision(options) { ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined); ++ if (smallestUnit === 'hour') { ++ const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => { ++ // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains. ++ // Maybe this is fixed in later TS versions? ++ if (c === 'time' && s !== 'hour') { ++ allowed.push(s, p); ++ } ++ return allowed; ++ }, []); ++ throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`); ++ } ++ switch (smallestUnit) { ++ case 'minute': ++ return { precision: 'minute', unit: 'minute', increment: 1 }; ++ case 'second': ++ return { precision: 0, unit: 'second', increment: 1 }; ++ case 'millisecond': ++ return { precision: 3, unit: 'millisecond', increment: 1 }; ++ case 'microsecond': ++ return { precision: 6, unit: 'microsecond', increment: 1 }; ++ case 'nanosecond': ++ return { precision: 9, unit: 'nanosecond', increment: 1 }; ++ } ++ let digits = options.fractionalSecondDigits; ++ if (digits === undefined) ++ digits = 'auto'; ++ if (typeof digits !== 'number') { ++ const stringDigits = ToString(digits); ++ if (stringDigits === 'auto') ++ return { precision: 'auto', unit: 'nanosecond', increment: 1 }; ++ throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`); ++ } ++ if (NumberIsNaN(digits) || digits < 0 || digits > 9) { ++ throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`); ++ } ++ const precision = MathFloor$1(digits); ++ switch (precision) { ++ case 0: ++ return { precision, unit: 'second', increment: 1 }; ++ case 1: ++ case 2: ++ case 3: ++ return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) }; ++ case 4: ++ case 5: ++ case 6: ++ return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) }; ++ case 7: ++ case 8: ++ case 9: ++ return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) }; ++ default: ++ throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`); ++ } ++} ++const REQUIRED = Symbol('~required~'); ++// This signature of the function is NOT used in type-checking, so restricting ++// the default value via generic binding like the other overloads isn't ++// necessary. ++function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) { ++ const allowedSingular = []; ++ for (const [, singular, category] of SINGULAR_PLURAL_UNITS) { ++ if (unitGroup === 'datetime' || unitGroup === category) { ++ allowedSingular.push(singular); ++ } ++ } ++ allowedSingular.push(...extraValues); ++ let defaultVal = requiredOrDefault; ++ if (defaultVal === REQUIRED) { ++ defaultVal = undefined; ++ } ++ else if (defaultVal !== undefined) { ++ allowedSingular.push(defaultVal); ++ } ++ const allowedValues = [ ++ ...allowedSingular ++ ]; ++ for (const singular of allowedSingular) { ++ const plural = PLURAL_FOR.get(singular); ++ if (plural !== undefined) ++ allowedValues.push(plural); ++ } ++ let retval = GetOption(options, key, allowedValues, defaultVal); ++ if (retval === undefined && requiredOrDefault === REQUIRED) { ++ throw new RangeError(`${key} is required`); ++ } ++ // Coerce any plural units into their singular form ++ if (SINGULAR_FOR.has(retval)) { ++ // We just has-checked this, but tsc doesn't understand that. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ return SINGULAR_FOR.get(retval); ++ } ++ return retval; ++} ++function ToRelativeTemporalObject(options) { ++ const relativeTo = options.relativeTo; ++ if (relativeTo === undefined) ++ return relativeTo; ++ let offsetBehaviour = 'option'; ++ let matchMinutes = false; ++ let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset; ++ if (IsObject(relativeTo)) { ++ if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) ++ return relativeTo; ++ if (IsTemporalDateTime(relativeTo)) ++ return TemporalDateTimeToDate(relativeTo); ++ calendar = GetTemporalCalendarWithISODefault(relativeTo); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fields = PrepareTemporalFields(relativeTo, fieldNames, []); ++ const dateOptions = ObjectCreate$2(null); ++ dateOptions.overflow = 'constrain'; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions)); ++ // The `offset` and `timeZone` properties only exist on ZonedDateTime (or ++ // ZonedDateTimeLike-property bags). The assertions below are used to avoid ++ // TS errors while not diverging runtime code from proposal-temporal. ++ offset = relativeTo.offset; ++ if (offset === undefined) ++ offsetBehaviour = 'wall'; ++ timeZone = relativeTo.timeZone; ++ } ++ else { ++ let ianaName, z; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } = ++ ParseISODateTime(ToString(relativeTo))); ++ if (ianaName) ++ timeZone = ianaName; ++ if (z) { ++ offsetBehaviour = 'exact'; ++ } ++ else if (!offset) { ++ offsetBehaviour = 'wall'; ++ } ++ if (!calendar) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ matchMinutes = true; ++ } ++ if (timeZone !== undefined) { ++ timeZone = ToTemporalTimeZone(timeZone); ++ let offsetNs = 0; ++ if (offsetBehaviour === 'option') ++ offsetNs = ParseTimeZoneOffsetString(ToString(offset)); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++ } ++ return CreateTemporalDate(year, month, day, calendar); ++} ++function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) { ++ for (const [prop, v] of [ ++ ['years', years], ++ ['months', months], ++ ['weeks', weeks], ++ ['days', days], ++ ['hours', hours], ++ ['minutes', minutes], ++ ['seconds', seconds], ++ ['milliseconds', milliseconds], ++ ['microseconds', microseconds], ++ ['nanoseconds', nanoseconds] ++ ]) { ++ if (v !== 0) { ++ // All the above keys are definitely in SINGULAR_FOR ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ return SINGULAR_FOR.get(prop); ++ } ++ } ++ return 'nanosecond'; ++} ++function LargerOfTwoTemporalUnits(unit1, unit2) { ++ if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) ++ return unit2; ++ return unit1; ++} ++function MergeLargestUnitOption(optionsParam, largestUnit) { ++ let options = optionsParam; ++ if (options === undefined) ++ options = ObjectCreate$2(null); ++ return ObjectAssign$2(ObjectCreate$2(null), options, { largestUnit }); ++} ++function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) { ++ const result = ObjectCreate$2(null); ++ let any = false; ++ for (const property of fields) { ++ let value = bag[property]; ++ if (value !== undefined) { ++ any = true; ++ if (BUILTIN_CASTS.has(property)) { ++ // We just has-checked this map access, so there will definitely be a ++ // value. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ value = BUILTIN_CASTS.get(property)(value); ++ } ++ result[property] = value; ++ } ++ else if (requiredFields !== 'partial') { ++ // TODO: using .call in this way is not correctly type-checked by tsc. ++ // We might need a type-safe Call wrapper? ++ if (ArrayIncludes$1.call(requiredFields, property)) { ++ throw new TypeError(`required property '${property}' missing or undefined`); ++ } ++ value = BUILTIN_DEFAULTS.get(property); ++ result[property] = value; ++ } ++ } ++ if (requiredFields === 'partial' && !any) { ++ throw new TypeError(emptySourceErrorMessage); ++ } ++ if ((result.era === undefined) !== (result.eraYear === undefined)) { ++ throw new RangeError("properties 'era' and 'eraYear' must be provided together"); ++ } ++ return result; ++} ++function ToTemporalTimeRecord(bag, completeness = 'complete') { ++ // NOTE: Field order here is important. ++ const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second']; ++ const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' }); ++ const result = {}; ++ for (const field of fields) { ++ const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field); ++ if (valueDesc !== undefined) { ++ result[field] = valueDesc.value; ++ } ++ else if (completeness === 'complete') { ++ result[field] = 0; ++ } ++ } ++ return result; ++} ++function ToTemporalDate(itemParam, options) { ++ let item = itemParam; ++ if (IsObject(item)) { ++ if (IsTemporalDate(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ if (IsTemporalDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR)); ++ } ++ const calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ return CalendarDateFromFields(calendar, fields, options); ++ } ++ ToTemporalOverflow(options); // validate and ignore ++ const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item)); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainDate'); ++ const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%'); ++ return new TemporalPlainDate(year, month, day, calendar); // include validation ++} ++function InterpretTemporalDateTimeFields(calendar, fields, options) { ++ let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields); ++ const overflow = ToTemporalOverflow(options); ++ const date = CalendarDateFromFields(calendar, fields, options); ++ const year = GetSlot(date, ISO_YEAR); ++ const month = GetSlot(date, ISO_MONTH); ++ const day = GetSlot(date, ISO_DAY); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow)); ++ return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function ToTemporalDateTime(item, options) { ++ let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ if (IsObject(item)) { ++ if (IsTemporalDateTime(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ if (IsTemporalDate(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR)); ++ } ++ calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options)); ++ } ++ else { ++ ToTemporalOverflow(options); // validate and ignore ++ let z; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } = ++ ParseTemporalDateTimeString(ToString(item))); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainDateTime'); ++ RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (calendar === undefined) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ } ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++} ++function ToTemporalDuration(item) { ++ if (IsTemporalDuration(item)) ++ return item; ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item); ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++} ++function ToTemporalInstant(item) { ++ if (IsTemporalInstant(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS)); ++ } ++ const ns = ParseTemporalInstant(ToString(item)); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(ns); ++} ++function ToTemporalMonthDay(itemParam, options) { ++ let item = itemParam; ++ if (IsObject(item)) { ++ if (IsTemporalMonthDay(item)) ++ return item; ++ let calendar, calendarAbsent; ++ if (HasSlot(item, CALENDAR)) { ++ calendar = GetSlot(item, CALENDAR); ++ calendarAbsent = false; ++ } ++ else { ++ let maybeStringCalendar = item.calendar; ++ calendarAbsent = maybeStringCalendar === undefined; ++ if (maybeStringCalendar === undefined) ++ maybeStringCalendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(maybeStringCalendar); ++ } ++ // HasSlot above adjusts the type of 'item' to include ++ // TypesWithCalendarUnits, which causes type-inference failures below. ++ // This is probably indicative of problems with HasSlot's typing. ++ item = item; ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ // Callers who omit the calendar are not writing calendar-independent ++ // code. In that case, `monthCode`/`year` can be omitted; `month` and ++ // `day` are sufficient. Add a `year` to satisfy calendar validation. ++ if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) { ++ fields.year = 1972; ++ } ++ return CalendarMonthDayFromFields(calendar, fields, options); ++ } ++ ToTemporalOverflow(options); // validate and ignore ++ let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item)); ++ let calendar = maybeStringCalendar; ++ if (calendar === undefined) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ if (referenceISOYear === undefined) { ++ RejectISODate(1972, month, day); ++ return CreateTemporalMonthDay(month, day, calendar); ++ } ++ const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear); ++ return CalendarMonthDayFromFields(calendar, result); ++} ++function ToTemporalTime(itemParam, overflow = 'constrain') { ++ let item = itemParam; ++ let hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ if (IsObject(item)) { ++ if (IsTemporalTime(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ if (IsTemporalDateTime(item)) { ++ const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND)); ++ } ++ calendar = GetTemporalCalendarWithISODefault(item); ++ if (ToString(calendar) !== 'iso8601') { ++ throw new RangeError('PlainTime can only have iso8601 calendar'); ++ } ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item)); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow)); ++ } ++ else { ++ ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item))); ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ if (calendar !== undefined && calendar !== 'iso8601') { ++ throw new RangeError('PlainTime can only have iso8601 calendar'); ++ } ++ } ++ const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function ToTemporalYearMonth(item, options) { ++ if (IsObject(item)) { ++ if (IsTemporalYearMonth(item)) ++ return item; ++ const calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields, options); ++ } ++ ToTemporalOverflow(options); // validate and ignore ++ let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item)); ++ // TODO: replace with ternary? ++ let calendar = maybeStringCalendar; ++ if (calendar === undefined) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ if (referenceISODay === undefined) { ++ RejectISODate(year, month, 1); ++ return CreateTemporalYearMonth(year, month, calendar); ++ } ++ const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay); ++ return CalendarYearMonthFromFields(calendar, result); ++} ++function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) { ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') { ++ // Simple case: ISO string without a TZ offset (or caller wants to ignore ++ // the offset), so just convert DateTime to Instant in the given time zone ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation); ++ return GetSlot(instant, EPOCHNANOSECONDS); ++ } ++ // The caller wants the offset to always win ('use') OR the caller is OK ++ // with the offset winning ('prefer' or 'reject') as long as it's valid ++ // for this timezone and date/time. ++ if (offsetBehaviour === 'exact' || offsetOpt === 'use') { ++ // Calculate the instant for the input's date/time and offset ++ const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (epochNs === null) ++ throw new RangeError('ZonedDateTime outside of supported range'); ++ return JSBI__default["default"].subtract(epochNs, JSBI__default["default"].BigInt(offsetNs)); ++ } ++ // "prefer" or "reject" ++ const possibleInstants = GetPossibleInstantsFor(timeZone, dt); ++ for (const candidate of possibleInstants) { ++ const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate); ++ const roundedCandidateOffset = JSBI__default["default"].toNumber(RoundNumberToIncrement(JSBI__default["default"].BigInt(candidateOffset), 60e9, 'halfExpand')); ++ if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) { ++ return GetSlot(candidate, EPOCHNANOSECONDS); ++ } ++ } ++ // the user-provided offset doesn't match any instants for this time ++ // zone and date/time. ++ if (offsetOpt === 'reject') { ++ const offsetStr = FormatTimeZoneOffsetString(offsetNs); ++ const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone'; ++ // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT ++ // toString (which is invoked by Node when using template literals directly). ++ // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit ++ throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`); ++ } ++ // fall through: offsetOpt === 'prefer', but the offset doesn't match ++ // so fall back to use the time zone instead. ++ const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation); ++ return GetSlot(instant, EPOCHNANOSECONDS); ++} ++function ToTemporalZonedDateTime(item, options) { ++ let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar; ++ let matchMinute = false; ++ let offsetBehaviour = 'option'; ++ if (IsObject(item)) { ++ if (IsTemporalZonedDateTime(item)) ++ return item; ++ calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset'); ++ const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options)); ++ timeZone = ToTemporalTimeZone(fields.timeZone); ++ offset = fields.offset; ++ if (offset === undefined) { ++ offsetBehaviour = 'wall'; ++ } ++ else { ++ offset = ToString(offset); ++ } ++ } ++ else { ++ ToTemporalOverflow(options); // validate and ignore ++ let ianaName, z; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } = ++ ParseTemporalZonedDateTimeString(ToString(item))); ++ if (!ianaName) ++ throw new RangeError('time zone ID required in brackets'); ++ if (z) { ++ offsetBehaviour = 'exact'; ++ } ++ else if (!offset) { ++ offsetBehaviour = 'wall'; ++ } ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ timeZone = new TemporalTimeZone(ianaName); ++ if (!calendar) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ matchMinute = true; // ISO strings may specify offset with less precision ++ } ++ let offsetNs = 0; ++ // The code above guarantees that if offsetBehaviour === 'option', then ++ // `offset` is not undefined. ++ if (offsetBehaviour === 'option') ++ offsetNs = ParseTimeZoneOffsetString(offset); ++ const disambiguation = ToTemporalDisambiguation(options); ++ const offsetOpt = ToTemporalOffset(options, 'reject'); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++} ++function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) { ++ RejectISODate(isoYear, isoMonth, isoDay); ++ RejectDateRange(isoYear, isoMonth, isoDay); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, DATE_BRAND, true); ++ { ++ ObjectDefineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) { ++ const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%'); ++ const result = ObjectCreate$2(TemporalPlainDate.prototype); ++ CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar); ++ return result; ++} ++function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) { ++ RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns); ++ RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, ISO_HOUR, h); ++ SetSlot(result, ISO_MINUTE, min); ++ SetSlot(result, ISO_SECOND, s); ++ SetSlot(result, ISO_MILLISECOND, ms); ++ SetSlot(result, ISO_MICROSECOND, µs); ++ SetSlot(result, ISO_NANOSECOND, ns); ++ SetSlot(result, CALENDAR, calendar); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) { ++ const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const result = ObjectCreate$2(TemporalPlainDateTime.prototype); ++ CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar); ++ return result; ++} ++function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) { ++ RejectISODate(referenceISOYear, isoMonth, isoDay); ++ RejectDateRange(referenceISOYear, isoMonth, isoDay); ++ CreateSlots(result); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, ISO_YEAR, referenceISOYear); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, MONTH_DAY_BRAND, true); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) { ++ const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%'); ++ const result = ObjectCreate$2(TemporalPlainMonthDay.prototype); ++ CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear); ++ return result; ++} ++function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) { ++ RejectISODate(isoYear, isoMonth, referenceISODay); ++ RejectYearMonthRange(isoYear, isoMonth); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, referenceISODay); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, YEAR_MONTH_BRAND, true); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) { ++ const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%'); ++ const result = ObjectCreate$2(TemporalPlainYearMonth.prototype); ++ CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay); ++ return result; ++} ++function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) { ++ ValidateEpochNanoseconds(epochNanoseconds); ++ CreateSlots(result); ++ SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds); ++ SetSlot(result, TIME_ZONE, timeZone); ++ SetSlot(result, CALENDAR, calendar); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS)); ++ SetSlot(result, INSTANT, instant); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) { ++ const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%'); ++ const result = ObjectCreate$2(TemporalZonedDateTime.prototype); ++ CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar); ++ return result; ++} ++function GetISO8601Calendar() { ++ const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%'); ++ return new TemporalCalendar('iso8601'); ++} ++// TODO: should (can?) we make this generic so the field names are checked ++// against the type that the calendar is a property of? ++function CalendarFields(calendar, fieldNamesParam) { ++ let fieldNames = fieldNamesParam; ++ if (calendar.fields) { ++ fieldNames = calendar.fields(fieldNames); ++ } ++ const result = []; ++ for (const name of fieldNames) { ++ if (typeof name !== 'string') ++ throw new TypeError('bad return from calendar.fields()'); ++ ArrayPrototypePush$1.call(result, name); ++ } ++ return result; ++} ++function CalendarMergeFields(calendar, fields, additionalFields) { ++ const calMergeFields = calendar.mergeFields; ++ if (!calMergeFields) { ++ return { ...fields, ...additionalFields }; ++ } ++ const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]); ++ if (!IsObject(result)) ++ throw new TypeError('bad return from calendar.mergeFields()'); ++ return result; ++} ++function CalendarDateAdd(calendar, date, duration, options, dateAddParam) { ++ let dateAdd = dateAddParam; ++ if (dateAdd === undefined) { ++ dateAdd = calendar.dateAdd; ++ } ++ const result = ReflectApply$1(dateAdd, calendar, [date, duration, options]); ++ if (!IsTemporalDate(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) { ++ let dateUntil = dateUntilParam; ++ if (dateUntil === undefined) { ++ dateUntil = calendar.dateUntil; ++ } ++ const result = ReflectApply$1(dateUntil, calendar, [date, otherDate, options]); ++ if (!IsTemporalDuration(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarYear(calendar, dateLike) { ++ const result = calendar.year(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar year result must be an integer'); ++ } ++ return ToIntegerThrowOnInfinity(result); ++} ++function CalendarMonth(calendar, dateLike) { ++ const result = calendar.month(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar month result must be a positive integer'); ++ } ++ return ToPositiveInteger(result); ++} ++function CalendarMonthCode(calendar, dateLike) { ++ const result = calendar.monthCode(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar monthCode result must be a string'); ++ } ++ return ToString(result); ++} ++function CalendarDay(calendar, dateLike) { ++ const result = calendar.day(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar day result must be a positive integer'); ++ } ++ return ToPositiveInteger(result); ++} ++function CalendarEra(calendar, dateLike) { ++ let result = calendar.era(dateLike); ++ if (result !== undefined) { ++ result = ToString(result); ++ } ++ return result; ++} ++function CalendarEraYear(calendar, dateLike) { ++ let result = calendar.eraYear(dateLike); ++ if (result !== undefined) { ++ result = ToIntegerThrowOnInfinity(result); ++ } ++ return result; ++} ++function CalendarDayOfWeek(calendar, dateLike) { ++ return calendar.dayOfWeek(dateLike); ++} ++function CalendarDayOfYear(calendar, dateLike) { ++ return calendar.dayOfYear(dateLike); ++} ++function CalendarWeekOfYear(calendar, dateLike) { ++ return calendar.weekOfYear(dateLike); ++} ++function CalendarDaysInWeek(calendar, dateLike) { ++ return calendar.daysInWeek(dateLike); ++} ++function CalendarDaysInMonth(calendar, dateLike) { ++ return calendar.daysInMonth(dateLike); ++} ++function CalendarDaysInYear(calendar, dateLike) { ++ return calendar.daysInYear(dateLike); ++} ++function CalendarMonthsInYear(calendar, dateLike) { ++ return calendar.monthsInYear(dateLike); ++} ++function CalendarInLeapYear(calendar, dateLike) { ++ return calendar.inLeapYear(dateLike); ++} ++function ToTemporalCalendar(calendarLikeParam) { ++ let calendarLike = calendarLikeParam; ++ if (IsObject(calendarLike)) { ++ if (HasSlot(calendarLike, CALENDAR)) ++ return GetSlot(calendarLike, CALENDAR); ++ if (!('calendar' in calendarLike)) ++ return calendarLike; ++ calendarLike = calendarLike.calendar; ++ if (IsObject(calendarLike) && !('calendar' in calendarLike)) ++ return calendarLike; ++ } ++ const identifier = ToString(calendarLike); ++ const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%'); ++ if (IsBuiltinCalendar(identifier)) ++ return new TemporalCalendar(identifier); ++ let calendar; ++ try { ++ ({ calendar } = ParseISODateTime(identifier)); ++ } ++ catch { ++ throw new RangeError(`Invalid calendar: ${identifier}`); ++ } ++ if (!calendar) ++ calendar = 'iso8601'; ++ return new TemporalCalendar(calendar); ++} ++function GetTemporalCalendarWithISODefault(item) { ++ if (HasSlot(item, CALENDAR)) ++ return GetSlot(item, CALENDAR); ++ const { calendar } = item; ++ if (calendar === undefined) ++ return GetISO8601Calendar(); ++ return ToTemporalCalendar(calendar); ++} ++function CalendarEquals(one, two) { ++ if (one === two) ++ return true; ++ const cal1 = ToString(one); ++ const cal2 = ToString(two); ++ return cal1 === cal2; ++} ++function ConsolidateCalendars(one, two) { ++ if (one === two) ++ return two; ++ const sOne = ToString(one); ++ const sTwo = ToString(two); ++ if (sOne === sTwo || sOne === 'iso8601') { ++ return two; ++ } ++ else if (sTwo === 'iso8601') { ++ return one; ++ } ++ else { ++ throw new RangeError('irreconcilable calendars'); ++ } ++} ++function CalendarDateFromFields(calendar, fields, options) { ++ const result = calendar.dateFromFields(fields, options); ++ if (!IsTemporalDate(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarYearMonthFromFields(calendar, fields, options) { ++ const result = calendar.yearMonthFromFields(fields, options); ++ if (!IsTemporalYearMonth(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarMonthDayFromFields(calendar, fields, options) { ++ const result = calendar.monthDayFromFields(fields, options); ++ if (!IsTemporalMonthDay(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function ToTemporalTimeZone(temporalTimeZoneLikeParam) { ++ let temporalTimeZoneLike = temporalTimeZoneLikeParam; ++ if (IsObject(temporalTimeZoneLike)) { ++ if (IsTemporalZonedDateTime(temporalTimeZoneLike)) ++ return GetSlot(temporalTimeZoneLike, TIME_ZONE); ++ if (!('timeZone' in temporalTimeZoneLike)) ++ return temporalTimeZoneLike; ++ temporalTimeZoneLike = temporalTimeZoneLike.timeZone; ++ if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) { ++ return temporalTimeZoneLike; ++ } ++ } ++ const identifier = ToString(temporalTimeZoneLike); ++ const timeZone = ParseTemporalTimeZone(identifier); ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ return new TemporalTimeZone(timeZone); ++} ++function TimeZoneEquals(one, two) { ++ if (one === two) ++ return true; ++ const tz1 = ToString(one); ++ const tz2 = ToString(two); ++ return tz1 === tz2; ++} ++function TemporalDateTimeToDate(dateTime) { ++ return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR)); ++} ++function TemporalDateTimeToTime(dateTime) { ++ const Time = GetIntrinsic('%Temporal.PlainTime%'); ++ return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++} ++function GetOffsetNanosecondsFor(timeZone, instant) { ++ let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor; ++ if (typeof getOffsetNanosecondsFor !== 'function') { ++ throw new TypeError('getOffsetNanosecondsFor not callable'); ++ } ++ const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]); ++ if (typeof offsetNs !== 'number') { ++ throw new TypeError('bad return from getOffsetNanosecondsFor'); ++ } ++ if (!IsInteger(offsetNs) || MathAbs$1(offsetNs) > 86400e9) { ++ throw new RangeError('out-of-range return from getOffsetNanosecondsFor'); ++ } ++ return offsetNs; ++} ++function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) { ++ const offsetNs = GetOffsetNanosecondsFor(timeZone, instant); ++ return FormatTimeZoneOffsetString(offsetNs); ++} ++function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) { ++ const ns = GetSlot(instant, EPOCHNANOSECONDS); ++ const offsetNs = GetOffsetNanosecondsFor(timeZone, instant); ++ let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs)); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++} ++function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) { ++ const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime); ++ return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation); ++} ++function DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) { ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ const numInstants = possibleInstants.length; ++ if (numInstants === 1) ++ return possibleInstants[0]; ++ if (numInstants) { ++ switch (disambiguation) { ++ case 'compatible': ++ // fall through because 'compatible' means 'earlier' for "fall back" transitions ++ case 'earlier': ++ return possibleInstants[0]; ++ case 'later': ++ return possibleInstants[numInstants - 1]; ++ case 'reject': { ++ throw new RangeError('multiple instants found'); ++ } ++ } ++ } ++ const year = GetSlot(dateTime, ISO_YEAR); ++ const month = GetSlot(dateTime, ISO_MONTH); ++ const day = GetSlot(dateTime, ISO_DAY); ++ const hour = GetSlot(dateTime, ISO_HOUR); ++ const minute = GetSlot(dateTime, ISO_MINUTE); ++ const second = GetSlot(dateTime, ISO_SECOND); ++ const millisecond = GetSlot(dateTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(dateTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(dateTime, ISO_NANOSECOND); ++ const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (utcns === null) ++ throw new RangeError('DateTime outside of supported range'); ++ const dayBefore = new Instant(JSBI__default["default"].subtract(utcns, DAY_NANOS)); ++ const dayAfter = new Instant(JSBI__default["default"].add(utcns, DAY_NANOS)); ++ const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore); ++ const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter); ++ const nanoseconds = offsetAfter - offsetBefore; ++ switch (disambiguation) { ++ case 'earlier': { ++ const calendar = GetSlot(dateTime, CALENDAR); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined); ++ const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar); ++ return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0]; ++ } ++ case 'compatible': ++ // fall through because 'compatible' means 'later' for "spring forward" transitions ++ case 'later': { ++ const calendar = GetSlot(dateTime, CALENDAR); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined); ++ const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar); ++ const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime); ++ return possible[possible.length - 1]; ++ } ++ case 'reject': { ++ throw new RangeError('no such instant found'); ++ } ++ } ++} ++function GetPossibleInstantsFor(timeZone, dateTime) { ++ const possibleInstants = timeZone.getPossibleInstantsFor(dateTime); ++ const result = []; ++ for (const instant of possibleInstants) { ++ if (!IsTemporalInstant(instant)) { ++ throw new TypeError('bad return from getPossibleInstantsFor'); ++ } ++ ArrayPrototypePush$1.call(result, instant); ++ } ++ return result; ++} ++function ISOYearString(year) { ++ let yearString; ++ if (year < 0 || year > 9999) { ++ const sign = year < 0 ? '-' : '+'; ++ const yearNumber = MathAbs$1(year); ++ yearString = sign + `000000${yearNumber}`.slice(-6); ++ } ++ else { ++ yearString = `0000${year}`.slice(-4); ++ } ++ return yearString; ++} ++function ISODateTimePartString(part) { ++ return `00${part}`.slice(-2); ++} ++function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) { ++ if (precision === 'minute') ++ return ''; ++ const secs = `:${ISODateTimePartString(second)}`; ++ let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond; ++ let fraction; ++ if (precision === 'auto') { ++ if (fractionNumber === 0) ++ return secs; ++ fraction = `${fractionNumber}`.padStart(9, '0'); ++ while (fraction[fraction.length - 1] === '0') ++ fraction = fraction.slice(0, -1); ++ } ++ else { ++ if (precision === 0) ++ return secs; ++ fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision); ++ } ++ return `${secs}.${fraction}`; ++} ++function TemporalInstantToString(instant, timeZone, precision) { ++ let outputTimeZone = timeZone; ++ if (outputTimeZone === undefined) { ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ outputTimeZone = new TemporalTimeZone('UTC'); ++ } ++ const iso = GetISO8601Calendar(); ++ const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso); ++ const year = ISOYearString(GetSlot(dateTime, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY)); ++ const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR)); ++ const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE)); ++ const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision); ++ let timeZoneString = 'Z'; ++ if (timeZone !== undefined) { ++ const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant); ++ timeZoneString = FormatISOTimeZoneOffsetString(offsetNs); ++ } ++ return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`; ++} ++function TemporalDurationToString(duration, precision = 'auto', options = undefined) { ++ function formatNumber(num) { ++ if (num <= NumberMaxSafeInteger) ++ return num.toString(10); ++ return JSBI__default["default"].BigInt(num).toString(10); ++ } ++ const years = GetSlot(duration, YEARS); ++ const months = GetSlot(duration, MONTHS); ++ const weeks = GetSlot(duration, WEEKS); ++ const days = GetSlot(duration, DAYS); ++ const hours = GetSlot(duration, HOURS); ++ const minutes = GetSlot(duration, MINUTES); ++ let seconds = GetSlot(duration, SECONDS); ++ let ms = GetSlot(duration, MILLISECONDS); ++ let µs = GetSlot(duration, MICROSECONDS); ++ let ns = GetSlot(duration, NANOSECONDS); ++ const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ ({ ++ seconds, ++ milliseconds: ms, ++ microseconds: µs, ++ nanoseconds: ns ++ } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode)); ++ } ++ const dateParts = []; ++ if (years) ++ dateParts.push(`${formatNumber(MathAbs$1(years))}Y`); ++ if (months) ++ dateParts.push(`${formatNumber(MathAbs$1(months))}M`); ++ if (weeks) ++ dateParts.push(`${formatNumber(MathAbs$1(weeks))}W`); ++ if (days) ++ dateParts.push(`${formatNumber(MathAbs$1(days))}D`); ++ const timeParts = []; ++ if (hours) ++ timeParts.push(`${formatNumber(MathAbs$1(hours))}H`); ++ if (minutes) ++ timeParts.push(`${formatNumber(MathAbs$1(minutes))}M`); ++ const secondParts = []; ++ let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0); ++ let nsBigInt, µsBigInt, msBigInt, secondsBigInt; ++ ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND)); ++ ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND)); ++ const fraction = MathAbs$1(JSBI__default["default"].toNumber(msBigInt)) * 1e6 + MathAbs$1(JSBI__default["default"].toNumber(µsBigInt)) * 1e3 + MathAbs$1(JSBI__default["default"].toNumber(nsBigInt)); ++ let decimalPart; ++ if (precision === 'auto') { ++ if (fraction !== 0) { ++ decimalPart = `${fraction}`.padStart(9, '0'); ++ while (decimalPart[decimalPart.length - 1] === '0') { ++ decimalPart = decimalPart.slice(0, -1); ++ } ++ } ++ } ++ else if (precision !== 0) { ++ decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision); ++ } ++ if (decimalPart) ++ secondParts.unshift('.', decimalPart); ++ if (!JSBI__default["default"].equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') { ++ secondParts.unshift(abs(secondsBigInt).toString()); ++ } ++ if (secondParts.length) ++ timeParts.push(`${secondParts.join('')}S`); ++ if (timeParts.length) ++ timeParts.unshift('T'); ++ if (!dateParts.length && !timeParts.length) ++ return 'PT0S'; ++ return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`; ++} ++function TemporalDateToString(date, showCalendar = 'auto') { ++ const year = ISOYearString(GetSlot(date, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(date, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(date, ISO_DAY)); ++ const calendarID = ToString(GetSlot(date, CALENDAR)); ++ const calendar = FormatCalendarAnnotation(calendarID, showCalendar); ++ return `${year}-${month}-${day}${calendar}`; ++} ++function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) { ++ let year = GetSlot(dateTime, ISO_YEAR); ++ let month = GetSlot(dateTime, ISO_MONTH); ++ let day = GetSlot(dateTime, ISO_DAY); ++ let hour = GetSlot(dateTime, ISO_HOUR); ++ let minute = GetSlot(dateTime, ISO_MINUTE); ++ let second = GetSlot(dateTime, ISO_SECOND); ++ let millisecond = GetSlot(dateTime, ISO_MILLISECOND); ++ let microsecond = GetSlot(dateTime, ISO_MICROSECOND); ++ let nanosecond = GetSlot(dateTime, ISO_NANOSECOND); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode)); ++ } ++ const yearString = ISOYearString(year); ++ const monthString = ISODateTimePartString(month); ++ const dayString = ISODateTimePartString(day); ++ const hourString = ISODateTimePartString(hour); ++ const minuteString = ISODateTimePartString(minute); ++ const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision); ++ const calendarID = ToString(GetSlot(dateTime, CALENDAR)); ++ const calendar = FormatCalendarAnnotation(calendarID, showCalendar); ++ return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`; ++} ++function TemporalMonthDayToString(monthDay, showCalendar = 'auto') { ++ const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY)); ++ let resultString = `${month}-${day}`; ++ const calendar = GetSlot(monthDay, CALENDAR); ++ const calendarID = ToString(calendar); ++ if (showCalendar === 'always' || calendarID !== 'iso8601') { ++ const year = ISOYearString(GetSlot(monthDay, ISO_YEAR)); ++ resultString = `${year}-${resultString}`; ++ } ++ const calendarString = FormatCalendarAnnotation(calendarID, showCalendar); ++ if (calendarString) ++ resultString += calendarString; ++ return resultString; ++} ++function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') { ++ const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH)); ++ let resultString = `${year}-${month}`; ++ const calendar = GetSlot(yearMonth, CALENDAR); ++ const calendarID = ToString(calendar); ++ if (showCalendar === 'always' || calendarID !== 'iso8601') { ++ const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY)); ++ resultString += `-${day}`; ++ } ++ const calendarString = FormatCalendarAnnotation(calendarID, showCalendar); ++ if (calendarString) ++ resultString += calendarString; ++ return resultString; ++} ++function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) { ++ let instant = GetSlot(zdt, INSTANT); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ instant = new TemporalInstant(ns); ++ } ++ const tz = GetSlot(zdt, TIME_ZONE); ++ const iso = GetISO8601Calendar(); ++ const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso); ++ const year = ISOYearString(GetSlot(dateTime, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY)); ++ const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR)); ++ const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE)); ++ const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision); ++ let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`; ++ if (showOffset !== 'never') { ++ const offsetNs = GetOffsetNanosecondsFor(tz, instant); ++ result += FormatISOTimeZoneOffsetString(offsetNs); ++ } ++ if (showTimeZone !== 'never') ++ result += `[${tz}]`; ++ const calendarID = ToString(GetSlot(zdt, CALENDAR)); ++ result += FormatCalendarAnnotation(calendarID, showCalendar); ++ return result; ++} ++function TestTimeZoneOffsetString(string) { ++ return OFFSET.test(StringCtor(string)); ++} ++function ParseTimeZoneOffsetString(string) { ++ const match = OFFSET.exec(StringCtor(string)); ++ if (!match) { ++ throw new RangeError(`invalid time zone offset: ${string}`); ++ } ++ const sign = match[1] === '-' || match[1] === '\u2212' ? -1 : +1; ++ const hours = +match[2]; ++ const minutes = +(match[3] || 0); ++ const seconds = +(match[4] || 0); ++ const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9); ++ return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds); ++} ++function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) { ++ if (TestTimeZoneOffsetString(timeZoneIdentifier)) { ++ const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier); ++ return FormatTimeZoneOffsetString(offsetNs); ++ } ++ const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier)); ++ return formatter.resolvedOptions().timeZone; ++} ++function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) { ++ const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id); ++ const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (utc === null) ++ throw new RangeError('Date outside of supported range'); ++ return JSBI__default["default"].toNumber(JSBI__default["default"].subtract(utc, epochNanoseconds)); ++} ++function FormatTimeZoneOffsetString(offsetNanosecondsParam) { ++ const sign = offsetNanosecondsParam < 0 ? '-' : '+'; ++ const offsetNanoseconds = MathAbs$1(offsetNanosecondsParam); ++ const nanoseconds = offsetNanoseconds % 1e9; ++ const seconds = MathFloor$1(offsetNanoseconds / 1e9) % 60; ++ const minutes = MathFloor$1(offsetNanoseconds / 60e9) % 60; ++ const hours = MathFloor$1(offsetNanoseconds / 3600e9); ++ const hourString = ISODateTimePartString(hours); ++ const minuteString = ISODateTimePartString(minutes); ++ const secondString = ISODateTimePartString(seconds); ++ let post = ''; ++ if (nanoseconds) { ++ let fraction = `${nanoseconds}`.padStart(9, '0'); ++ while (fraction[fraction.length - 1] === '0') ++ fraction = fraction.slice(0, -1); ++ post = `:${secondString}.${fraction}`; ++ } ++ else if (seconds) { ++ post = `:${secondString}`; ++ } ++ return `${sign}${hourString}:${minuteString}${post}`; ++} ++function FormatISOTimeZoneOffsetString(offsetNanosecondsParam) { ++ let offsetNanoseconds = JSBI__default["default"].toNumber(RoundNumberToIncrement(JSBI__default["default"].BigInt(offsetNanosecondsParam), 60e9, 'halfExpand')); ++ const sign = offsetNanoseconds < 0 ? '-' : '+'; ++ offsetNanoseconds = MathAbs$1(offsetNanoseconds); ++ const minutes = (offsetNanoseconds / 60e9) % 60; ++ const hours = MathFloor$1(offsetNanoseconds / 3600e9); ++ const hourString = ISODateTimePartString(hours); ++ const minuteString = ISODateTimePartString(minutes); ++ return `${sign}${hourString}:${minuteString}`; ++} ++function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ // Note: Date.UTC() interprets one and two-digit years as being in the ++ // 20th century, so don't use it ++ const legacyDate = new Date(); ++ legacyDate.setUTCHours(hour, minute, second, millisecond); ++ legacyDate.setUTCFullYear(year, month - 1, day); ++ const ms = legacyDate.getTime(); ++ if (NumberIsNaN(ms)) ++ return null; ++ let ns = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(ms), MILLION); ++ ns = JSBI__default["default"].add(ns, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(microsecond), THOUSAND)); ++ ns = JSBI__default["default"].add(ns, JSBI__default["default"].BigInt(nanosecond)); ++ if (JSBI__default["default"].lessThan(ns, NS_MIN) || JSBI__default["default"].greaterThan(ns, NS_MAX)) ++ return null; ++ return ns; ++} ++function GetISOPartsFromEpoch(epochNanoseconds) { ++ const { quotient, remainder } = divmod(epochNanoseconds, MILLION); ++ let epochMilliseconds = JSBI__default["default"].toNumber(quotient); ++ let nanos = JSBI__default["default"].toNumber(remainder); ++ if (nanos < 0) { ++ nanos += 1e6; ++ epochMilliseconds -= 1; ++ } ++ const microsecond = MathFloor$1(nanos / 1e3) % 1e3; ++ const nanosecond = nanos % 1e3; ++ const item = new Date(epochMilliseconds); ++ const year = item.getUTCFullYear(); ++ const month = item.getUTCMonth() + 1; ++ const day = item.getUTCDate(); ++ const hour = item.getUTCHours(); ++ const minute = item.getUTCMinutes(); ++ const second = item.getUTCSeconds(); ++ const millisecond = item.getUTCMilliseconds(); ++ return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++// ts-prune-ignore-next TODO: remove this after tests are converted to TS ++function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) { ++ const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds); ++ const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds); ++ return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function maxJSBI(one, two) { ++ return JSBI__default["default"].lessThan(one, two) ? two : one; ++} ++/** ++ * Our best guess at how far in advance new rules will be put into the TZDB for ++ * future offset transitions. We'll pick 10 years but can always revise it if ++ * we find that countries are being unusually proactive in their announcing ++ * of offset changes. ++ */ ++function afterLatestPossibleTzdbRuleChange() { ++ return JSBI__default["default"].add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS); ++} ++function GetIANATimeZoneNextTransition(epochNanoseconds, id) { ++ // Decide how far in the future after `epochNanoseconds` we'll look for an ++ // offset change. There are two cases: ++ // 1. If it's a past date (or a date in the near future) then it's possible ++ // that the time zone may have newly added DST in the next few years. So ++ // we'll have to look from the provided time until a few years after the ++ // current system time. (Changes to DST policy are usually announced a few ++ // years in the future.) Note that the first DST anywhere started in 1847, ++ // so we'll start checks in 1847 instead of wasting cycles on years where ++ // there will never be transitions. ++ // 2. If it's a future date beyond the next few years, then we'll just assume ++ // that the latest DST policy in TZDB will still be in effect. In this ++ // case, we only need to look one year in the future to see if there are ++ // any DST transitions. We actually only need to look 9-10 months because ++ // DST has two transitions per year, but we'll use a year just to be safe. ++ const oneYearLater = JSBI__default["default"].add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS); ++ const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater); ++ // The first transition (in any timezone) recorded in the TZDB was in 1847, so ++ // start there if an earlier date is supplied. ++ let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds); ++ const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id); ++ let rightNanos = leftNanos; ++ let rightOffsetNs = leftOffsetNs; ++ while (leftOffsetNs === rightOffsetNs && JSBI__default["default"].lessThan(JSBI__default["default"].BigInt(leftNanos), uppercap)) { ++ rightNanos = JSBI__default["default"].add(leftNanos, TWO_WEEKS_NANOS); ++ rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id); ++ if (leftOffsetNs === rightOffsetNs) { ++ leftNanos = rightNanos; ++ } ++ } ++ if (leftOffsetNs === rightOffsetNs) ++ return null; ++ const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs); ++ return result; ++} ++function GetIANATimeZonePreviousTransition(epochNanoseconds, id) { ++ // If a time zone uses DST (at the time of `epochNanoseconds`), then we only ++ // have to look back one year to find a transition. But if it doesn't use DST, ++ // then we need to look all the way back to 1847 (the earliest rule in the ++ // TZDB) to see if it had other offset transitions in the past. Looping back ++ // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is ++ // also unnecessary because DST rules aren't put into the TZDB more than a few ++ // years in the future because the political changes in time zones happen with ++ // only a few years' warning. Therefore, if a far-future date is provided, ++ // then we'll run the check in two parts: ++ // 1. First, we'll look back for up to one year to see if the latest TZDB ++ // rules have DST. ++ // 2. If not, then we'll "fast-reverse" back to a few years later than the ++ // current system time, and then look back to 1847. This reduces the ++ // worst-case loop from 273K years to 175 years, for a ~1500x improvement ++ // in worst-case perf. ++ const afterLatestRule = afterLatestPossibleTzdbRuleChange(); ++ const isFarFuture = JSBI__default["default"].greaterThan(epochNanoseconds, afterLatestRule); ++ const lowercap = isFarFuture ? JSBI__default["default"].subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION; ++ let rightNanos = JSBI__default["default"].subtract(epochNanoseconds, ONE); ++ const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id); ++ let leftNanos = rightNanos; ++ let leftOffsetNs = rightOffsetNs; ++ while (rightOffsetNs === leftOffsetNs && JSBI__default["default"].greaterThan(rightNanos, lowercap)) { ++ leftNanos = JSBI__default["default"].subtract(rightNanos, TWO_WEEKS_NANOS); ++ leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id); ++ if (rightOffsetNs === leftOffsetNs) { ++ rightNanos = leftNanos; ++ } ++ } ++ if (rightOffsetNs === leftOffsetNs) { ++ if (isFarFuture) { ++ // There was no DST after looking back one year, which means that the most ++ // recent TZDB rules don't have any recurring transitions. To check for ++ // transitions in older rules, back up to a few years after the current ++ // date and then look all the way back to 1847. Note that we move back one ++ // day from the latest possible rule so that when the recursion runs it ++ // won't consider the new time to be "far future" because the system clock ++ // has advanced in the meantime. ++ const newTimeToCheck = JSBI__default["default"].subtract(afterLatestRule, DAY_NANOS); ++ return GetIANATimeZonePreviousTransition(newTimeToCheck, id); ++ } ++ return null; ++ } ++ const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs); ++ return result; ++} ++// ts-prune-ignore-next TODO: remove this after tests are converted to TS ++function parseFromEnUsFormat(datetime) { ++ const parts = datetime.split(/[^\w]+/); ++ if (parts.length !== 7) { ++ throw new RangeError(`expected 7 parts in "${datetime}`); ++ } ++ const month = +parts[0]; ++ const day = +parts[1]; ++ let year = +parts[2]; ++ const era = parts[3].toUpperCase(); ++ if (era === 'B' || era === 'BC') { ++ year = -year + 1; ++ } ++ else if (era !== 'A' && era !== 'AD') { ++ throw new RangeError(`Unknown era ${era} in "${datetime}`); ++ } ++ let hour = +parts[4]; ++ if (hour === 24) { ++ // bugs.chromium.org/p/chromium/issues/detail?id=1045791 ++ hour = 0; ++ } ++ const minute = +parts[5]; ++ const second = +parts[6]; ++ if (!NumberIsFinite(year) || ++ !NumberIsFinite(month) || ++ !NumberIsFinite(day) || ++ !NumberIsFinite(hour) || ++ !NumberIsFinite(minute) || ++ !NumberIsFinite(second)) { ++ throw new RangeError(`Invalid number in "${datetime}`); ++ } ++ return { year, month, day, hour, minute, second }; ++} ++// ts-prune-ignore-next TODO: remove this after tests are converted to TS ++function GetFormatterParts(timeZone, epochMilliseconds) { ++ const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone); ++ // Using `format` instead of `formatToParts` for compatibility with older clients ++ const datetime = formatter.format(new Date(epochMilliseconds)); ++ return parseFromEnUsFormat(datetime); ++} ++function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (ns === null) ++ throw new RangeError('DateTime outside of supported range'); ++ let nsEarlier = JSBI__default["default"].subtract(ns, DAY_NANOS); ++ if (JSBI__default["default"].lessThan(nsEarlier, NS_MIN)) ++ nsEarlier = ns; ++ let nsLater = JSBI__default["default"].add(ns, DAY_NANOS); ++ if (JSBI__default["default"].greaterThan(nsLater, NS_MAX)) ++ nsLater = ns; ++ const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id); ++ const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id); ++ const found = earliest === latest ? [earliest] : [earliest, latest]; ++ return found ++ .map((offsetNanoseconds) => { ++ const epochNanoseconds = JSBI__default["default"].subtract(ns, JSBI__default["default"].BigInt(offsetNanoseconds)); ++ const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id); ++ if (year !== parts.year || ++ month !== parts.month || ++ day !== parts.day || ++ hour !== parts.hour || ++ minute !== parts.minute || ++ second !== parts.second || ++ millisecond !== parts.millisecond || ++ microsecond !== parts.microsecond || ++ nanosecond !== parts.nanosecond) { ++ return undefined; ++ } ++ return epochNanoseconds; ++ }) ++ .filter((x) => x !== undefined); ++} ++function LeapYear(year) { ++ if (undefined === year) ++ return false; ++ const isDiv4 = year % 4 === 0; ++ const isDiv100 = year % 100 === 0; ++ const isDiv400 = year % 400 === 0; ++ return isDiv4 && (!isDiv100 || isDiv400); ++} ++function ISODaysInMonth(year, month) { ++ const DoM = { ++ standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], ++ leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ++ }; ++ return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1]; ++} ++function DayOfWeek(year, month, day) { ++ const m = month + (month < 3 ? 10 : -2); ++ const Y = year - (month < 3 ? 1 : 0); ++ const c = MathFloor$1(Y / 100); ++ const y = Y - c * 100; ++ const d = day; ++ const pD = d; ++ const pM = MathFloor$1(2.6 * m - 0.2); ++ const pY = y + MathFloor$1(y / 4); ++ const pC = MathFloor$1(c / 4) - 2 * c; ++ const dow = (pD + pM + pY + pC) % 7; ++ return dow + (dow <= 0 ? 7 : 0); ++} ++function DayOfYear(year, month, day) { ++ let days = day; ++ for (let m = month - 1; m > 0; m--) { ++ days += ISODaysInMonth(year, m); ++ } ++ return days; ++} ++function WeekOfYear(year, month, day) { ++ const doy = DayOfYear(year, month, day); ++ const dow = DayOfWeek(year, month, day) || 7; ++ const doj = DayOfWeek(year, 1, 1); ++ const week = MathFloor$1((doy - dow + 10) / 7); ++ if (week < 1) { ++ if (doj === 5 || (doj === 6 && LeapYear(year - 1))) { ++ return 53; ++ } ++ else { ++ return 52; ++ } ++ } ++ if (week === 53) { ++ if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) { ++ return 1; ++ } ++ } ++ return week; ++} ++function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) { ++ for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) { ++ if (prop !== 0) ++ return prop < 0 ? -1 : 1; ++ } ++ return 0; ++} ++function BalanceISOYearMonth(yearParam, monthParam) { ++ let year = yearParam; ++ let month = monthParam; ++ if (!NumberIsFinite(year) || !NumberIsFinite(month)) ++ throw new RangeError('infinity is out of range'); ++ month -= 1; ++ year += MathFloor$1(month / 12); ++ month %= 12; ++ if (month < 0) ++ month += 12; ++ month += 1; ++ return { year, month }; ++} ++function BalanceISODate(yearParam, monthParam, dayParam) { ++ let year = yearParam; ++ let month = monthParam; ++ let day = dayParam; ++ if (!NumberIsFinite(day)) ++ throw new RangeError('infinity is out of range'); ++ ({ year, month } = BalanceISOYearMonth(year, month)); ++ let daysInYear = 0; ++ let testYear = month > 2 ? year : year - 1; ++ while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) { ++ year -= 1; ++ testYear -= 1; ++ day += daysInYear; ++ } ++ testYear += 1; ++ while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) { ++ year += 1; ++ testYear += 1; ++ day -= daysInYear; ++ } ++ while (day < 1) { ++ ({ year, month } = BalanceISOYearMonth(year, month - 1)); ++ day += ISODaysInMonth(year, month); ++ } ++ while (day > ISODaysInMonth(year, month)) { ++ day -= ISODaysInMonth(year, month); ++ ({ year, month } = BalanceISOYearMonth(year, month + 1)); ++ } ++ return { year, month, day }; ++} ++function BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam); ++ const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays); ++ return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ let hour = hourParam; ++ let minute = minuteParam; ++ let second = secondParam; ++ let millisecond = millisecondParam; ++ let microsecond = microsecondParam; ++ let nanosecond = nanosecondParam; ++ if (!NumberIsFinite(hour) || ++ !NumberIsFinite(minute) || ++ !NumberIsFinite(second) || ++ !NumberIsFinite(millisecond) || ++ !NumberIsFinite(microsecond) || ++ !NumberIsFinite(nanosecond)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ microsecond += MathFloor$1(nanosecond / 1000); ++ nanosecond = NonNegativeModulo(nanosecond, 1000); ++ millisecond += MathFloor$1(microsecond / 1000); ++ microsecond = NonNegativeModulo(microsecond, 1000); ++ second += MathFloor$1(millisecond / 1000); ++ millisecond = NonNegativeModulo(millisecond, 1000); ++ minute += MathFloor$1(second / 60); ++ second = NonNegativeModulo(second, 60); ++ hour += MathFloor$1(minute / 60); ++ minute = NonNegativeModulo(minute, 60); ++ const deltaDays = MathFloor$1(hour / 24); ++ hour = NonNegativeModulo(hour, 24); ++ return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) { ++ const days = JSBI__default["default"].BigInt(daysParam); ++ let nanoseconds = JSBI__default["default"].BigInt(nanosecondsParam); ++ if (daysParam !== 0) ++ nanoseconds = JSBI__default["default"].subtract(JSBI__default["default"].BigInt(nanosecondsParam), JSBI__default["default"].BigInt(offsetShift)); ++ const hours = JSBI__default["default"].add(JSBI__default["default"].BigInt(hoursParam), JSBI__default["default"].multiply(days, JSBI__default["default"].BigInt(24))); ++ const minutes = JSBI__default["default"].add(JSBI__default["default"].BigInt(minutesParam), JSBI__default["default"].multiply(hours, SIXTY)); ++ const seconds = JSBI__default["default"].add(JSBI__default["default"].BigInt(secondsParam), JSBI__default["default"].multiply(minutes, SIXTY)); ++ const milliseconds = JSBI__default["default"].add(JSBI__default["default"].BigInt(millisecondsParam), JSBI__default["default"].multiply(seconds, THOUSAND)); ++ const microseconds = JSBI__default["default"].add(JSBI__default["default"].BigInt(microsecondsParam), JSBI__default["default"].multiply(milliseconds, THOUSAND)); ++ return JSBI__default["default"].add(JSBI__default["default"].BigInt(nanoseconds), JSBI__default["default"].multiply(microseconds, THOUSAND)); ++} ++function NanosecondsToDays(nanosecondsParam, relativeTo) { ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const sign = MathSign(JSBI__default["default"].toNumber(nanosecondsParam)); ++ let nanoseconds = JSBI__default["default"].BigInt(nanosecondsParam); ++ let dayLengthNs = 86400e9; ++ if (sign === 0) ++ return { days: 0, nanoseconds: ZERO, dayLengthNs }; ++ if (!IsTemporalZonedDateTime(relativeTo)) { ++ let days; ++ ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI__default["default"].BigInt(dayLengthNs))); ++ return { days: JSBI__default["default"].toNumber(days), nanoseconds, dayLengthNs }; ++ } ++ const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS); ++ const start = GetSlot(relativeTo, INSTANT); ++ const endNs = JSBI__default["default"].add(startNs, nanoseconds); ++ const end = new TemporalInstant(endNs); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ // Find the difference in days only. ++ const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar); ++ const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar); ++ let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate$2(null)); ++ let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0); ++ // may disambiguate ++ // If clock time after addition was in the middle of a skipped period, the ++ // endpoint was disambiguated to a later clock time. So it's possible that ++ // the resulting disambiguated result is later than endNs. If so, then back ++ // up one day and try again. Repeat if necessary (some transitions are ++ // > 24 hours) until either there's zero days left or the date duration is ++ // back inside the period where it belongs. Note that this case only can ++ // happen for positive durations because the only direction that ++ // `disambiguation: 'compatible'` can change clock time is forwards. ++ if (sign === 1) { ++ while (days > 0 && JSBI__default["default"].greaterThan(intermediateNs, endNs)) { ++ --days; ++ intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0); ++ // may do disambiguation ++ } ++ } ++ nanoseconds = JSBI__default["default"].subtract(endNs, intermediateNs); ++ let isOverflow = false; ++ let relativeInstant = new TemporalInstant(intermediateNs); ++ do { ++ // calculate length of the next day (day that contains the time remainder) ++ const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0); ++ const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS); ++ dayLengthNs = JSBI__default["default"].toNumber(JSBI__default["default"].subtract(oneDayFartherNs, relativeNs)); ++ isOverflow = JSBI__default["default"].greaterThan(JSBI__default["default"].multiply(JSBI__default["default"].subtract(nanoseconds, JSBI__default["default"].BigInt(dayLengthNs)), JSBI__default["default"].BigInt(sign)), ZERO); ++ if (isOverflow) { ++ nanoseconds = JSBI__default["default"].subtract(nanoseconds, JSBI__default["default"].BigInt(dayLengthNs)); ++ relativeInstant = new TemporalInstant(oneDayFartherNs); ++ days += sign; ++ } ++ } while (isOverflow); ++ return { days, nanoseconds, dayLengthNs: MathAbs$1(dayLengthNs) }; ++} ++function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) { ++ let days = daysParam; ++ let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt; ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam); ++ const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS); ++ nanosecondsBigInt = JSBI__default["default"].subtract(endNs, startNs); ++ } ++ else { ++ nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0); ++ } ++ if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') { ++ ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo)); ++ } ++ else { ++ days = 0; ++ } ++ const sign = JSBI__default["default"].lessThan(nanosecondsBigInt, ZERO) ? -1 : 1; ++ nanosecondsBigInt = abs(nanosecondsBigInt); ++ microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO; ++ switch (largestUnit) { ++ case 'year': ++ case 'month': ++ case 'week': ++ case 'day': ++ case 'hour': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND)); ++ ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY)); ++ ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY)); ++ break; ++ case 'minute': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND)); ++ ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY)); ++ break; ++ case 'second': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND)); ++ break; ++ case 'millisecond': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ break; ++ case 'microsecond': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ break; ++ case 'nanosecond': ++ break; ++ default: ++ throw new Error('assert not reached'); ++ } ++ const hours = JSBI__default["default"].toNumber(hoursBigInt) * sign; ++ const minutes = JSBI__default["default"].toNumber(minutesBigInt) * sign; ++ const seconds = JSBI__default["default"].toNumber(secondsBigInt) * sign; ++ const milliseconds = JSBI__default["default"].toNumber(millisecondsBigInt) * sign; ++ const microseconds = JSBI__default["default"].toNumber(microsecondsBigInt) * sign; ++ const nanoseconds = JSBI__default["default"].toNumber(nanosecondsBigInt) * sign; ++ return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ let calendar; ++ let relativeTo; ++ if (relativeToParam) { ++ relativeTo = ToTemporalDate(relativeToParam); ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ const oneYear = new TemporalDuration(sign); ++ const oneMonth = new TemporalDuration(0, sign); ++ const oneWeek = new TemporalDuration(0, 0, sign); ++ switch (largestUnit) { ++ case 'year': ++ // no-op ++ break; ++ case 'month': ++ { ++ if (!calendar) ++ throw new RangeError('a starting point is required for months balancing'); ++ // balance years down to months ++ const dateAdd = calendar.dateAdd; ++ const dateUntil = calendar.dateUntil; ++ let relativeToDateOnly = relativeTo; ++ while (MathAbs$1(years) > 0) { ++ const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd); ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil); ++ const oneYearMonths = GetSlot(untilResult, MONTHS); ++ relativeToDateOnly = newRelativeTo; ++ months += oneYearMonths; ++ years -= sign; ++ } ++ } ++ break; ++ case 'week': ++ if (!calendar) ++ throw new RangeError('a starting point is required for weeks balancing'); ++ // balance years down to days ++ while (MathAbs$1(years) > 0) { ++ let oneYearDays; ++ ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ days += oneYearDays; ++ years -= sign; ++ } ++ // balance months down to days ++ while (MathAbs$1(months) > 0) { ++ let oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ days += oneMonthDays; ++ months -= sign; ++ } ++ break; ++ default: ++ // balance years down to days ++ while (MathAbs$1(years) > 0) { ++ if (!calendar) ++ throw new RangeError('a starting point is required for balancing calendar units'); ++ let oneYearDays; ++ ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ days += oneYearDays; ++ years -= sign; ++ } ++ // balance months down to days ++ while (MathAbs$1(months) > 0) { ++ if (!calendar) ++ throw new RangeError('a starting point is required for balancing calendar units'); ++ let oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ days += oneMonthDays; ++ months -= sign; ++ } ++ // balance weeks down to days ++ while (MathAbs$1(weeks) > 0) { ++ if (!calendar) ++ throw new RangeError('a starting point is required for balancing calendar units'); ++ let oneWeekDays; ++ ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ days += oneWeekDays; ++ weeks -= sign; ++ } ++ break; ++ } ++ return { years, months, weeks, days }; ++} ++function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ if (sign === 0) ++ return { years, months, weeks, days }; ++ let calendar; ++ let relativeTo; ++ if (relativeToParam) { ++ relativeTo = ToTemporalDate(relativeToParam); ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ const oneYear = new TemporalDuration(sign); ++ const oneMonth = new TemporalDuration(0, sign); ++ const oneWeek = new TemporalDuration(0, 0, sign); ++ switch (largestUnit) { ++ case 'year': { ++ if (!calendar) ++ throw new RangeError('a starting point is required for years balancing'); ++ // balance days up to years ++ let newRelativeTo, oneYearDays; ++ ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ while (MathAbs$1(days) >= MathAbs$1(oneYearDays)) { ++ days -= oneYearDays; ++ years += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ } ++ // balance days up to months ++ let oneMonthDays; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ days -= oneMonthDays; ++ months += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ } ++ // balance months up to years ++ const dateAdd = calendar.dateAdd; ++ newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd); ++ const dateUntil = calendar.dateUntil; ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil); ++ let oneYearMonths = GetSlot(untilResult, MONTHS); ++ while (MathAbs$1(months) >= MathAbs$1(oneYearMonths)) { ++ months -= oneYearMonths; ++ years += sign; ++ relativeTo = newRelativeTo; ++ newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd); ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil); ++ oneYearMonths = GetSlot(untilResult, MONTHS); ++ } ++ break; ++ } ++ case 'month': { ++ if (!calendar) ++ throw new RangeError('a starting point is required for months balancing'); ++ // balance days up to months ++ let newRelativeTo, oneMonthDays; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ days -= oneMonthDays; ++ months += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ } ++ break; ++ } ++ case 'week': { ++ if (!calendar) ++ throw new RangeError('a starting point is required for weeks balancing'); ++ // balance days up to weeks ++ let newRelativeTo, oneWeekDays; ++ ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ while (MathAbs$1(days) >= MathAbs$1(oneWeekDays)) { ++ days -= oneWeekDays; ++ weeks += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ } ++ break; ++ } ++ } ++ return { years, months, weeks, days }; ++} ++function CalculateOffsetShift(relativeTo, y, mon, w, d) { ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ const instant = GetSlot(relativeTo, INSTANT); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant); ++ const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const instantAfter = new TemporalInstant(after); ++ const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter); ++ return offsetAfter - offsetBefore; ++ } ++ return 0; ++} ++function CreateNegatedTemporalDuration(duration) { ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS)); ++} ++function ConstrainToRange(value, min, max) { ++ // Math.Max accepts undefined values and returns NaN. Undefined values are ++ // used for optional params in the method below. ++ return MathMin(max, MathMax(min, value)); ++} ++function ConstrainISODate(year, monthParam, dayParam) { ++ const month = ConstrainToRange(monthParam, 1, 12); ++ const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month)); ++ return { year, month, day }; ++} ++function ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ const hour = ConstrainToRange(hourParam, 0, 23); ++ const minute = ConstrainToRange(minuteParam, 0, 59); ++ const second = ConstrainToRange(secondParam, 0, 59); ++ const millisecond = ConstrainToRange(millisecondParam, 0, 999); ++ const microsecond = ConstrainToRange(microsecondParam, 0, 999); ++ const nanosecond = ConstrainToRange(nanosecondParam, 0, 999); ++ return { hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function RejectToRange(value, min, max) { ++ if (value < min || value > max) ++ throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`); ++} ++function RejectISODate(year, month, day) { ++ RejectToRange(month, 1, 12); ++ RejectToRange(day, 1, ISODaysInMonth(year, month)); ++} ++function RejectDateRange(year, month, day) { ++ // Noon avoids trouble at edges of DateTime range (excludes midnight) ++ RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0); ++} ++function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectToRange(hour, 0, 23); ++ RejectToRange(minute, 0, 59); ++ RejectToRange(second, 0, 59); ++ RejectToRange(millisecond, 0, 999); ++ RejectToRange(microsecond, 0, 999); ++ RejectToRange(nanosecond, 0, 999); ++} ++function RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectISODate(year, month, day); ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectToRange(year, YEAR_MIN, YEAR_MAX); ++ // Reject any DateTime 24 hours or more outside the Instant range ++ if ((year === YEAR_MIN && ++ null == ++ GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) || ++ (year === YEAR_MAX && ++ null == ++ GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) { ++ throw new RangeError('DateTime outside of supported range'); ++ } ++} ++function ValidateEpochNanoseconds(epochNanoseconds) { ++ if (JSBI__default["default"].lessThan(epochNanoseconds, NS_MIN) || JSBI__default["default"].greaterThan(epochNanoseconds, NS_MAX)) { ++ throw new RangeError('Instant outside of supported range'); ++ } ++} ++function RejectYearMonthRange(year, month) { ++ RejectToRange(year, YEAR_MIN, YEAR_MAX); ++ if (year === YEAR_MIN) { ++ RejectToRange(month, 4, 12); ++ } ++ else if (year === YEAR_MAX) { ++ RejectToRange(month, 1, 9); ++ } ++} ++function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) { ++ const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns); ++ for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) { ++ if (!NumberIsFinite(prop)) ++ throw new RangeError('infinite values not allowed as duration fields'); ++ const propSign = MathSign(prop); ++ if (propSign !== 0 && propSign !== sign) ++ throw new RangeError('mixed-sign values not allowed as duration fields'); ++ } ++} ++function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) { ++ switch (largestUnit) { ++ case 'year': ++ case 'month': { ++ const sign = -CompareISODate(y1, m1, d1, y2, m2, d2); ++ if (sign === 0) ++ return { years: 0, months: 0, weeks: 0, days: 0 }; ++ const start = { year: y1, month: m1, day: d1 }; ++ const end = { year: y2, month: m2, day: d2 }; ++ let years = end.year - start.year; ++ let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain'); ++ let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2); ++ if (midSign === 0) { ++ return largestUnit === 'year' ++ ? { years, months: 0, weeks: 0, days: 0 } ++ : { years: 0, months: years * 12, weeks: 0, days: 0 }; ++ } ++ let months = end.month - start.month; ++ if (midSign !== sign) { ++ years -= sign; ++ months += sign * 12; ++ } ++ mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain'); ++ midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2); ++ if (midSign === 0) { ++ return largestUnit === 'year' ++ ? { years, months, weeks: 0, days: 0 } ++ : { years: 0, months: months + years * 12, weeks: 0, days: 0 }; ++ } ++ if (midSign !== sign) { ++ // The end date is later in the month than mid date (or earlier for ++ // negative durations). Back up one month. ++ months -= sign; ++ if (months === -sign) { ++ years -= sign; ++ months = 11 * sign; ++ } ++ mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain'); ++ } ++ let days = 0; ++ // If we get here, months and years are correct (no overflow), and `mid` ++ // is within the range from `start` to `end`. To count the days between ++ // `mid` and `end`, there are 3 cases: ++ // 1) same month: use simple subtraction ++ // 2) end is previous month from intermediate (negative duration) ++ // 3) end is next month from intermediate (positive duration) ++ if (mid.month === end.month) { ++ // 1) same month: use simple subtraction ++ days = end.day - mid.day; ++ } ++ else if (sign < 0) { ++ // 2) end is previous month from intermediate (negative duration) ++ // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2 ++ days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day); ++ } ++ else { ++ // 3) end is next month from intermediate (positive duration) ++ // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3 ++ days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day); ++ } ++ if (largestUnit === 'month') { ++ months += years * 12; ++ years = 0; ++ } ++ return { years, months, weeks: 0, days }; ++ } ++ case 'week': ++ case 'day': { ++ let larger, smaller, sign; ++ if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) { ++ smaller = { year: y1, month: m1, day: d1 }; ++ larger = { year: y2, month: m2, day: d2 }; ++ sign = 1; ++ } ++ else { ++ smaller = { year: y2, month: m2, day: d2 }; ++ larger = { year: y1, month: m1, day: d1 }; ++ sign = -1; ++ } ++ let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day); ++ for (let year = smaller.year; year < larger.year; ++year) { ++ days += LeapYear(year) ? 366 : 365; ++ } ++ let weeks = 0; ++ if (largestUnit === 'week') { ++ weeks = MathFloor$1(days / 7); ++ days %= 7; ++ } ++ weeks *= sign; ++ days *= sign; ++ return { years: 0, months: 0, weeks, days }; ++ } ++ default: ++ throw new Error('assert not reached'); ++ } ++} ++function DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) { ++ let hours = h2 - h1; ++ let minutes = min2 - min1; ++ let seconds = s2 - s1; ++ let milliseconds = ms2 - ms1; ++ let microseconds = µs2 - µs1; ++ let nanoseconds = ns2 - ns1; ++ const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ hours *= sign; ++ minutes *= sign; ++ seconds *= sign; ++ milliseconds *= sign; ++ microseconds *= sign; ++ nanoseconds *= sign; ++ let deltaDays = 0; ++ ({ ++ deltaDays, ++ hour: hours, ++ minute: minutes, ++ second: seconds, ++ millisecond: milliseconds, ++ microsecond: microseconds, ++ nanosecond: nanoseconds ++ } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds)); ++ if (deltaDays != 0) ++ throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0'); ++ hours *= sign; ++ minutes *= sign; ++ seconds *= sign; ++ milliseconds *= sign; ++ microseconds *= sign; ++ nanoseconds *= sign; ++ return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function DifferenceInstant(ns1, ns2, increment, unit, roundingMode) { ++ const diff = JSBI__default["default"].subtract(ns2, ns1); ++ const remainder = JSBI__default["default"].remainder(diff, JSBI__default["default"].BigInt(86400e9)); ++ const wholeDays = JSBI__default["default"].subtract(diff, remainder); ++ const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode); ++ const roundedDiff = JSBI__default["default"].add(wholeDays, roundedRemainder); ++ const nanoseconds = JSBI__default["default"].toNumber(JSBI__default["default"].remainder(roundedDiff, THOUSAND)); ++ const microseconds = JSBI__default["default"].toNumber(JSBI__default["default"].remainder(JSBI__default["default"].divide(roundedDiff, THOUSAND), THOUSAND)); ++ const milliseconds = JSBI__default["default"].toNumber(JSBI__default["default"].remainder(JSBI__default["default"].divide(roundedDiff, MILLION), THOUSAND)); ++ const seconds = JSBI__default["default"].toNumber(JSBI__default["default"].divide(roundedDiff, BILLION)); ++ return { seconds, milliseconds, microseconds, nanoseconds }; ++} ++function DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) { ++ let y1 = y1Param; ++ let mon1 = mon1Param; ++ let d1 = d1Param; ++ let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2); ++ const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1); ++ if (dateSign === -timeSign) { ++ ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ } ++ const date1 = CreateTemporalDate(y1, mon1, d1, calendar); ++ const date2 = CreateTemporalDate(y2, mon2, d2, calendar); ++ const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit); ++ const untilOptions = MergeLargestUnitOption(options, dateLargestUnit); ++ // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped? ++ // Type 'SmallestUnit | undefined' is not assignable to type ++ // 'SmallestUnit<"year" | "month" | "day" | "week"> | undefined'. ++ // Type '"hour"' is not assignable to type ++ // 'SmallestUnit<"year" | "month" | "day" | "week"> | undefined'.ts(2345) ++ let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions); ++ // Signs of date part and time part may not agree; balance them together ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) { ++ const nsDiff = JSBI__default["default"].subtract(ns2, ns1); ++ if (JSBI__default["default"].equal(nsDiff, ZERO)) { ++ return { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0, ++ hours: 0, ++ minutes: 0, ++ seconds: 0, ++ milliseconds: 0, ++ microseconds: 0, ++ nanoseconds: 0 ++ }; ++ } ++ // Find the difference in dates only. ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const start = new TemporalInstant(ns1); ++ const end = new TemporalInstant(ns2); ++ const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar); ++ const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar); ++ let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options); ++ const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0); ++ // may disambiguate ++ let timeRemainderNs = JSBI__default["default"].subtract(ns2, intermediateNs); ++ const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar); ++ ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate)); ++ // Finally, merge the date and time durations and return the merged result. ++ const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI__default["default"].toNumber(timeRemainderNs), 'hour'); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++// TODO: does it make sense to explicitly union the other and options types for each operation? ++function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) { ++ const other = ToTemporalInstant(otherParam); ++ let first, second; ++ if (operation === 'until') { ++ [first, second] = [instant, other]; ++ } ++ else { ++ [first, second] = [other, instant]; ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ const MAX_DIFFERENCE_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false); ++ const onens = GetSlot(first, EPOCHNANOSECONDS); ++ const twons = GetSlot(second, EPOCHNANOSECONDS); ++ let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode); ++ let hours, minutes; ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++} ++function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalDate(otherParam); ++ const calendar = GetSlot(plainDate, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarId = ToString(calendar); ++ const otherCalendarId = ToString(otherCalendar); ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false); ++ const untilOptions = MergeLargestUnitOption(options, largestUnit); ++ let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions); ++ if (smallestUnit !== 'day' || roundingIncrement !== 1) { ++ ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate)); ++ } ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0); ++} ++function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalDateTime(otherParam); ++ const calendar = GetSlot(plainDateTime, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarId = ToString(calendar); ++ const otherCalendarId = ToString(otherCalendar); ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options); ++ const relativeTo = TemporalDateTimeToDate(plainDateTime); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo)); ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++} ++function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalTime(otherParam); ++ const options = GetOptionsObject(optionsParam); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = 'hour'; ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond'); ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const MAX_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false); ++ let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++} ++function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalYearMonth(otherParam); ++ const calendar = GetSlot(yearMonth, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarID = ToString(calendar); ++ const otherCalendarID = ToString(otherCalendar); ++ if (calendarID !== otherCalendarID) { ++ throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => { ++ if (c === 'date' && s !== 'week' && s !== 'day') ++ allowed.push(s, p); ++ return allowed; ++ }, []); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month'); ++ if (smallestUnit === 'week' || smallestUnit === 'day') { ++ throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`); ++ } ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'week' || largestUnit === 'day') { ++ throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`); ++ } ++ if (largestUnit === 'auto') ++ largestUnit = 'year'; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const otherFields = PrepareTemporalFields(other, fieldNames, []); ++ otherFields.day = 1; ++ const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []); ++ thisFields.day = 1; ++ // The calls to PrepareTemporalFields don't mark day as a required property, ++ // and TS doesn't automatically narrow the type of the object because of the ++ // assignments above, so we must "cast" the inputs. ++ const otherDate = CalendarDateFromFields(calendar, otherFields); ++ const thisDate = CalendarDateFromFields(calendar, thisFields); ++ const untilOptions = MergeLargestUnitOption(options, largestUnit); ++ let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions); ++ if (smallestUnit !== 'month' || roundingIncrement !== 1) { ++ ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate)); ++ } ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0); ++} ++function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalZonedDateTime(otherParam); ++ const calendar = GetSlot(zonedDateTime, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarId = ToString(calendar); ++ const otherCalendarId = ToString(otherCalendar); ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS); ++ const ns2 = GetSlot(other, EPOCHNANOSECONDS); ++ let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds; ++ if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') { ++ // The user is only asking for a time difference, so return difference of instants. ++ years = 0; ++ months = 0; ++ weeks = 0; ++ days = 0; ++ ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, ++ // TODO this doesn't type-check as it includes >= day-size units ++ // This is probably safe as the typing for ToSmallestTemporalUnit isn't ++ // very good. ++ smallestUnit, roundingMode)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ } ++ else { ++ const timeZone = GetSlot(zonedDateTime, TIME_ZONE); ++ if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) { ++ throw new RangeError("When calculating difference between time zones, largestUnit must be 'hours' " + ++ 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'); ++ } ++ const untilOptions = MergeLargestUnitOption(options, largestUnit); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime)); ++ } ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++} ++function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) { ++ let year = yearParam; ++ let month = monthParam; ++ let day = dayParam; ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ year += years; ++ month += months; ++ ({ year, month } = BalanceISOYearMonth(year, month)); ++ ({ year, month, day } = RegulateISODate(year, month, day, overflow)); ++ days += 7 * weeks; ++ day += days; ++ ({ year, month, day } = BalanceISODate(year, month, day)); ++ return { year, month, day }; ++} ++function AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) { ++ let hour = hourParam; ++ let minute = minuteParam; ++ let second = secondParam; ++ let millisecond = millisecondParam; ++ let microsecond = microsecondParam; ++ let nanosecond = nanosecondParam; ++ hour += hours; ++ minute += minutes; ++ second += seconds; ++ millisecond += milliseconds; ++ microsecond += microseconds; ++ nanosecond += nanoseconds; ++ let deltaDays = 0; ++ ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond)); ++ return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) { ++ const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1); ++ const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2); ++ const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2); ++ let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds; ++ if (!relativeTo) { ++ if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') { ++ throw new RangeError('relativeTo is required for years, months, or weeks arithmetic'); ++ } ++ years = months = weeks = 0; ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit)); ++ } ++ else if (IsTemporalDate(relativeTo)) { ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0); ++ const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0); ++ const dateAdd = calendar.dateAdd; ++ const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd); ++ const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd); ++ const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit); ++ const differenceOptions = ObjectCreate$2(null); ++ differenceOptions.largestUnit = dateLargestUnit; ++ ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions)); ++ // Signs of date part and time part may not agree; balance them together ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit)); ++ } ++ else { ++ // relativeTo is a ZonedDateTime ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1); ++ const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2); ++ if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') { ++ // The user is only asking for a time difference, so return difference of instants. ++ years = 0; ++ months = 0; ++ weeks = 0; ++ days = 0; ++ ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand')); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ } ++ else { ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate$2(null))); ++ } ++ } ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) { ++ let sum = ZERO; ++ sum = JSBI__default["default"].add(sum, JSBI__default["default"].BigInt(ns)); ++ sum = JSBI__default["default"].add(sum, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(µs), THOUSAND)); ++ sum = JSBI__default["default"].add(sum, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(ms), MILLION)); ++ sum = JSBI__default["default"].add(sum, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(s), BILLION)); ++ sum = JSBI__default["default"].add(sum, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(min), JSBI__default["default"].BigInt(60 * 1e9))); ++ sum = JSBI__default["default"].add(sum, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(h), JSBI__default["default"].BigInt(60 * 60 * 1e9))); ++ const result = JSBI__default["default"].add(epochNanoseconds, sum); ++ ValidateEpochNanoseconds(result); ++ return result; ++} ++function AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) { ++ let days = daysParam; ++ // Add the time part ++ let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ days += deltaDays; ++ // Delegate the date part addition to the calendar ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const datePart = CreateTemporalDate(year, month, day, calendar); ++ const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options); ++ return { ++ year: GetSlot(addedDate, ISO_YEAR), ++ month: GetSlot(addedDate, ISO_MONTH), ++ day: GetSlot(addedDate, ISO_DAY), ++ hour, ++ minute, ++ second, ++ millisecond, ++ microsecond, ++ nanosecond ++ }; ++} ++function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) { ++ // If only time is to be added, then use Instant math. It's not OK to fall ++ // through to the date/time code below because compatible disambiguation in ++ // the PlainDateTime=>Instant conversion will change the offset of any ++ // ZonedDateTime in the repeated clock time after a backwards transition. ++ // When adding/subtracting time units and not dates, this disambiguation is ++ // not expected and so is avoided below via a fast path for time-only ++ // arithmetic. ++ // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`. ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) { ++ return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns); ++ } ++ // RFC 5545 requires the date portion to be added in calendar days and the ++ // time portion to be added in exact time. ++ const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar); ++ const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar); ++ const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options); ++ const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar); ++ // Note that 'compatible' is used below because this disambiguation behavior ++ // is required by RFC 5545. ++ const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible'); ++ return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns); ++} ++function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other); ++ const options = GetOptionsObject(optionsParam); ++ const relativeTo = ToRelativeTemporalObject(options); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++} ++function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [ ++ 'years', ++ 'months', ++ 'weeks', ++ 'days' ++ ]); ++ const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ return new Instant(ns); ++} ++function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike); ++ const options = GetOptionsObject(optionsParam); ++ const calendar = GetSlot(dateTime, CALENDAR); ++ const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++} ++function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike); ++ let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject')); ++ const PlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) { ++ let duration = ToTemporalDurationRecord(durationLike); ++ if (operation === 'subtract') { ++ duration = { ++ years: -duration.years, ++ months: -duration.months, ++ weeks: -duration.weeks, ++ days: -duration.days, ++ hours: -duration.hours, ++ minutes: -duration.minutes, ++ seconds: -duration.seconds, ++ milliseconds: -duration.milliseconds, ++ microseconds: -duration.microseconds, ++ nanoseconds: -duration.nanoseconds ++ }; ++ } ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration; ++ ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day')); ++ const options = GetOptionsObject(optionsParam); ++ const calendar = GetSlot(yearMonth, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(yearMonth, fieldNames, []); ++ const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1; ++ // PrepareTemporalFields returns a type where 'day' is potentially undefined, ++ // and TS doesn't narrow the type as a result of the assignment above, so we ++ // cast the fields input to the new type. ++ const startDate = CalendarDateFromFields(calendar, fields); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const optionsCopy = ObjectAssign$2(ObjectCreate$2(null), options); ++ const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options); ++ const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy); ++} ++function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike); ++ const options = GetOptionsObject(optionsParam); ++ const timeZone = GetSlot(zonedDateTime, TIME_ZONE); ++ const calendar = GetSlot(zonedDateTime, CALENDAR); ++ const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++} ++function RoundNumberToIncrement(quantity, increment, mode) { ++ if (increment === 1) ++ return quantity; ++ let { quotient, remainder } = divmod(quantity, JSBI__default["default"].BigInt(increment)); ++ if (JSBI__default["default"].equal(remainder, ZERO)) ++ return quantity; ++ const sign = JSBI__default["default"].lessThan(remainder, ZERO) ? -1 : 1; ++ switch (mode) { ++ case 'ceil': ++ if (sign > 0) ++ quotient = JSBI__default["default"].add(quotient, JSBI__default["default"].BigInt(sign)); ++ break; ++ case 'floor': ++ if (sign < 0) ++ quotient = JSBI__default["default"].add(quotient, JSBI__default["default"].BigInt(sign)); ++ break; ++ case 'trunc': ++ // no change needed, because divmod is a truncation ++ break; ++ case 'halfExpand': ++ // "half up away from zero" ++ if (JSBI__default["default"].toNumber(abs(JSBI__default["default"].multiply(remainder, JSBI__default["default"].BigInt(2)))) >= increment) { ++ quotient = JSBI__default["default"].add(quotient, JSBI__default["default"].BigInt(sign)); ++ } ++ break; ++ } ++ return JSBI__default["default"].multiply(quotient, JSBI__default["default"].BigInt(increment)); ++} ++function RoundInstant(epochNs, increment, unit, roundingMode) { ++ // Note: NonNegativeModulo, but with BigInt ++ let remainder = JSBI__default["default"].remainder(epochNs, JSBI__default["default"].BigInt(86400e9)); ++ if (JSBI__default["default"].lessThan(remainder, ZERO)) ++ remainder = JSBI__default["default"].add(remainder, JSBI__default["default"].BigInt(86400e9)); ++ const wholeDays = JSBI__default["default"].subtract(epochNs, remainder); ++ const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode); ++ return JSBI__default["default"].add(wholeDays, roundedRemainder); ++} ++function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) { ++ const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs); ++ const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays); ++ return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) { ++ let quantity = ZERO; ++ switch (unit) { ++ case 'day': ++ case 'hour': ++ quantity = JSBI__default["default"].BigInt(hour); ++ // fall through ++ case 'minute': ++ quantity = JSBI__default["default"].add(JSBI__default["default"].multiply(quantity, SIXTY), JSBI__default["default"].BigInt(minute)); ++ // fall through ++ case 'second': ++ quantity = JSBI__default["default"].add(JSBI__default["default"].multiply(quantity, SIXTY), JSBI__default["default"].BigInt(second)); ++ // fall through ++ case 'millisecond': ++ quantity = JSBI__default["default"].add(JSBI__default["default"].multiply(quantity, THOUSAND), JSBI__default["default"].BigInt(millisecond)); ++ // fall through ++ case 'microsecond': ++ quantity = JSBI__default["default"].add(JSBI__default["default"].multiply(quantity, THOUSAND), JSBI__default["default"].BigInt(microsecond)); ++ // fall through ++ case 'nanosecond': ++ quantity = JSBI__default["default"].add(JSBI__default["default"].multiply(quantity, THOUSAND), JSBI__default["default"].BigInt(nanosecond)); ++ } ++ const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit]; ++ const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode); ++ const result = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, JSBI__default["default"].BigInt(nsPerUnit))); ++ switch (unit) { ++ case 'day': ++ return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 }; ++ case 'hour': ++ return BalanceTime(result, 0, 0, 0, 0, 0); ++ case 'minute': ++ return BalanceTime(hour, result, 0, 0, 0, 0); ++ case 'second': ++ return BalanceTime(hour, minute, result, 0, 0, 0); ++ case 'millisecond': ++ return BalanceTime(hour, minute, second, result, 0, 0); ++ case 'microsecond': ++ return BalanceTime(hour, minute, second, millisecond, result, 0); ++ case 'nanosecond': ++ return BalanceTime(hour, minute, second, millisecond, microsecond, result); ++ default: ++ throw new Error(`Invalid unit ${unit}`); ++ } ++} ++function DaysUntil(earlier, later) { ++ return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days; ++} ++function MoveRelativeDate(calendar, relativeToParam, duration) { ++ const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined); ++ const days = DaysUntil(relativeToParam, later); ++ return { relativeTo: later, days }; ++} ++function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) { ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar); ++} ++function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ let hours = hoursParam; ++ let minutes = minutesParam; ++ let seconds = secondsParam; ++ let milliseconds = millisecondsParam; ++ let microseconds = microsecondsParam; ++ let nanoseconds = nanosecondsParam; ++ if (!IsTemporalZonedDateTime(relativeTo) || ++ unit === 'year' || ++ unit === 'month' || ++ unit === 'week' || ++ unit === 'day' || ++ (unit === 'nanosecond' && increment === 1)) { ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++ } ++ // There's one more round of rounding possible: if relativeTo is a ++ // ZonedDateTime, the time units could have rounded up into enough hours ++ // to exceed the day length. If this happens, grow the date part by a ++ // single day and re-run exact time rounding on the smaller remainder. DO ++ // NOT RECURSE, because once the extra hours are sucked up into the date ++ // duration, there's no way for another full day to come from the next ++ // round of rounding. And if it were possible (e.g. contrived calendar ++ // with 30-minute-long "days") then it'd risk an infinite loop. ++ let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0); ++ const direction = MathSign(JSBI__default["default"].toNumber(timeRemainderNs)); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0); ++ const dayLengthNs = JSBI__default["default"].subtract(dayEnd, dayStart); ++ if (JSBI__default["default"].greaterThanOrEqual(JSBI__default["default"].multiply(JSBI__default["default"].subtract(timeRemainderNs, dayLengthNs), JSBI__default["default"].BigInt(direction)), ZERO)) { ++ ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo)); ++ timeRemainderNs = RoundInstant(JSBI__default["default"].subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI__default["default"].toNumber(timeRemainderNs), 'hour')); ++ } ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ let hours = hoursParam; ++ let minutes = minutesParam; ++ let seconds = secondsParam; ++ let milliseconds = millisecondsParam; ++ let microseconds = microsecondsParam; ++ let nanoseconds = JSBI__default["default"].BigInt(nanosecondsParam); ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ let calendar, zdtRelative; ++ // A cast is used below because relativeTo will be either PlainDate or ++ // undefined for the rest of this long method (after any ZDT=>PlainDate ++ // conversion below), and TS isn't smart enough to know that the type has ++ // changed. See https://github.com/microsoft/TypeScript/issues/27706. ++ let relativeTo = relativeToParam; ++ if (relativeTo) { ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ zdtRelative = relativeTo; ++ relativeTo = ToTemporalDate(relativeTo); ++ } ++ else if (!IsTemporalDate(relativeTo)) { ++ throw new TypeError('starting point must be PlainDate or ZonedDateTime'); ++ } ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ // First convert time units up to days, if rounding to days or higher units. ++ // If rounding relative to a ZonedDateTime, then some days may not be 24h. ++ // TS doesn't know that `dayLengthNs` is only used if the unit is day or ++ // larger. We'll cast away `undefined` when it's used lower down below. ++ let dayLengthNs; ++ if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') { ++ nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0); ++ let intermediate; ++ if (zdtRelative) { ++ intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days); ++ } ++ let deltaDays; ++ let dayLength; ++ ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate)); ++ dayLengthNs = JSBI__default["default"].BigInt(dayLength); ++ days += deltaDays; ++ hours = minutes = seconds = milliseconds = microseconds = 0; ++ } ++ let total; ++ switch (unit) { ++ case 'year': { ++ if (!calendar) ++ throw new RangeError('A starting point is required for years rounding'); ++ // convert months and weeks to days by calculating difference( ++ // relativeTo + years, relativeTo + { years, months, weeks }) ++ const yearsDuration = new TemporalDuration(years); ++ const dateAdd = calendar.dateAdd; ++ const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd); ++ const yearsMonthsWeeks = new TemporalDuration(years, months, weeks); ++ const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd); ++ const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater); ++ relativeTo = yearsLater; ++ days += monthsWeeksInDays; ++ const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd); ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'year'; ++ const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years; ++ years += yearsPassed; ++ const oldRelativeTo = relativeTo; ++ relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd); ++ const daysPassed = DaysUntil(oldRelativeTo, relativeTo); ++ days -= daysPassed; ++ const oneYear = new TemporalDuration(days < 0 ? -1 : 1); ++ let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear); ++ // Note that `nanoseconds` below (here and in similar code for months, ++ // weeks, and days further below) isn't actually nanoseconds for the ++ // full date range. Instead, it's a BigInt representation of total ++ // days multiplied by the number of nanoseconds in the last day of ++ // the duration. This lets us do days-or-larger rounding using BigInt ++ // math which reduces precision loss. ++ oneYearDays = MathAbs$1(oneYearDays); ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(oneYearDays), dayLengthNs); ++ nanoseconds = JSBI__default["default"].add( ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI__default["default"].add(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(years)), JSBI__default["default"].multiply(JSBI__default["default"].BigInt(days), dayLengthNs)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI__default["default"].toNumber(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(increment))), roundingMode); ++ total = JSBI__default["default"].toNumber(nanoseconds) / JSBI__default["default"].toNumber(divisor); ++ years = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ months = weeks = days = 0; ++ break; ++ } ++ case 'month': { ++ if (!calendar) ++ throw new RangeError('A starting point is required for months rounding'); ++ // convert weeks to days by calculating difference(relativeTo + ++ // { years, months }, relativeTo + { years, months, weeks }) ++ const yearsMonths = new TemporalDuration(years, months); ++ const dateAdd = calendar.dateAdd; ++ const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd); ++ const yearsMonthsWeeks = new TemporalDuration(years, months, weeks); ++ const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd); ++ const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater); ++ relativeTo = yearsMonthsLater; ++ days += weeksInDays; ++ // Months may be different lengths of days depending on the calendar, ++ // convert days to months in a loop as described above under 'years'. ++ const sign = MathSign(days); ++ const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1); ++ let oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ months += sign; ++ days -= oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ } ++ oneMonthDays = MathAbs$1(oneMonthDays); ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(oneMonthDays), dayLengthNs); ++ nanoseconds = JSBI__default["default"].add( ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI__default["default"].add(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(months)), JSBI__default["default"].multiply(JSBI__default["default"].BigInt(days), dayLengthNs)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI__default["default"].toNumber(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(increment))), roundingMode); ++ total = JSBI__default["default"].toNumber(nanoseconds) / JSBI__default["default"].toNumber(divisor); ++ months = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ weeks = days = 0; ++ break; ++ } ++ case 'week': { ++ if (!calendar) ++ throw new RangeError('A starting point is required for weeks rounding'); ++ // Weeks may be different lengths of days depending on the calendar, ++ // convert days to weeks in a loop as described above under 'years'. ++ const sign = MathSign(days); ++ const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1); ++ let oneWeekDays; ++ ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ while (MathAbs$1(days) >= MathAbs$1(oneWeekDays)) { ++ weeks += sign; ++ days -= oneWeekDays; ++ ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ } ++ oneWeekDays = MathAbs$1(oneWeekDays); ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(oneWeekDays), dayLengthNs); ++ nanoseconds = JSBI__default["default"].add( ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI__default["default"].add(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(weeks)), JSBI__default["default"].multiply(JSBI__default["default"].BigInt(days), dayLengthNs)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI__default["default"].toNumber(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(increment))), roundingMode); ++ total = JSBI__default["default"].toNumber(nanoseconds) / JSBI__default["default"].toNumber(divisor); ++ weeks = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ days = 0; ++ break; ++ } ++ case 'day': { ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = dayLengthNs; ++ nanoseconds = JSBI__default["default"].add(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(days)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI__default["default"].toNumber(JSBI__default["default"].multiply(divisor, JSBI__default["default"].BigInt(increment))), roundingMode); ++ total = JSBI__default["default"].toNumber(nanoseconds) / JSBI__default["default"].toNumber(divisor); ++ days = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ break; ++ } ++ case 'hour': { ++ const divisor = 3600e9; ++ let allNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(hours), JSBI__default["default"].BigInt(3600e9)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(minutes), JSBI__default["default"].BigInt(60e9))); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(seconds), BILLION)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, nanoseconds); ++ total = JSBI__default["default"].toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ hours = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, JSBI__default["default"].BigInt(divisor))); ++ nanoseconds = ZERO; ++ minutes = seconds = milliseconds = microseconds = 0; ++ break; ++ } ++ case 'minute': { ++ const divisor = 60e9; ++ let allNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(minutes), JSBI__default["default"].BigInt(60e9)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(seconds), BILLION)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, nanoseconds); ++ total = JSBI__default["default"].toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ minutes = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, JSBI__default["default"].BigInt(divisor))); ++ nanoseconds = ZERO; ++ seconds = milliseconds = microseconds = 0; ++ break; ++ } ++ case 'second': { ++ const divisor = 1e9; ++ let allNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(seconds), BILLION); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, nanoseconds); ++ total = JSBI__default["default"].toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ seconds = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, JSBI__default["default"].BigInt(divisor))); ++ nanoseconds = ZERO; ++ milliseconds = microseconds = 0; ++ break; ++ } ++ case 'millisecond': { ++ const divisor = 1e6; ++ let allNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(milliseconds), MILLION); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, JSBI__default["default"].multiply(JSBI__default["default"].BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, nanoseconds); ++ total = JSBI__default["default"].toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ milliseconds = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, JSBI__default["default"].BigInt(divisor))); ++ nanoseconds = ZERO; ++ microseconds = 0; ++ break; ++ } ++ case 'microsecond': { ++ const divisor = 1e3; ++ let allNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(microseconds), THOUSAND); ++ allNanoseconds = JSBI__default["default"].add(allNanoseconds, nanoseconds); ++ total = JSBI__default["default"].toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ microseconds = JSBI__default["default"].toNumber(JSBI__default["default"].divide(rounded, JSBI__default["default"].BigInt(divisor))); ++ nanoseconds = ZERO; ++ break; ++ } ++ case 'nanosecond': { ++ total = JSBI__default["default"].toNumber(nanoseconds); ++ nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode); ++ break; ++ } ++ } ++ return { ++ years, ++ months, ++ weeks, ++ days, ++ hours, ++ minutes, ++ seconds, ++ milliseconds, ++ microseconds, ++ nanoseconds: JSBI__default["default"].toNumber(nanoseconds), ++ total ++ }; ++} ++function CompareISODate(y1, m1, d1, y2, m2, d2) { ++ for (const [x, y] of [ ++ [y1, y2], ++ [m1, m2], ++ [d1, d2] ++ ]) { ++ if (x !== y) ++ return ComparisonResult(x - y); ++ } ++ return 0; ++} ++function NonNegativeModulo(x, y) { ++ let result = x % y; ++ if (ObjectIs(result, -0)) ++ return 0; ++ if (result < 0) ++ result += y; ++ return result; ++} ++function ToBigIntExternal(arg) { ++ const jsbiBI = ToBigInt(arg); ++ if (typeof globalThis.BigInt !== 'undefined') ++ return globalThis.BigInt(jsbiBI.toString(10)); ++ return jsbiBI; ++} ++function ToBigInt(arg) { ++ if (arg instanceof JSBI__default["default"]) { ++ return arg; ++ } ++ let prim = arg; ++ if (typeof arg === 'object') { ++ const toPrimFn = arg[Symbol.toPrimitive]; ++ if (toPrimFn && typeof toPrimFn === 'function') { ++ prim = ReflectApply$1(toPrimFn, arg, ['number']); ++ } ++ } ++ switch (typeof prim) { ++ case 'undefined': ++ case 'object': ++ case 'number': ++ case 'symbol': ++ default: ++ throw new TypeError(`cannot convert ${typeof arg} to bigint`); ++ case 'string': ++ if (!prim.match(/^\s*(?:[+-]?\d+\s*)?$/)) { ++ throw new SyntaxError('invalid BigInt syntax'); ++ } ++ // eslint: no-fallthrough: false ++ case 'bigint': ++ try { ++ return JSBI__default["default"].BigInt(prim.toString()); ++ } ++ catch (e) { ++ if (e instanceof Error && e.message.startsWith('Invalid integer')) ++ throw new SyntaxError(e.message); ++ throw e; ++ } ++ case 'boolean': ++ if (prim) { ++ return ONE; ++ } ++ else { ++ return ZERO; ++ } ++ } ++} ++// Note: This method returns values with bogus nanoseconds based on the previous iteration's ++// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be ++// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero. ++const SystemUTCEpochNanoSeconds = (() => { ++ let ns = JSBI__default["default"].BigInt(Date.now() % 1e6); ++ return () => { ++ const ms = JSBI__default["default"].BigInt(Date.now()); ++ const result = JSBI__default["default"].add(JSBI__default["default"].multiply(ms, MILLION), ns); ++ ns = JSBI__default["default"].remainder(ms, MILLION); ++ if (JSBI__default["default"].greaterThan(result, NS_MAX)) ++ return NS_MAX; ++ if (JSBI__default["default"].lessThan(result, NS_MIN)) ++ return NS_MIN; ++ return result; ++ }; ++})(); ++function SystemTimeZone() { ++ const fmt = new IntlDateTimeFormat$2('en-us'); ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone)); ++} ++function ComparisonResult(value) { ++ return value < 0 ? -1 : value > 0 ? 1 : value; ++} ++function GetOptionsObject(options) { ++ if (options === undefined) ++ return ObjectCreate$2(null); ++ if (IsObject(options) && options !== null) ++ return options; ++ throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`); ++} ++function CreateOnePropObject(propName, propValue) { ++ const o = ObjectCreate$2(null); ++ o[propName] = propValue; ++ return o; ++} ++function GetOption(options, property, allowedValues, fallback) { ++ let value = options[property]; ++ if (value !== undefined) { ++ value = ToString(value); ++ if (!allowedValues.includes(value)) { ++ throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`); ++ } ++ return value; ++ } ++ return fallback; ++} ++function GetNumberOption(options, property, minimum, maximum, fallback) { ++ let valueRaw = options[property]; ++ if (valueRaw === undefined) ++ return fallback; ++ const value = ToNumber(valueRaw); ++ if (NumberIsNaN(value) || value < minimum || value > maximum) { ++ throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`); ++ } ++ return MathFloor$1(value); ++} ++function IsBuiltinCalendar(id) { ++ return ArrayIncludes$1.call(BUILTIN_CALENDAR_IDS, id); ++} ++const OFFSET = new RegExp(`^${offset.source}$`); ++function bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) { ++ // This doesn't make much sense - why do these get converted unnecessarily? ++ let left = JSBI__default["default"].BigInt(leftParam); ++ let right = JSBI__default["default"].BigInt(rightParam); ++ let lstate = lstateParam; ++ let rstate = rstateParam; ++ while (JSBI__default["default"].greaterThan(JSBI__default["default"].subtract(right, left), ONE)) { ++ const middle = JSBI__default["default"].divide(JSBI__default["default"].add(left, right), JSBI__default["default"].BigInt(2)); ++ const mstate = getState(middle); ++ if (mstate === lstate) { ++ left = middle; ++ lstate = mstate; ++ } ++ else if (mstate === rstate) { ++ right = middle; ++ rstate = mstate; ++ } ++ else { ++ throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`); ++ } ++ } ++ return right; ++} ++const nsPerTimeUnit = { ++ hour: 3600e9, ++ minute: 60e9, ++ second: 1e9, ++ millisecond: 1e6, ++ microsecond: 1e3, ++ nanosecond: 1 ++}; ++ ++const DATE = Symbol('date'); ++const YM = Symbol('ym'); ++const MD = Symbol('md'); ++const TIME = Symbol('time'); ++const DATETIME = Symbol('datetime'); ++const ZONED = Symbol('zoneddatetime'); ++const INST = Symbol('instant'); ++const ORIGINAL = Symbol('original'); ++const TZ_RESOLVED = Symbol('timezone'); ++const TZ_GIVEN = Symbol('timezone-id-given'); ++const CAL_ID = Symbol('calendar-id'); ++const LOCALE = Symbol('locale'); ++const OPTIONS = Symbol('options'); ++const descriptor = (value) => { ++ return { ++ value, ++ enumerable: true, ++ writable: false, ++ configurable: true ++ }; ++}; ++const IntlDateTimeFormat$1 = globalThis.Intl.DateTimeFormat; ++const ObjectAssign$1 = Object.assign; ++const ObjectHasOwnProperty = Object.prototype.hasOwnProperty; ++const ReflectApply = Reflect.apply; ++// Construction of built-in Intl.DateTimeFormat objects is sloooooow, ++// so we'll only create those instances when we need them. ++// See https://bugs.chromium.org/p/v8/issues/detail?id=6528 ++function getPropLazy(obj, prop) { ++ let val = obj[prop]; ++ if (typeof val === 'function') { ++ // If we get here, `val` is an "amender function". It will take the user's ++ // options and transform them into suitable options to be passed into the ++ // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options ++ // will vary depending on the Temporal type, so that's why we store separate ++ // formatters in separate props on the polyfill's DateTimeFormat instances. ++ // The efficiency happens because we don't create an (expensive) formatter ++ // until the user calls toLocaleString for that Temporal type. ++ val = new IntlDateTimeFormat$1(obj[LOCALE], val(obj[OPTIONS])); ++ // TODO: can this be typed more cleanly? ++ obj[prop] = val; ++ } ++ return val; ++} ++// Similarly, lazy-init TimeZone instances. ++function getResolvedTimeZoneLazy(obj) { ++ let val = obj[TZ_RESOLVED]; ++ if (typeof val === 'string') { ++ val = ToTemporalTimeZone(val); ++ obj[TZ_RESOLVED] = val; ++ } ++ return val; ++} ++function DateTimeFormatImpl(locale = undefined, optionsParam = {}) { ++ if (!(this instanceof DateTimeFormatImpl)) { ++ return new DateTimeFormatImpl(locale, optionsParam); ++ } ++ const hasOptions = typeof optionsParam !== 'undefined'; ++ const options = hasOptions ? ObjectAssign$1({}, optionsParam) : {}; ++ // TODO: remove type assertion after Temporal types land in TS lib types ++ const original = new IntlDateTimeFormat$1(locale, options); ++ const ro = original.resolvedOptions(); ++ // DateTimeFormat instances are very expensive to create. Therefore, they will ++ // be lazily created only when needed, using the locale and options provided. ++ // But it's possible for callers to mutate those inputs before lazy creation ++ // happens. For this reason, we clone the inputs instead of caching the ++ // original objects. To avoid the complexity of deep cloning any inputs that ++ // are themselves objects (e.g. the locales array, or options property values ++ // that will be coerced to strings), we rely on `resolvedOptions()` to do the ++ // coercion and cloning for us. Unfortunately, we can't just use the resolved ++ // options as-is because our options-amending logic adds additional fields if ++ // the user doesn't supply any unit fields like year, month, day, hour, etc. ++ // Therefore, we limit the properties in the clone to properties that were ++ // present in the original input. ++ if (hasOptions) { ++ const clonedResolved = ObjectAssign$1({}, ro); ++ for (const prop in clonedResolved) { ++ if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) { ++ delete clonedResolved[prop]; ++ } ++ } ++ this[OPTIONS] = clonedResolved; ++ } ++ else { ++ this[OPTIONS] = options; ++ } ++ this[TZ_GIVEN] = options.timeZone ? options.timeZone : null; ++ this[LOCALE] = ro.locale; ++ this[ORIGINAL] = original; ++ this[TZ_RESOLVED] = ro.timeZone; ++ this[CAL_ID] = ro.calendar; ++ this[DATE] = dateAmend; ++ this[YM] = yearMonthAmend; ++ this[MD] = monthDayAmend; ++ this[TIME] = timeAmend; ++ this[DATETIME] = datetimeAmend; ++ this[ZONED] = zonedDateTimeAmend; ++ this[INST] = instantAmend; ++ return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way? ++} ++Object.defineProperty(DateTimeFormatImpl, 'name', { ++ writable: true, ++ value: 'DateTimeFormat' ++}); ++DateTimeFormatImpl.supportedLocalesOf = function (locales, options) { ++ return IntlDateTimeFormat$1.supportedLocalesOf(locales, options); ++}; ++const propertyDescriptors = { ++ resolvedOptions: descriptor(resolvedOptions), ++ format: descriptor(format), ++ formatRange: descriptor(formatRange) ++}; ++if ('formatToParts' in IntlDateTimeFormat$1.prototype) { ++ propertyDescriptors.formatToParts = descriptor(formatToParts); ++} ++if ('formatRangeToParts' in IntlDateTimeFormat$1.prototype) { ++ propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts); ++} ++DateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat$1.prototype, propertyDescriptors); ++// Ensure that the prototype isn't writeable. ++Object.defineProperty(DateTimeFormatImpl, 'prototype', { ++ writable: false, ++ enumerable: false, ++ configurable: false ++}); ++const DateTimeFormat = DateTimeFormatImpl; ++function resolvedOptions() { ++ return this[ORIGINAL].resolvedOptions(); ++} ++function adjustFormatterTimeZone(formatter, timeZone) { ++ if (!timeZone) ++ return formatter; ++ const options = formatter.resolvedOptions(); ++ if (options.timeZone === timeZone) ++ return formatter; ++ // Existing Intl isn't typed to accept Temporal-specific options and the lib ++ // types for resolved options are less restrictive than the types for options. ++ // For example, `weekday` is ++ // `'long' | 'short' | 'narrow'` in options but `string` in resolved options. ++ // TODO: investigate why, and file an issue against TS if it's a bug. ++ if (options['dateStyle'] || options['timeStyle']) { ++ // Unfortunately, Safari's resolvedOptions include parameters that will ++ // cause errors at runtime if passed along with ++ // dateStyle or timeStyle options as per ++ // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components. ++ // This has been fixed in newer versions of Safari: ++ // https://bugs.webkit.org/show_bug.cgi?id=231041 ++ delete options['weekday']; ++ delete options['era']; ++ delete options['year']; ++ delete options['month']; ++ delete options['day']; ++ delete options['hour']; ++ delete options['minute']; ++ delete options['second']; ++ delete options['timeZoneName']; ++ delete options['hourCycle']; ++ delete options['hour12']; ++ delete options['dayPeriod']; ++ } ++ return new IntlDateTimeFormat$1(options.locale, { ...options, timeZone }); ++} ++// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params? ++// And if so, why doesn't formatRange also accept extra params? ++function format(datetime, ...rest) { ++ let { instant, formatter, timeZone } = extractOverrides(datetime, this); ++ if (instant && formatter) { ++ formatter = adjustFormatterTimeZone(formatter, timeZone); ++ return formatter.format(instant.epochMilliseconds); ++ } ++ return this[ORIGINAL].format(datetime, ...rest); ++} ++function formatToParts(datetime, ...rest) { ++ let { instant, formatter, timeZone } = extractOverrides(datetime, this); ++ if (instant && formatter) { ++ formatter = adjustFormatterTimeZone(formatter, timeZone); ++ return formatter.formatToParts(instant.epochMilliseconds); ++ } ++ return this[ORIGINAL].formatToParts(datetime, ...rest); ++} ++function formatRange(a, b) { ++ if (isTemporalObject(a) || isTemporalObject(b)) { ++ if (!sameTemporalType(a, b)) { ++ throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type'); ++ } ++ const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this); ++ const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this); ++ if (atz && btz && atz !== btz) { ++ throw new RangeError('cannot format range between different time zones'); ++ } ++ if (aa && bb && aformatter && bformatter && aformatter === bformatter) { ++ const formatter = adjustFormatterTimeZone(aformatter, atz); ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds); ++ } ++ } ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return this[ORIGINAL].formatRange(a, b); ++} ++function formatRangeToParts(a, b) { ++ if (isTemporalObject(a) || isTemporalObject(b)) { ++ if (!sameTemporalType(a, b)) { ++ throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type'); ++ } ++ const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this); ++ const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this); ++ if (atz && btz && atz !== btz) { ++ throw new RangeError('cannot format range between different time zones'); ++ } ++ if (aa && bb && aformatter && bformatter && aformatter === bformatter) { ++ const formatter = adjustFormatterTimeZone(aformatter, atz); ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds); ++ } ++ } ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return this[ORIGINAL].formatRangeToParts(a, b); ++} ++function amend(optionsParam = {}, amended = {}) { ++ const options = ObjectAssign$1({}, optionsParam); ++ for (const opt of [ ++ 'year', ++ 'month', ++ 'day', ++ 'hour', ++ 'minute', ++ 'second', ++ 'weekday', ++ 'dayPeriod', ++ 'timeZoneName', ++ 'dateStyle', ++ 'timeStyle' ++ ]) { ++ options[opt] = opt in amended ? amended[opt] : options[opt]; ++ if (options[opt] === false || options[opt] === undefined) ++ delete options[opt]; ++ } ++ return options; ++} ++function timeAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ year: false, ++ month: false, ++ day: false, ++ weekday: false, ++ timeZoneName: false, ++ dateStyle: false ++ }); ++ if (!hasTimeOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ return options; ++} ++function yearMonthAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ day: false, ++ hour: false, ++ minute: false, ++ second: false, ++ weekday: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ dateStyle: false, ++ timeStyle: false ++ }); ++ if (!('year' in options || 'month' in options)) { ++ options = ObjectAssign$1(options, { year: 'numeric', month: 'numeric' }); ++ } ++ return options; ++} ++function monthDayAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ year: false, ++ hour: false, ++ minute: false, ++ second: false, ++ weekday: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ dateStyle: false, ++ timeStyle: false ++ }); ++ if (!('month' in options || 'day' in options)) { ++ options = ObjectAssign$1({}, options, { month: 'numeric', day: 'numeric' }); ++ } ++ return options; ++} ++function dateAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ hour: false, ++ minute: false, ++ second: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ timeStyle: false ++ }); ++ if (!hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric' ++ }); ++ } ++ return options; ++} ++function datetimeAmend(optionsParam) { ++ let options = amend(optionsParam, { timeZoneName: false }); ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ return options; ++} ++function zonedDateTimeAmend(optionsParam) { ++ let options = optionsParam; ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ if (options.timeZoneName === undefined) ++ options.timeZoneName = 'short'; ++ } ++ return options; ++} ++function instantAmend(optionsParam) { ++ let options = optionsParam; ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ return options; ++} ++function hasDateOptions(options) { ++ return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options; ++} ++function hasTimeOptions(options) { ++ return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options); ++} ++function isTemporalObject(obj) { ++ return (IsTemporalDate(obj) || ++ IsTemporalTime(obj) || ++ IsTemporalDateTime(obj) || ++ IsTemporalZonedDateTime(obj) || ++ IsTemporalYearMonth(obj) || ++ IsTemporalMonthDay(obj) || ++ IsTemporalInstant(obj)); ++} ++function sameTemporalType(x, y) { ++ if (!isTemporalObject(x) || !isTemporalObject(y)) ++ return false; ++ if (IsTemporalTime(x) && !IsTemporalTime(y)) ++ return false; ++ if (IsTemporalDate(x) && !IsTemporalDate(y)) ++ return false; ++ if (IsTemporalDateTime(x) && !IsTemporalDateTime(y)) ++ return false; ++ if (IsTemporalZonedDateTime(x) && !IsTemporalZonedDateTime(y)) ++ return false; ++ if (IsTemporalYearMonth(x) && !IsTemporalYearMonth(y)) ++ return false; ++ if (IsTemporalMonthDay(x) && !IsTemporalMonthDay(y)) ++ return false; ++ if (IsTemporalInstant(x) && !IsTemporalInstant(y)) ++ return false; ++ return true; ++} ++function extractOverrides(temporalObj, main) { ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ if (IsTemporalTime(temporalObj)) { ++ const hour = GetSlot(temporalObj, ISO_HOUR); ++ const minute = GetSlot(temporalObj, ISO_MINUTE); ++ const second = GetSlot(temporalObj, ISO_SECOND); ++ const millisecond = GetSlot(temporalObj, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalObj, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND); ++ const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, TIME) ++ }; ++ } ++ if (IsTemporalYearMonth(temporalObj)) { ++ const isoYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const referenceISODay = GetSlot(temporalObj, ISO_DAY); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, YM) ++ }; ++ } ++ if (IsTemporalMonthDay(temporalObj)) { ++ const referenceISOYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const isoDay = GetSlot(temporalObj, ISO_DAY); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, MD) ++ }; ++ } ++ if (IsTemporalDate(temporalObj)) { ++ const isoYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const isoDay = GetSlot(temporalObj, ISO_DAY); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, DATE) ++ }; ++ } ++ if (IsTemporalDateTime(temporalObj)) { ++ const isoYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const isoDay = GetSlot(temporalObj, ISO_DAY); ++ const hour = GetSlot(temporalObj, ISO_HOUR); ++ const minute = GetSlot(temporalObj, ISO_MINUTE); ++ const second = GetSlot(temporalObj, ISO_SECOND); ++ const millisecond = GetSlot(temporalObj, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalObj, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ let datetime = temporalObj; ++ if (calendar === 'iso8601') { ++ datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]); ++ } ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, DATETIME) ++ }; ++ } ++ if (IsTemporalZonedDateTime(temporalObj)) { ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const timeZone = GetSlot(temporalObj, TIME_ZONE); ++ const objTimeZone = ToString(timeZone); ++ if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) { ++ throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`); ++ } ++ return { ++ instant: GetSlot(temporalObj, INSTANT), ++ formatter: getPropLazy(main, ZONED), ++ timeZone: objTimeZone ++ }; ++ } ++ if (IsTemporalInstant(temporalObj)) { ++ return { ++ instant: temporalObj, ++ formatter: getPropLazy(main, INST) ++ }; ++ } ++ return {}; ++} ++ ++var intl = /*#__PURE__*/Object.freeze({ ++ __proto__: null, ++ DateTimeFormat: DateTimeFormat ++}); ++ ++class Instant { ++ constructor(epochNanoseconds) { ++ // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only ++ // to improve the error message. ++ if (arguments.length < 1) { ++ throw new TypeError('missing argument: epochNanoseconds is required'); ++ } ++ const ns = ToBigInt(epochNanoseconds); ++ ValidateEpochNanoseconds(ns); ++ CreateSlots(this); ++ SetSlot(this, EPOCHNANOSECONDS, ns); ++ { ++ const repr = TemporalInstantToString(this, undefined, 'auto'); ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${repr}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get epochSeconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI__default["default"].toNumber(JSBI__default["default"].divide(value, BILLION)); ++ } ++ get epochMilliseconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const value = JSBI__default["default"].BigInt(GetSlot(this, EPOCHNANOSECONDS)); ++ return JSBI__default["default"].toNumber(JSBI__default["default"].divide(value, MILLION)); ++ } ++ get epochMicroseconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const value = JSBI__default["default"].BigInt(GetSlot(this, EPOCHNANOSECONDS)); ++ return ToBigIntExternal(JSBI__default["default"].divide(value, THOUSAND)); ++ } ++ get epochNanoseconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return ToBigIntExternal(JSBI__default["default"].BigInt(GetSlot(this, EPOCHNANOSECONDS))); ++ } ++ add(temporalDurationLike) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike); ++ } ++ subtract(temporalDurationLike) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalInstant('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalInstant('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const maximumIncrements = { ++ hour: 24, ++ minute: 1440, ++ second: 86400, ++ millisecond: 86400e3, ++ microsecond: 86400e6, ++ nanosecond: 86400e9 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true); ++ const ns = GetSlot(this, EPOCHNANOSECONDS); ++ const roundedNs = RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode); ++ return new Instant(roundedNs); ++ } ++ equals(otherParam) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalInstant(otherParam); ++ const one = GetSlot(this, EPOCHNANOSECONDS); ++ const two = GetSlot(other, EPOCHNANOSECONDS); ++ return JSBI__default["default"].equal(JSBI__default["default"].BigInt(one), JSBI__default["default"].BigInt(two)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ let timeZone = options.timeZone; ++ if (timeZone !== undefined) ++ timeZone = ToTemporalTimeZone(timeZone); ++ // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ const ns = GetSlot(this, EPOCHNANOSECONDS); ++ const roundedNs = RoundInstant(ns, increment, unit, roundingMode); ++ const roundedInstant = new Instant(roundedNs); ++ return TemporalInstantToString(roundedInstant, timeZone, precision); ++ } ++ toJSON() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalInstantToString(this, undefined, 'auto'); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.Instant'); ++ } ++ toZonedDateTime(item) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) { ++ throw new TypeError('invalid argument in toZonedDateTime'); ++ } ++ const calendarLike = item.calendar; ++ if (calendarLike === undefined) { ++ throw new TypeError('missing calendar property in toZonedDateTime'); ++ } ++ const calendar = ToTemporalCalendar(calendarLike); ++ const temporalTimeZoneLike = item.timeZone; ++ if (temporalTimeZoneLike === undefined) { ++ throw new TypeError('missing timeZone property in toZonedDateTime'); ++ } ++ const timeZone = ToTemporalTimeZone(temporalTimeZoneLike); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ toZonedDateTimeISO(itemParam) { ++ let item = itemParam; ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ if (IsObject(item)) { ++ const timeZoneProperty = item.timeZone; ++ if (timeZoneProperty !== undefined) { ++ item = timeZoneProperty; ++ } ++ } ++ const timeZone = ToTemporalTimeZone(item); ++ const calendar = GetISO8601Calendar(); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ static fromEpochSeconds(epochSecondsParam) { ++ const epochSeconds = ToNumber(epochSecondsParam); ++ const epochNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(epochSeconds), BILLION); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static fromEpochMilliseconds(epochMillisecondsParam) { ++ const epochMilliseconds = ToNumber(epochMillisecondsParam); ++ const epochNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(epochMilliseconds), MILLION); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static fromEpochMicroseconds(epochMicrosecondsParam) { ++ const epochMicroseconds = ToBigInt(epochMicrosecondsParam); ++ const epochNanoseconds = JSBI__default["default"].multiply(epochMicroseconds, THOUSAND); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static fromEpochNanoseconds(epochNanosecondsParam) { ++ const epochNanoseconds = ToBigInt(epochNanosecondsParam); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static from(item) { ++ if (IsTemporalInstant(item)) { ++ return new Instant(GetSlot(item, EPOCHNANOSECONDS)); ++ } ++ return ToTemporalInstant(item); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalInstant(oneParam); ++ const two = ToTemporalInstant(twoParam); ++ const oneNs = GetSlot(one, EPOCHNANOSECONDS); ++ const twoNs = GetSlot(two, EPOCHNANOSECONDS); ++ if (JSBI__default["default"].lessThan(oneNs, twoNs)) ++ return -1; ++ if (JSBI__default["default"].greaterThan(oneNs, twoNs)) ++ return 1; ++ return 0; ++ } ++} ++MakeIntrinsicClass(Instant, 'Temporal.Instant'); ++ ++const ArrayIncludes = Array.prototype.includes; ++const ArrayPrototypePush = Array.prototype.push; ++const IntlDateTimeFormat = globalThis.Intl.DateTimeFormat; ++const ArraySort = Array.prototype.sort; ++const MathAbs = Math.abs; ++const MathFloor = Math.floor; ++const ObjectEntries = Object.entries; ++const ObjectKeys = Object.keys; ++/** ++ * Implementations for each calendar. Non-ISO calendars have an extra `helper` ++ * property that provides additional per-calendar logic. ++ */ ++const impl = {}; ++/** ++ * Thin wrapper around the implementation of each built-in calendar. This ++ * class's methods follow a similar pattern: ++ * 1. Validate parameters ++ * 2. Fill in default options (for methods where options are present) ++ * 3. Simplify and/or normalize parameters. For example, some methods accept ++ * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to ++ * PlainDate. ++ * 4. Look up the ID of the built-in calendar ++ * 5. Fetch the implementation object for that ID. ++ * 6. Call the corresponding method in the implementation object. ++ */ ++class Calendar { ++ constructor(idParam) { ++ // Note: if the argument is not passed, IsBuiltinCalendar("undefined") will fail. This check ++ // exists only to improve the error message. ++ if (arguments.length < 1) { ++ throw new RangeError('missing argument: id is required'); ++ } ++ const id = ToString(idParam); ++ if (!IsBuiltinCalendar(id)) ++ throw new RangeError(`invalid calendar identifier ${id}`); ++ CreateSlots(this); ++ SetSlot(this, CALENDAR_ID, id); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${id}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get id() { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ dateFromFields(fields, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) ++ throw new TypeError('invalid fields'); ++ const options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this); ++ } ++ yearMonthFromFields(fields, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) ++ throw new TypeError('invalid fields'); ++ const options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this); ++ } ++ monthDayFromFields(fields, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) ++ throw new TypeError('invalid fields'); ++ const options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this); ++ } ++ fields(fields) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const fieldsArray = []; ++ const allowed = new Set([ ++ 'year', ++ 'month', ++ 'monthCode', ++ 'day', ++ 'hour', ++ 'minute', ++ 'second', ++ 'millisecond', ++ 'microsecond', ++ 'nanosecond' ++ ]); ++ for (const name of fields) { ++ if (typeof name !== 'string') ++ throw new TypeError('invalid fields'); ++ if (!allowed.has(name)) ++ throw new RangeError(`invalid field name ${name}`); ++ allowed.delete(name); ++ ArrayPrototypePush.call(fieldsArray, name); ++ } ++ return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray); ++ } ++ mergeFields(fields, additionalFields) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields); ++ } ++ dateAdd(dateParam, durationParam, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ const duration = ToTemporalDuration(durationParam); ++ const options = GetOptionsObject(optionsParam); ++ const overflow = ToTemporalOverflow(options); ++ const { days } = BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day'); ++ return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this); ++ } ++ dateUntil(oneParam, twoParam, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const one = ToTemporalDate(oneParam); ++ const two = ToTemporalDate(twoParam); ++ const options = GetOptionsObject(optionsParam); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = 'day'; ++ const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ } ++ year(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].year(date); ++ } ++ month(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (IsTemporalMonthDay(date)) ++ throw new TypeError('use monthCode on PlainMonthDay instead'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].month(date); ++ } ++ monthCode(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date) && !IsTemporalMonthDay(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].monthCode(date); ++ } ++ day(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalMonthDay(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].day(date); ++ } ++ era(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].era(date); ++ } ++ eraYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].eraYear(date); ++ } ++ dayOfWeek(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date); ++ } ++ dayOfYear(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date); ++ } ++ weekOfYear(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date); ++ } ++ daysInWeek(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date); ++ } ++ daysInMonth(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date); ++ } ++ daysInYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date); ++ } ++ monthsInYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date); ++ } ++ inLeapYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date); ++ } ++ toString() { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR_ID); ++ } ++ toJSON() { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ static from(item) { ++ return ToTemporalCalendar(item); ++ } ++} ++MakeIntrinsicClass(Calendar, 'Temporal.Calendar'); ++DefineIntrinsic('Temporal.Calendar.from', Calendar.from); ++/** ++ * Implementation for the ISO 8601 calendar. This is the only calendar that's ++ * guaranteed to be supported by all ECMAScript implementations, including those ++ * without Intl (ECMA-402) support. ++ */ ++impl['iso8601'] = { ++ dateFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ let fields = PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']); ++ fields = resolveNonLunisolarMonth(fields); ++ let { year, month, day } = fields; ++ ({ year, month, day } = RegulateISODate(year, month, day, overflow)); ++ return CreateTemporalDate(year, month, day, calendar); ++ }, ++ yearMonthFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ let fields = PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']); ++ fields = resolveNonLunisolarMonth(fields); ++ let { year, month } = fields; ++ ({ year, month } = RegulateISOYearMonth(year, month, overflow)); ++ return CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1); ++ }, ++ monthDayFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ let fields = PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']); ++ if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) { ++ throw new TypeError('either year or monthCode required with month'); ++ } ++ const useYear = fields.monthCode === undefined; ++ const referenceISOYear = 1972; ++ fields = resolveNonLunisolarMonth(fields); ++ let { month, day, year } = fields; ++ ({ month, day } = RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow)); ++ return CreateTemporalMonthDay(month, day, calendar, referenceISOYear); ++ }, ++ fields(fields) { ++ return fields; ++ }, ++ mergeFields(fields, additionalFields) { ++ const merged = {}; ++ for (const nextKey of ObjectKeys(fields)) { ++ if (nextKey === 'month' || nextKey === 'monthCode') ++ continue; ++ merged[nextKey] = fields[nextKey]; ++ } ++ const newKeys = ObjectKeys(additionalFields); ++ for (const nextKey of newKeys) { ++ merged[nextKey] = additionalFields[nextKey]; ++ } ++ if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) { ++ const { month, monthCode } = fields; ++ if (month !== undefined) ++ merged.month = month; ++ if (monthCode !== undefined) ++ merged.monthCode = monthCode; ++ } ++ return merged; ++ }, ++ dateAdd(date, years, months, weeks, days, overflow, calendar) { ++ let year = GetSlot(date, ISO_YEAR); ++ let month = GetSlot(date, ISO_MONTH); ++ let day = GetSlot(date, ISO_DAY); ++ ({ year, month, day } = AddISODate(year, month, day, years, months, weeks, days, overflow)); ++ return CreateTemporalDate(year, month, day, calendar); ++ }, ++ dateUntil(one, two, largestUnit) { ++ return DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit); ++ }, ++ year(date) { ++ return GetSlot(date, ISO_YEAR); ++ }, ++ era() { ++ return undefined; ++ }, ++ eraYear() { ++ return undefined; ++ }, ++ month(date) { ++ return GetSlot(date, ISO_MONTH); ++ }, ++ monthCode(date) { ++ return buildMonthCode(GetSlot(date, ISO_MONTH)); ++ }, ++ day(date) { ++ return GetSlot(date, ISO_DAY); ++ }, ++ dayOfWeek(date) { ++ return DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ dayOfYear(date) { ++ return DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ weekOfYear(date) { ++ return WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ daysInWeek() { ++ return 7; ++ }, ++ daysInMonth(date) { ++ return ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH)); ++ }, ++ daysInYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ return LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365; ++ }, ++ monthsInYear() { ++ return 12; ++ }, ++ inLeapYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ return LeapYear(GetSlot(date, ISO_YEAR)); ++ } ++}; ++function monthCodeNumberPart(monthCode) { ++ if (!monthCode.startsWith('M')) { ++ throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`); ++ } ++ const month = +monthCode.slice(1); ++ if (isNaN(month)) ++ throw new RangeError(`Invalid month code: ${monthCode}`); ++ return month; ++} ++function buildMonthCode(month, leap = false) { ++ return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`; ++} ++/** ++ * Safely merge a month, monthCode pair into an integer month. ++ * If both are present, make sure they match. ++ * This logic doesn't work for lunisolar calendars! ++ * */ ++function resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) { ++ let { month, monthCode } = calendarDate; ++ if (monthCode === undefined) { ++ if (month === undefined) ++ throw new TypeError('Either month or monthCode are required'); ++ // The ISO calendar uses the default (undefined) value because it does ++ // constrain/reject after this method returns. Non-ISO calendars, however, ++ // rely on this function to constrain/reject out-of-range `month` values. ++ if (overflow === 'reject') ++ RejectToRange(month, 1, monthsPerYear); ++ if (overflow === 'constrain') ++ month = ConstrainToRange(month, 1, monthsPerYear); ++ monthCode = buildMonthCode(month); ++ } ++ else { ++ const numberPart = monthCodeNumberPart(monthCode); ++ if (month !== undefined && month !== numberPart) { ++ throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`); ++ } ++ if (monthCode !== buildMonthCode(numberPart)) { ++ throw new RangeError(`Invalid month code: ${monthCode}`); ++ } ++ month = numberPart; ++ if (month < 1 || month > monthsPerYear) ++ throw new RangeError(`Invalid monthCode: ${monthCode}`); ++ } ++ return { ...calendarDate, month, monthCode }; ++} ++/** ++ * This prototype implementation of non-ISO calendars makes many repeated calls ++ * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed ++ * up these repeat accesses. Each cache instance is associated (via a WeakMap) ++ * to a specific Temporal object, which speeds up multiple calendar calls on the ++ * same Temporal object instance. No invalidation or pruning is necessary ++ * because each object's cache is thrown away when the object is GC-ed. ++ */ ++class OneObjectCache { ++ constructor(cacheToClone) { ++ this.map = new Map(); ++ this.calls = 0; ++ this.hits = 0; ++ this.misses = 0; ++ this.now = globalThis.performance ? globalThis.performance.now() : Date.now(); ++ if (cacheToClone !== undefined) { ++ let i = 0; ++ for (const entry of cacheToClone.map.entries()) { ++ if (++i > OneObjectCache.MAX_CACHE_ENTRIES) ++ break; ++ this.map.set(...entry); ++ } ++ } ++ } ++ get(key) { ++ const result = this.map.get(key); ++ if (result) { ++ this.hits++; ++ this.report(); ++ } ++ this.calls++; ++ return result; ++ } ++ set(key, value) { ++ this.map.set(key, value); ++ this.misses++; ++ this.report(); ++ } ++ report() { ++ /* ++ if (this.calls === 0) return; ++ const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now; ++ const hitRate = ((100 * this.hits) / this.calls).toFixed(0); ++ console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`); ++ */ ++ } ++ setObject(obj) { ++ if (OneObjectCache.objectMap.get(obj)) ++ throw new RangeError('object already cached'); ++ OneObjectCache.objectMap.set(obj, this); ++ this.report(); ++ } ++ /** ++ * Returns a WeakMap-backed cache that's used to store expensive results ++ * that are associated with a particular Temporal object instance. ++ * ++ * @param obj - object to associate with the cache ++ */ ++ static getCacheForObject(obj) { ++ let cache = OneObjectCache.objectMap.get(obj); ++ if (!cache) { ++ cache = new OneObjectCache(); ++ OneObjectCache.objectMap.set(obj, cache); ++ } ++ return cache; ++ } ++} ++OneObjectCache.objectMap = new WeakMap(); ++OneObjectCache.MAX_CACHE_ENTRIES = 1000; ++function toUtcIsoDateString({ isoYear, isoMonth, isoDay }) { ++ const yearString = ISOYearString(isoYear); ++ const monthString = ISODateTimePartString(isoMonth); ++ const dayString = ISODateTimePartString(isoDay); ++ return `${yearString}-${monthString}-${dayString}T00:00Z`; ++} ++function simpleDateDiff(one, two) { ++ return { ++ years: one.year - two.year, ++ months: one.month - two.month, ++ days: one.day - two.day ++ }; ++} ++/** ++ * Implementation helper that's common to all non-ISO calendars ++ */ ++class HelperBase { ++ constructor() { ++ // The short era format works for all calendars except Japanese, which will ++ // override. ++ this.eraLength = 'short'; ++ // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ this.hasEra = true; ++ } ++ getFormatter() { ++ // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per ++ // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one ++ // DateTimeFormat instance per calendar. Caching is lazy so we only pay for ++ // calendars that are used. Note that the nonIsoHelperBase object is spread ++ // into each each calendar's implementation before any cache is created, so ++ // each calendar gets its own separate cached formatter. ++ if (typeof this.formatter === 'undefined') { ++ this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, { ++ day: 'numeric', ++ month: 'numeric', ++ year: 'numeric', ++ era: this.eraLength, ++ timeZone: 'UTC' ++ }); ++ } ++ return this.formatter; ++ } ++ isoToCalendarDate(isoDate, cache) { ++ const { year: isoYear, month: isoMonth, day: isoDay } = isoDate; ++ const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id }); ++ const cached = cache.get(key); ++ if (cached) ++ return cached; ++ const dateTimeFormat = this.getFormatter(); ++ let parts, isoString; ++ try { ++ isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay }); ++ parts = dateTimeFormat.formatToParts(new Date(isoString)); ++ } ++ catch (e) { ++ throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`); ++ } ++ const result = {}; ++ for (let { type, value } of parts) { ++ if (type === 'year') ++ result.eraYear = +value; ++ // TODO: remove this type annotation when `relatedYear` gets into TS lib types ++ if (type === 'relatedYear') ++ result.eraYear = +value; ++ if (type === 'month') { ++ const matches = /^([0-9]*)(.*?)$/.exec(value); ++ if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) { ++ throw new RangeError(`Unexpected month: ${value}`); ++ } ++ // If the month has no numeric part (should only see this for the Hebrew ++ // calendar with newer FF / Chromium versions; see ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a ++ // placeholder month index of `1` and rely on the derived class to ++ // calculate the correct month index from the month name stored in ++ // `monthExtra`. ++ result.month = matches[1] ? +matches[1] : 1; ++ if (result.month < 1) { ++ throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` + ++ ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'); ++ } ++ if (result.month > 13) { ++ throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` + ++ ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'); ++ } ++ // The ICU formats for the Hebrew calendar no longer support a numeric ++ // month format. So we'll rely on the derived class to interpret it. ++ // `monthExtra` is also used on the Chinese calendar to handle a suffix ++ // "bis" indicating a leap month. ++ if (matches[2]) ++ result.monthExtra = matches[2]; ++ } ++ if (type === 'day') ++ result.day = +value; ++ if (this.hasEra && type === 'era' && value != null && value !== '') { ++ // The convention for Temporal era values is lowercase, so following ++ // that convention in this prototype. Punctuation is removed, accented ++ // letters are normalized, and spaces are replaced with dashes. ++ // E.g.: "ERA0" => "era0", "Before R.O.C." => "before-roc", "En’ō" => "eno" ++ // The call to normalize() and the replacement regex deals with era ++ // names that contain non-ASCII characters like Japanese eras. Also ++ // ignore extra content in parentheses like JPN era date ranges. ++ value = value.split(' (')[0]; ++ result.era = value ++ .normalize('NFD') ++ .replace(/[^-0-9 \p{L}]/gu, '') ++ .replace(' ', '-') ++ .toLowerCase(); ++ } ++ } ++ if (result.eraYear === undefined) { ++ // Node 12 has outdated ICU data that lacks the `relatedYear` field in the ++ // output of Intl.DateTimeFormat.formatToParts. ++ throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`); ++ } ++ // Translate eras that may be handled differently by Temporal vs. by Intl ++ // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526. ++ if (this.reviseIntlEra) { ++ const { era, eraYear } = this.reviseIntlEra(result, isoDate); ++ result.era = era; ++ result.eraYear = eraYear; ++ } ++ if (this.checkIcuBugs) ++ this.checkIcuBugs(isoDate); ++ const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true); ++ if (calendarDate.year === undefined) ++ throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`); ++ if (calendarDate.month === undefined) ++ throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`); ++ if (calendarDate.day === undefined) ++ throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`); ++ cache.set(key, calendarDate); ++ // Also cache the reverse mapping ++ ['constrain', 'reject'].forEach((overflow) => { ++ const keyReverse = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: calendarDate.year, ++ month: calendarDate.month, ++ day: calendarDate.day, ++ overflow, ++ id: this.id ++ }); ++ cache.set(keyReverse, isoDate); ++ }); ++ return calendarDate; ++ } ++ validateCalendarDate(calendarDate) { ++ const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate; ++ // When there's a suffix (e.g. "5bis" for a leap month in Chinese calendar) ++ // the derived class must deal with it. ++ if (monthExtra !== undefined) ++ throw new RangeError('Unexpected `monthExtra` value'); ++ if (year === undefined && eraYear === undefined) ++ throw new TypeError('year or eraYear is required'); ++ if (month === undefined && monthCode === undefined) ++ throw new TypeError('month or monthCode is required'); ++ if (day === undefined) ++ throw new RangeError('Missing day'); ++ if (monthCode !== undefined) { ++ if (typeof monthCode !== 'string') { ++ throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`); ++ } ++ if (!/^M([01]?\d)(L?)$/.test(monthCode)) ++ throw new RangeError(`Invalid monthCode: ${monthCode}`); ++ } ++ if (this.constantEra) { ++ if (era !== undefined && era !== this.constantEra) { ++ throw new RangeError(`era must be ${this.constantEra}, not ${era}`); ++ } ++ if (eraYear !== undefined && year !== undefined && eraYear !== year) { ++ throw new RangeError(`eraYear ${eraYear} does not match year ${year}`); ++ } ++ } ++ } ++ /** ++ * Allows derived calendars to add additional fields and/or to make ++ * adjustments e.g. to set the era based on the date or to revise the month ++ * number in lunisolar calendars per ++ * https://github.com/tc39/proposal-temporal/issues/1203. ++ * ++ * The base implementation fills in missing values by assuming the simplest ++ * possible calendar: ++ * - no eras or a constant era defined in `.constantEra` ++ * - non-lunisolar calendar (no leap months) ++ * */ ++ adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', ++ // This param is only used by derived classes ++ // eslint-disable-next-line @typescript-eslint/no-unused-vars ++ fromLegacyDate = false) { ++ if (this.calendarType === 'lunisolar') ++ throw new RangeError('Override required for lunisolar calendars'); ++ let calendarDate = calendarDateParam; ++ this.validateCalendarDate(calendarDate); ++ // For calendars that always use the same era, set it here so that derived ++ // calendars won't need to implement this method simply to set the era. ++ if (this.constantEra) { ++ // year and eraYear always match when there's only one possible era ++ const { year, eraYear } = calendarDate; ++ calendarDate = { ++ ...calendarDate, ++ era: this.constantEra, ++ year: year !== undefined ? year : eraYear, ++ eraYear: eraYear !== undefined ? eraYear : year ++ }; ++ } ++ const largestMonth = this.monthsInYear(calendarDate, cache); ++ let { month, monthCode } = calendarDate; ++ ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth)); ++ return { ...calendarDate, month, monthCode }; ++ } ++ regulateMonthDayNaive(calendarDate, overflow, cache) { ++ const largestMonth = this.monthsInYear(calendarDate, cache); ++ let { month, day } = calendarDate; ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, largestMonth); ++ RejectToRange(day, 1, this.maximumMonthLength(calendarDate)); ++ } ++ else { ++ month = ConstrainToRange(month, 1, largestMonth); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month })); ++ } ++ return { ...calendarDate, month, day }; ++ } ++ calendarToIsoDate(dateParam, overflow = 'constrain', cache) { ++ const originalDate = dateParam; ++ // First, normalize the calendar date to ensure that (year, month, day) ++ // are all present, converting monthCode and eraYear if needed. ++ let date = this.adjustCalendarDate(dateParam, cache, overflow, false); ++ // Fix obviously out-of-bounds values. Values that are valid generally, but ++ // not in this particular year, may not be caught here for some calendars. ++ // If so, these will be handled lower below. ++ date = this.regulateMonthDayNaive(date, overflow, cache); ++ const { year, month, day } = date; ++ const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id }); ++ let cached = cache.get(key); ++ if (cached) ++ return cached; ++ // If YMD are present in the input but the input has been constrained ++ // already, then cache both the original value and the constrained value. ++ let keyOriginal; ++ if (originalDate.year !== undefined && ++ originalDate.month !== undefined && ++ originalDate.day !== undefined && ++ (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) { ++ keyOriginal = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: originalDate.year, ++ month: originalDate.month, ++ day: originalDate.day, ++ overflow, ++ id: this.id ++ }); ++ cached = cache.get(keyOriginal); ++ if (cached) ++ return cached; ++ } ++ // First, try to roughly guess the result ++ let isoEstimate = this.estimateIsoDate({ year, month, day }); ++ const calculateSameMonthResult = (diffDays) => { ++ // If the estimate is in the same year & month as the target, then we can ++ // calculate the result exactly and short-circuit any additional logic. ++ // This optimization assumes that months are continuous. It would break if ++ // a calendar skipped days, like the Julian->Gregorian switchover. But the ++ // only ICU calendars that currently skip days (japanese/roc/buddhist) is ++ // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) ++ // that's currently detected by `checkIcuBugs()` which will throw. So ++ // this optimization should be safe for all ICU calendars. ++ let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays); ++ if (date.day > this.minimumMonthLength(date)) { ++ // There's a chance that the calendar date is out of range. Throw or ++ // constrain if so. ++ let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache); ++ while (testCalendarDate.month !== month || testCalendarDate.year !== year) { ++ if (overflow === 'reject') { ++ throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`); ++ } ++ // Back up a day at a time until we're not hanging over the month end ++ testIsoEstimate = this.addDaysIso(testIsoEstimate, -1); ++ testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache); ++ } ++ } ++ return testIsoEstimate; ++ }; ++ let sign = 0; ++ let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ let diff = simpleDateDiff(date, roundtripEstimate); ++ if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) { ++ const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days; ++ isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate); ++ roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ diff = simpleDateDiff(date, roundtripEstimate); ++ if (diff.years === 0 && diff.months === 0) { ++ isoEstimate = calculateSameMonthResult(diff.days); ++ } ++ else { ++ sign = this.compareCalendarDates(date, roundtripEstimate); ++ } ++ } ++ // If the initial guess is not in the same month, then then bisect the ++ // distance to the target, starting with 8 days per step. ++ let increment = 8; ++ let maybeConstrained = false; ++ while (sign) { ++ isoEstimate = this.addDaysIso(isoEstimate, sign * increment); ++ const oldRoundtripEstimate = roundtripEstimate; ++ roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ const oldSign = sign; ++ sign = this.compareCalendarDates(date, roundtripEstimate); ++ if (sign) { ++ diff = simpleDateDiff(date, roundtripEstimate); ++ if (diff.years === 0 && diff.months === 0) { ++ isoEstimate = calculateSameMonthResult(diff.days); ++ // Signal the loop condition that there's a match. ++ sign = 0; ++ // If the calendar day is larger than the minimal length for this ++ // month, then it might be larger than the actual length of the month. ++ // So we won't cache it as the correct calendar date for this ISO ++ // date. ++ maybeConstrained = date.day > this.minimumMonthLength(date); ++ } ++ else if (oldSign && sign !== oldSign) { ++ if (increment > 1) { ++ // If the estimate overshot the target, try again with a smaller increment ++ // in the reverse direction. ++ increment /= 2; ++ } ++ else { ++ // Increment is 1, and neither the previous estimate nor the new ++ // estimate is correct. The only way that can happen is if the ++ // original date was an invalid value that will be constrained or ++ // rejected here. ++ if (overflow === 'reject') { ++ throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`); ++ } ++ else { ++ // To constrain, pick the earliest value ++ const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate); ++ // If current value is larger, then back up to the previous value. ++ if (order > 0) ++ isoEstimate = this.addDaysIso(isoEstimate, -1); ++ maybeConstrained = true; ++ sign = 0; ++ } ++ } ++ } ++ } ++ } ++ cache.set(key, isoEstimate); ++ if (keyOriginal) ++ cache.set(keyOriginal, isoEstimate); ++ if (date.year === undefined || ++ date.month === undefined || ++ date.day === undefined || ++ date.monthCode === undefined || ++ (this.hasEra && (date.era === undefined || date.eraYear === undefined))) { ++ throw new RangeError('Unexpected missing property'); ++ } ++ if (!maybeConstrained) { ++ // Also cache the reverse mapping ++ const keyReverse = JSON.stringify({ ++ func: 'isoToCalendarDate', ++ isoYear: isoEstimate.year, ++ isoMonth: isoEstimate.month, ++ isoDay: isoEstimate.day, ++ id: this.id ++ }); ++ cache.set(keyReverse, date); ++ } ++ return isoEstimate; ++ } ++ temporalToCalendarDate(date, cache) { ++ const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) }; ++ const result = this.isoToCalendarDate(isoDate, cache); ++ return result; ++ } ++ compareCalendarDates(date1Param, date2Param) { ++ // `date1` and `date2` are already records. The calls below simply validate ++ // that all three required fields are present. ++ const date1 = PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']); ++ const date2 = PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']); ++ if (date1.year !== date2.year) ++ return ComparisonResult(date1.year - date2.year); ++ if (date1.month !== date2.month) ++ return ComparisonResult(date1.month - date2.month); ++ if (date1.day !== date2.day) ++ return ComparisonResult(date1.day - date2.day); ++ return 0; ++ } ++ /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */ ++ regulateDate(calendarDate, overflow = 'constrain', cache) { ++ const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache); ++ return this.isoToCalendarDate(isoDate, cache); ++ } ++ addDaysIso(isoDate, days) { ++ const added = AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain'); ++ return added; ++ } ++ addDaysCalendar(calendarDate, days, cache) { ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ const addedIso = this.addDaysIso(isoDate, days); ++ const addedCalendar = this.isoToCalendarDate(addedIso, cache); ++ return addedCalendar; ++ } ++ addMonthsCalendar(calendarDateParam, months, overflow, cache) { ++ let calendarDate = calendarDateParam; ++ const { day } = calendarDate; ++ for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) { ++ const { month } = calendarDate; ++ const oldCalendarDate = calendarDate; ++ const days = months < 0 ++ ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache)) ++ : this.daysInMonth(calendarDate, cache); ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ let addedIso = this.addDaysIso(isoDate, days); ++ calendarDate = this.isoToCalendarDate(addedIso, cache); ++ // Normally, we can advance one month by adding the number of days in the ++ // current month. However, if we're at the end of the current month and ++ // the next month has fewer days, then we rolled over to the after-next ++ // month. Below we detect this condition and back up until we're back in ++ // the desired month. ++ if (months > 0) { ++ const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache); ++ while (calendarDate.month - 1 !== month % monthsInOldYear) { ++ addedIso = this.addDaysIso(addedIso, -1); ++ calendarDate = this.isoToCalendarDate(addedIso, cache); ++ } ++ } ++ if (calendarDate.day !== day) { ++ // try to retain the original day-of-month, if possible ++ calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache); ++ } ++ } ++ if (overflow === 'reject' && calendarDate.day !== day) { ++ throw new RangeError(`Day ${day} does not exist in resulting calendar month`); ++ } ++ return calendarDate; ++ } ++ addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) { ++ const { year, day, monthCode } = calendarDate; ++ const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache); ++ const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache); ++ const initialDays = days + weeks * 7; ++ const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache); ++ return addedDays; ++ } ++ untilCalendar(calendarOne, calendarTwo, largestUnit, cache) { ++ let days = 0; ++ let weeks = 0; ++ let months = 0; ++ let years = 0; ++ switch (largestUnit) { ++ case 'day': ++ days = this.calendarDaysUntil(calendarOne, calendarTwo, cache); ++ break; ++ case 'week': { ++ const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache); ++ days = totalDays % 7; ++ weeks = (totalDays - days) / 7; ++ break; ++ } ++ case 'month': ++ case 'year': { ++ const diffYears = calendarTwo.year - calendarOne.year; ++ const diffMonths = calendarTwo.month - calendarOne.month; ++ const diffDays = calendarTwo.day - calendarOne.day; ++ const sign = this.compareCalendarDates(calendarTwo, calendarOne); ++ if (!sign) { ++ return { years: 0, months: 0, weeks: 0, days: 0 }; ++ } ++ if (largestUnit === 'year' && diffYears) { ++ const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0); ++ years = isOneFurtherInYear ? diffYears - sign : diffYears; ++ } ++ const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne; ++ // Now we have less than one year remaining. Add one month at a time ++ // until we go over the target, then back up one month and calculate ++ // remaining days and weeks. ++ let current; ++ let next = yearsAdded; ++ do { ++ months += sign; ++ current = next; ++ next = this.addMonthsCalendar(current, sign, 'constrain', cache); ++ if (next.day !== calendarOne.day) { ++ // In case the day was constrained down, try to un-constrain it ++ next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache); ++ } ++ } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0); ++ months -= sign; // correct for loop above which overshoots by 1 ++ const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache); ++ days = remainingDays; ++ break; ++ } ++ } ++ return { years, months, weeks, days }; ++ } ++ daysInMonth(calendarDate, cache) { ++ // Add enough days to roll over to the next month. One we're in the next ++ // month, we can calculate the length of the current month. NOTE: This ++ // algorithm assumes that months are continuous. It would break if a ++ // calendar skipped days, like the Julian->Gregorian switchover. But the ++ // only ICU calendars that currently skip days (japanese/roc/buddhist) is a ++ // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) ++ // that's currently detected by `checkIcuBugs()` which will throw. So this ++ // code should be safe for all ICU calendars. ++ const { day } = calendarDate; ++ const max = this.maximumMonthLength(calendarDate); ++ const min = this.minimumMonthLength(calendarDate); ++ // easiest case: we already know the month length if min and max are the same. ++ if (min === max) ++ return min; ++ // Add enough days to get into the next month, without skipping it ++ const increment = day <= max - min ? max : min; ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ const addedIsoDate = this.addDaysIso(isoDate, increment); ++ const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache); ++ // Now back up to the last day of the original month ++ const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day); ++ const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache); ++ return endOfMonthCalendar.day; ++ } ++ daysInPreviousMonth(calendarDate, cache) { ++ const { day, month, year } = calendarDate; ++ // Check to see if we already know the month length, and return it if so ++ const previousMonthYear = month > 1 ? year : year - 1; ++ let previousMonthDate = { year: previousMonthYear, month, day: 1 }; ++ const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache); ++ previousMonthDate = { ...previousMonthDate, month: previousMonth }; ++ const min = this.minimumMonthLength(previousMonthDate); ++ const max = this.maximumMonthLength(previousMonthDate); ++ if (min === max) ++ return max; ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day); ++ const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache); ++ return lastDayOfPreviousMonthCalendar.day; ++ } ++ startOfCalendarYear(calendarDate) { ++ return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 }; ++ } ++ startOfCalendarMonth(calendarDate) { ++ return { year: calendarDate.year, month: calendarDate.month, day: 1 }; ++ } ++ calendarDaysUntil(calendarOne, calendarTwo, cache) { ++ const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache); ++ const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache); ++ return this.isoDaysUntil(oneIso, twoIso); ++ } ++ isoDaysUntil(oneIso, twoIso) { ++ const duration = DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day'); ++ return duration.days; ++ } ++ monthDayFromFields(fields, overflow, cache) { ++ let { year, month, monthCode, day, era, eraYear } = fields; ++ if (monthCode === undefined) { ++ if (year === undefined && (era === undefined || eraYear === undefined)) { ++ throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required'); ++ } ++ ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow)); ++ } ++ let isoYear, isoMonth, isoDay; ++ let closestCalendar, closestIso; ++ // Look backwards starting from the calendar year of 1972-01-01 up to 100 ++ // calendar years to find a year that has this month and day. Normal months ++ // and days will match immediately, but for leap days and leap months we may ++ // have to look for a while. ++ const startDateIso = { year: 1972, month: 1, day: 1 }; ++ const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache); ++ for (let i = 0; i < 100; i++) { ++ const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache); ++ const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache); ++ const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache); ++ ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate); ++ if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) { ++ return { month: isoMonth, day: isoDay, year: isoYear }; ++ } ++ else if (overflow === 'constrain') { ++ // non-ISO constrain algorithm tries to find the closest date in a matching month ++ if (closestCalendar === undefined || ++ (roundTripCalendarDate.monthCode === closestCalendar.monthCode && ++ roundTripCalendarDate.day > closestCalendar.day)) { ++ closestCalendar = roundTripCalendarDate; ++ closestIso = isoDate; ++ } ++ } ++ } ++ if (overflow === 'constrain' && closestIso !== undefined) ++ return closestIso; ++ throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`); ++ } ++} ++class HebrewHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.id = 'hebrew'; ++ this.calendarType = 'lunisolar'; ++ this.months = { ++ Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 }, ++ Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } }, ++ Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } }, ++ Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 }, ++ Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 }, ++ Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 }, ++ 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 }, ++ 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 }, ++ Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 }, ++ Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 }, ++ Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 }, ++ Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 }, ++ Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 }, ++ Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 } ++ }; ++ // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ this.hasEra = false; ++ } ++ inLeapYear(calendarDate) { ++ const { year } = calendarDate; ++ // FYI: In addition to adding a month in leap years, the Hebrew calendar ++ // also has per-year changes to the number of days of Heshvan and Kislev. ++ // Given that these can be calculated by counting the number of days in ++ // those months, I assume that these DO NOT need to be exposed as ++ // Hebrew-only prototype fields or methods. ++ return (7 * year + 1) % 19 < 7; ++ } ++ monthsInYear(calendarDate) { ++ return this.inLeapYear(calendarDate) ? 13 : 12; ++ } ++ minimumMonthLength(calendarDate) { ++ return this.minMaxMonthLength(calendarDate, 'min'); ++ } ++ maximumMonthLength(calendarDate) { ++ return this.minMaxMonthLength(calendarDate, 'max'); ++ } ++ minMaxMonthLength(calendarDate, minOrMax) { ++ const { month, year } = calendarDate; ++ const monthCode = this.getMonthCode(year, month); ++ const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode); ++ if (monthInfo === undefined) ++ throw new RangeError(`unmatched Hebrew month: ${month}`); ++ const daysInMonth = monthInfo[1].days; ++ return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax]; ++ } ++ /** Take a guess at what ISO date a particular calendar date corresponds to */ ++ estimateIsoDate(calendarDate) { ++ const { year } = calendarDate; ++ return { year: year - 3760, month: 1, day: 1 }; ++ } ++ getMonthCode(year, month) { ++ if (this.inLeapYear({ year })) { ++ return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1); ++ } ++ else { ++ return buildMonthCode(month); ++ } ++ } ++ adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) { ++ // The incoming type is actually CalendarDate (same as args to ++ // Calendar.dateFromParams) but TS isn't smart enough to follow all the ++ // reassignments below, so as an alternative to 10+ type casts, we'll lie ++ // here and claim that the type has `day` and `year` filled in already. ++ let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate; ++ if (year === undefined && eraYear !== undefined) ++ year = eraYear; ++ if (eraYear === undefined && year !== undefined) ++ eraYear = year; ++ if (fromLegacyDate) { ++ // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'` ++ // output returns the numeric equivalent of `month` as a string, meaning ++ // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year ++ // means Adar. In this case, `month` will already be correct and no action ++ // is needed. However, in Node 14 and later formatToParts returns the name ++ // of the Hebrew month (e.g. "Tevet"), so we'll need to look up the ++ // correct `month` using the string name as a key. ++ if (monthExtra) { ++ const monthInfo = this.months[monthExtra]; ++ if (!monthInfo) ++ throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`); ++ month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular; ++ } ++ // Because we're getting data from legacy Date, then `month` will always be present ++ monthCode = this.getMonthCode(year, month); ++ const result = { year, month: month, day, era: undefined, eraYear, monthCode }; ++ return result; ++ } ++ else { ++ // When called without input coming from legacy Date output, simply ensure ++ // that all fields are present. ++ this.validateCalendarDate(calendarDate); ++ if (month === undefined) { ++ if (monthCode.endsWith('L')) { ++ if (monthCode !== 'M05L') { ++ throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`); ++ } ++ month = 6; ++ if (!this.inLeapYear({ year })) { ++ if (overflow === 'reject') { ++ throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`); ++ } ++ else { ++ // constrain to last day of previous month (Av) ++ month = 5; ++ day = 30; ++ monthCode = 'M05'; ++ } ++ } ++ } ++ else { ++ month = monthCodeNumberPart(monthCode); ++ // if leap month is before this one, the month index is one more than the month code ++ if (this.inLeapYear({ year }) && month >= 6) ++ month++; ++ const largestMonth = this.monthsInYear({ year }); ++ if (month < 1 || month > largestMonth) ++ throw new RangeError(`Invalid monthCode: ${monthCode}`); ++ } ++ } ++ else { ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, this.monthsInYear({ year })); ++ RejectToRange(day, 1, this.maximumMonthLength({ year, month })); ++ } ++ else { ++ month = ConstrainToRange(month, 1, this.monthsInYear({ year })); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength({ year, month })); ++ } ++ if (monthCode === undefined) { ++ monthCode = this.getMonthCode(year, month); ++ } ++ else { ++ const calculatedMonthCode = this.getMonthCode(year, month); ++ if (calculatedMonthCode !== monthCode) { ++ throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`); ++ } ++ } ++ } ++ return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear }; ++ } ++ } ++} ++/** ++ * For Temporal purposes, the Islamic calendar is simple because it's always the ++ * same 12 months in the same order. ++ */ ++class IslamicBaseHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.calendarType = 'lunar'; ++ this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30; ++ this.DAYS_PER_ISO_YEAR = 365.2425; ++ this.constantEra = 'ah'; ++ } ++ inLeapYear(calendarDate, cache) { ++ // In leap years, the 12th month has 30 days. In non-leap years: 29. ++ const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache); ++ return days === 30; ++ } ++ monthsInYear( /* calendarYear, cache */) { ++ return 12; ++ } ++ minimumMonthLength( /* calendarDate */) { ++ return 29; ++ } ++ maximumMonthLength( /* calendarDate */) { ++ return 30; ++ } ++ estimateIsoDate(calendarDate) { ++ const { year } = this.adjustCalendarDate(calendarDate); ++ return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 }; ++ } ++} ++// There are 6 Islamic calendars with the same implementation in this polyfill. ++// They vary only in their ID. They do emit different output from the underlying ++// Intl implementation, but our code for each of them is identical. ++class IslamicHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic'; ++ } ++} ++class IslamicUmalquraHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-umalqura'; ++ } ++} ++class IslamicTblaHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-tbla'; ++ } ++} ++class IslamicCivilHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-civil'; ++ } ++} ++class IslamicRgsaHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-rgsa'; ++ } ++} ++class IslamicCcHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamicc'; ++ } ++} ++class PersianHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.id = 'persian'; ++ this.calendarType = 'solar'; ++ this.constantEra = 'ap'; ++ } ++ inLeapYear(calendarDate, cache) { ++ // Same logic (count days in the last month) for Persian as for Islamic, ++ // even though Persian is solar and Islamic is lunar. ++ return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache); ++ } ++ monthsInYear( /* calendarYear, cache */) { ++ return 12; ++ } ++ minimumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ if (month === 12) ++ return 29; ++ return month <= 6 ? 31 : 30; ++ } ++ maximumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ if (month === 12) ++ return 30; ++ return month <= 6 ? 31 : 30; ++ } ++ estimateIsoDate(calendarDate) { ++ const { year } = this.adjustCalendarDate(calendarDate); ++ return { year: year + 621, month: 1, day: 1 }; ++ } ++} ++class IndianHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.id = 'indian'; ++ this.calendarType = 'solar'; ++ this.constantEra = 'saka'; ++ // Indian months always start at the same well-known Gregorian month and ++ // day. So this conversion is easy and fast. See ++ // https://en.wikipedia.org/wiki/Indian_national_calendar ++ this.months = { ++ 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } }, ++ 2: { length: 31, month: 4, day: 21 }, ++ 3: { length: 31, month: 5, day: 22 }, ++ 4: { length: 31, month: 6, day: 22 }, ++ 5: { length: 31, month: 7, day: 23 }, ++ 6: { length: 31, month: 8, day: 23 }, ++ 7: { length: 30, month: 9, day: 23 }, ++ 8: { length: 30, month: 10, day: 23 }, ++ 9: { length: 30, month: 11, day: 22 }, ++ 10: { length: 30, month: 12, day: 22 }, ++ 11: { length: 30, month: 1, nextYear: true, day: 21 }, ++ 12: { length: 30, month: 2, nextYear: true, day: 20 } ++ }; ++ // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian ++ // calendar output to fail for all dates before 0001-01-01 ISO. For example, ++ // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as ++ // expected. ++ this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka'; ++ } ++ inLeapYear(calendarDate) { ++ // From https://en.wikipedia.org/wiki/Indian_national_calendar: ++ // Years are counted in the Saka era, which starts its year 0 in the year 78 ++ // of the Common Era. To determine leap years, add 78 to the Saka year – if ++ // the result is a leap year in the Gregorian calendar, then the Saka year ++ // is a leap year as well. ++ return isGregorianLeapYear(calendarDate.year + 78); ++ } ++ monthsInYear( /* calendarYear, cache */) { ++ return 12; ++ } ++ minimumMonthLength(calendarDate) { ++ return this.getMonthInfo(calendarDate).length; ++ } ++ maximumMonthLength(calendarDate) { ++ return this.getMonthInfo(calendarDate).length; ++ } ++ getMonthInfo(calendarDate) { ++ const { month } = calendarDate; ++ let monthInfo = this.months[month]; ++ if (monthInfo === undefined) ++ throw new RangeError(`Invalid month: ${month}`); ++ if (this.inLeapYear(calendarDate) && monthInfo.leap) ++ monthInfo = monthInfo.leap; ++ return monthInfo; ++ } ++ estimateIsoDate(calendarDateParam) { ++ // FYI, this "estimate" is always the exact ISO date, which makes the Indian ++ // calendar fast! ++ const calendarDate = this.adjustCalendarDate(calendarDateParam); ++ const monthInfo = this.getMonthInfo(calendarDate); ++ const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0); ++ const isoMonth = monthInfo.month; ++ const isoDay = monthInfo.day; ++ const isoDate = AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain'); ++ return isoDate; ++ } ++ checkIcuBugs(isoDate) { ++ if (this.vulnerableToBceBug && isoDate.year < 1) { ++ throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` + ++ ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'); ++ } ++ } ++} ++/** ++ * This function adds additional metadata that makes it easier to work with ++ * eras. Note that it mutates and normalizes the original era objects, which is ++ * OK because this is non-observable, internal-only metadata. ++ * ++ * The result is an array of eras with the shape defined above. ++ * */ ++function adjustEras(erasParam) { ++ let eras = erasParam; ++ if (eras.length === 0) { ++ throw new RangeError('Invalid era data: eras are required'); ++ } ++ if (eras.length === 1 && eras[0].reverseOf) { ++ throw new RangeError('Invalid era data: anchor era cannot count years backwards'); ++ } ++ if (eras.length === 1 && !eras[0].name) { ++ throw new RangeError('Invalid era data: at least one named era is required'); ++ } ++ if (eras.filter((e) => e.reverseOf != null).length > 1) { ++ throw new RangeError('Invalid era data: only one era can count years backwards'); ++ } ++ // Find the "anchor era" which is the era used for (era-less) `year`. Reversed ++ // eras can never be anchors. The era without an `anchorEpoch` property is the ++ // anchor. ++ let anchorEra; ++ eras.forEach((e) => { ++ if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) { ++ if (anchorEra) ++ throw new RangeError('Invalid era data: cannot have multiple anchor eras'); ++ anchorEra = e; ++ e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 }; ++ } ++ else if (!e.name) { ++ throw new RangeError('If era name is blank, it must be the anchor era'); ++ } ++ }); ++ // If the era name is undefined, then it's an anchor that doesn't interact ++ // with eras at all. For example, Japanese `year` is always the same as ISO ++ // `year`. So this "era" is the anchor era but isn't used for era matching. ++ // Strip it from the list that's returned. ++ eras = eras.filter((e) => e.name); ++ eras.forEach((e) => { ++ // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D. ++ // Replace the string-valued "reverseOf" property with the actual era object ++ // that's reversed. ++ const { reverseOf } = e; ++ if (reverseOf) { ++ const reversedEra = eras.find((era) => era.name === reverseOf); ++ if (reversedEra === undefined) ++ throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`); ++ e.reverseOf = reversedEra; ++ e.anchorEpoch = reversedEra.anchorEpoch; ++ e.isoEpoch = reversedEra.isoEpoch; ++ } ++ if (e.anchorEpoch.month === undefined) ++ e.anchorEpoch.month = 1; ++ if (e.anchorEpoch.day === undefined) ++ e.anchorEpoch.day = 1; ++ }); ++ // Ensure that the latest epoch is first in the array. This lets us try to ++ // match eras in index order, with the last era getting the remaining older ++ // years. Any reverse-signed era must be at the end. ++ ArraySort.call(eras, (e1, e2) => { ++ if (e1.reverseOf) ++ return 1; ++ if (e2.reverseOf) ++ return -1; ++ if (!e1.isoEpoch || !e2.isoEpoch) ++ throw new RangeError('Invalid era data: missing ISO epoch'); ++ return e2.isoEpoch.year - e1.isoEpoch.year; ++ }); ++ // If there's a reversed era, then the one before it must be the era that's ++ // being reversed. ++ const lastEraReversed = eras[eras.length - 1].reverseOf; ++ if (lastEraReversed) { ++ if (lastEraReversed !== eras[eras.length - 2]) ++ throw new RangeError('Invalid era data: invalid reverse-sign era'); ++ } ++ // Finally, add a "genericName" property in the format "era{n} where `n` is ++ // zero-based index, with the oldest era being zero. This format is used by ++ // older versions of ICU data. ++ eras.forEach((e, i) => { ++ e.genericName = `era${eras.length - 1 - i}`; ++ }); ++ return { eras: eras, anchorEra: (anchorEra || eras[0]) }; ++} ++function isGregorianLeapYear(year) { ++ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); ++} ++/** Base for all Gregorian-like calendars. */ ++class GregorianBaseHelper extends HelperBase { ++ constructor(id, originalEras) { ++ super(); ++ this.calendarType = 'solar'; ++ // Several calendars based on the Gregorian calendar use Julian dates (not ++ // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See ++ // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158. ++ this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z') ++ .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' }) ++ .startsWith('12'); ++ this.calendarIsVulnerableToJulianBug = false; ++ this.id = id; ++ const { eras, anchorEra } = adjustEras(originalEras); ++ this.anchorEra = anchorEra; ++ this.eras = eras; ++ } ++ inLeapYear(calendarDate) { ++ // Calendars that don't override this method use the same months and leap ++ // years as Gregorian. Once we know the ISO year corresponding to the ++ // calendar year, we'll know if it's a leap year or not. ++ const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year }); ++ return isGregorianLeapYear(year); ++ } ++ monthsInYear( /* calendarDate */) { ++ return 12; ++ } ++ minimumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ if (month === 2) ++ return this.inLeapYear(calendarDate) ? 29 : 28; ++ return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31; ++ } ++ maximumMonthLength(calendarDate) { ++ return this.minimumMonthLength(calendarDate); ++ } ++ /** Fill in missing parts of the (year, era, eraYear) tuple */ ++ completeEraYear(calendarDate) { ++ const checkField = (name, value) => { ++ const currentValue = calendarDate[name]; ++ if (currentValue != null && currentValue != value) { ++ throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`); ++ } ++ }; ++ const eraFromYear = (year) => { ++ let eraYear; ++ const adjustedCalendarDate = { ...calendarDate, year }; ++ const matchingEra = this.eras.find((e, i) => { ++ if (i === this.eras.length - 1) { ++ if (e.reverseOf) { ++ // This is a reverse-sign era (like BCE) which must be the oldest ++ // era. Count years backwards. ++ if (year > 0) ++ throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`); ++ eraYear = e.anchorEpoch.year - year; ++ return true; ++ } ++ // last era always gets all "leftover" (older than epoch) years, ++ // so no need for a comparison like below. ++ eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1); ++ return true; ++ } ++ const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch); ++ if (comparison >= 0) { ++ eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1); ++ return true; ++ } ++ return false; ++ }); ++ if (!matchingEra) ++ throw new RangeError(`Year ${year} was not matched by any era`); ++ return { eraYear: eraYear, era: matchingEra.name }; ++ }; ++ let { year, eraYear, era } = calendarDate; ++ if (year != null) { ++ ({ eraYear, era } = eraFromYear(year)); ++ checkField('era', era); ++ checkField('eraYear', eraYear); ++ } ++ else if (eraYear != null) { ++ const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era); ++ if (!matchingEra) ++ throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`); ++ if (eraYear < 1 && matchingEra.reverseOf) { ++ throw new RangeError(`Years in ${era} era must be positive, not ${year}`); ++ } ++ if (matchingEra.reverseOf) { ++ year = matchingEra.anchorEpoch.year - eraYear; ++ } ++ else { ++ year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1); ++ } ++ checkField('year', year); ++ // We'll accept dates where the month/day is earlier than the start of ++ // the era or after its end as long as it's in the same year. If that ++ // happens, we'll adjust the era/eraYear pair to be the correct era for ++ // the `year`. ++ ({ eraYear, era } = eraFromYear(year)); ++ } ++ else { ++ throw new RangeError('Either `year` or `eraYear` and `era` are required'); ++ } ++ return { ...calendarDate, year, eraYear, era }; ++ } ++ adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') { ++ let calendarDate = calendarDateParam; ++ // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number ++ const { month, monthCode } = calendarDate; ++ if (month === undefined) ++ calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) }; ++ this.validateCalendarDate(calendarDate); ++ calendarDate = this.completeEraYear(calendarDate); ++ return super.adjustCalendarDate(calendarDate, cache, overflow); ++ } ++ estimateIsoDate(calendarDateParam) { ++ const calendarDate = this.adjustCalendarDate(calendarDateParam); ++ const { year, month, day } = calendarDate; ++ const { anchorEra } = this; ++ const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1); ++ return RegulateISODate(isoYearEstimate, month, day, 'constrain'); ++ } ++ checkIcuBugs(isoDate) { ++ if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) { ++ const beforeJulianSwitch = CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0; ++ if (beforeJulianSwitch) { ++ throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` + ++ ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)'); ++ } ++ } ++ } ++} ++class OrthodoxBaseHelper extends GregorianBaseHelper { ++ constructor(id, originalEras) { ++ super(id, originalEras); ++ } ++ inLeapYear(calendarDate) { ++ // Leap years happen one year before the Julian leap year. Note that this ++ // calendar is based on the Julian calendar which has a leap year every 4 ++ // years, unlike the Gregorian calendar which doesn't have leap years on ++ // years divisible by 100 except years divisible by 400. ++ // ++ // Note that we're assuming that leap years in before-epoch times match ++ // how leap years are defined now. This is probably not accurate but I'm ++ // not sure how better to do it. ++ const { year } = calendarDate; ++ return (year + 1) % 4 === 0; ++ } ++ monthsInYear( /* calendarDate */) { ++ return 13; ++ } ++ minimumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month. ++ if (month === 13) ++ return this.inLeapYear(calendarDate) ? 6 : 5; ++ return 30; ++ } ++ maximumMonthLength(calendarDate) { ++ return this.minimumMonthLength(calendarDate); ++ } ++} ++// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar, ++// with the following differences: ++// - Coptic uses BCE-like positive numbers for years before its epoch (the other ++// two use negative year numbers before epoch) ++// - Coptic has a different epoch date ++// - Ethiopic has an additional second era that starts at the same date as the ++// zero era of ethioaa. ++class EthioaaHelper extends OrthodoxBaseHelper { ++ constructor() { ++ super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]); ++ } ++} ++class CopticHelper extends OrthodoxBaseHelper { ++ constructor() { ++ super('coptic', [ ++ { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } }, ++ { name: 'era0', reverseOf: 'era1' } ++ ]); ++ } ++} ++// Anchor is currently the older era to match ethioaa, but should it be the newer era? ++// See https://github.com/tc39/ecma402/issues/534 for discussion. ++class EthiopicHelper extends OrthodoxBaseHelper { ++ constructor() { ++ super('ethiopic', [ ++ { name: 'aa', isoEpoch: { year: -5492, month: 7, day: 17 } }, ++ { name: 'am', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } } ++ ]); ++ } ++} ++class RocHelper extends GregorianBaseHelper { ++ constructor() { ++ super('roc', [ ++ { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } }, ++ { name: 'before-roc', reverseOf: 'minguo' } ++ ]); ++ this.calendarIsVulnerableToJulianBug = true; ++ } ++} ++class BuddhistHelper extends GregorianBaseHelper { ++ constructor() { ++ super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]); ++ this.calendarIsVulnerableToJulianBug = true; ++ } ++} ++class GregoryHelper extends GregorianBaseHelper { ++ constructor() { ++ super('gregory', [ ++ { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } }, ++ { name: 'bce', reverseOf: 'ce' } ++ ]); ++ } ++ reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) { ++ let { era, eraYear } = calendarDate; ++ // Firefox 96 introduced a bug where the `'short'` format of the era ++ // option mistakenly returns the one-letter (narrow) format instead. The ++ // code below handles either the correct or Firefox-buggy format. See ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253 ++ if (era === 'bc' || era === 'b') ++ era = 'bce'; ++ if (era === 'ad' || era === 'a') ++ era = 'ce'; ++ return { era, eraYear }; ++ } ++} ++// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates ++// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji ++// eras include: ++// - Start/end dates of older eras are not precisely defined, which is ++// challenging given Temporal's need for precision ++// - Some era dates and/or names are disputed by historians ++// - As historical research proceeds, new eras are discovered and existing era ++// dates are modified, leading to considerable churn which is not good for ++// Temporal use. ++// - The earliest era (in 645 CE) may not end up being the earliest depending ++// on future historical scholarship ++// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK ++// that's not reflected in the ICU implementation. ++// ++// For more discussion: https://github.com/tc39/proposal-temporal/issues/526. ++// ++// Here's a full list of CLDR/ICU eras: ++// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818 ++// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546 ++// ++// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a ++// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not ++// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402 ++// Japanese calendar doesn't seem to take this into account, so neither do we: ++// > args = ['en-ca-u-ca-japanese', { era: 'short' }] ++// > new Date('1873-01-01T12:00').toLocaleString(...args) ++// '1 1, 6 Meiji, 12:00:00 PM' ++// > new Date('1872-12-31T12:00').toLocaleString(...args) ++// '12 31, 5 Meiji, 12:00:00 PM' ++class JapaneseHelper extends GregorianBaseHelper { ++ constructor() { ++ super('japanese', [ ++ // The Japanese calendar `year` is just the ISO year, because (unlike other ++ // ICU calendars) there's no obvious "default era", we use the ISO year. ++ { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } }, ++ { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } }, ++ { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } }, ++ { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } }, ++ { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } }, ++ { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } }, ++ { name: 'bce', reverseOf: 'ce' } ++ ]); ++ this.calendarIsVulnerableToJulianBug = true; ++ // The last 3 Japanese eras confusingly return only one character in the ++ // default "short" era, so need to use the long format. ++ this.eraLength = 'long'; ++ } ++ reviseIntlEra(calendarDate, isoDate) { ++ const { era, eraYear } = calendarDate; ++ const { year: isoYear } = isoDate; ++ if (this.eras.find((e) => e.name === era)) ++ return { era, eraYear }; ++ return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear }); ++ } ++} ++class ChineseBaseHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.calendarType = 'lunisolar'; ++ // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ this.hasEra = false; ++ } ++ inLeapYear(calendarDate, cache) { ++ const months = this.getMonthList(calendarDate.year, cache); ++ return ObjectEntries(months).length === 13; ++ } ++ monthsInYear(calendarDate, cache) { ++ return this.inLeapYear(calendarDate, cache) ? 13 : 12; ++ } ++ minimumMonthLength( /* calendarDate */) { ++ return 29; ++ } ++ maximumMonthLength( /* calendarDate */) { ++ return 30; ++ } ++ getMonthList(calendarYear, cache) { ++ if (calendarYear === undefined) { ++ throw new TypeError('Missing year'); ++ } ++ const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id }); ++ const cached = cache.get(key); ++ if (cached) ++ return cached; ++ const dateTimeFormat = this.getFormatter(); ++ const getCalendarDate = (isoYear, daysPastFeb1) => { ++ const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 }); ++ const legacyDate = new Date(isoStringFeb1); ++ // Now add the requested number of days, which may wrap to the next month. ++ legacyDate.setUTCDate(daysPastFeb1 + 1); ++ const newYearGuess = dateTimeFormat.formatToParts(legacyDate); ++ const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value; ++ const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value; ++ let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear'); ++ if (calendarYearToVerify !== undefined) { ++ calendarYearToVerify = +calendarYearToVerify.value; ++ } ++ else { ++ // Node 12 has outdated ICU data that lacks the `relatedYear` field in the ++ // output of Intl.DateTimeFormat.formatToParts. ++ throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`); ++ } ++ return { calendarMonthString, calendarDay, calendarYearToVerify }; ++ }; ++ // First, find a date close to Chinese New Year. Feb 17 will either be in ++ // the first month or near the end of the last month of the previous year. ++ let isoDaysDelta = 17; ++ let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta); ++ // If we didn't guess the first month correctly, add (almost in some months) ++ // a lunar month ++ if (calendarMonthString !== '1') { ++ isoDaysDelta += 29; ++ ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta)); ++ } ++ // Now back up to near the start of the first month, but not too near that ++ // off-by-one issues matter. ++ isoDaysDelta -= calendarDay - 5; ++ const result = {}; ++ let monthIndex = 1; ++ let oldCalendarDay; ++ let oldMonthString; ++ let done = false; ++ do { ++ ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta)); ++ if (oldCalendarDay) { ++ result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay; ++ } ++ if (calendarYearToVerify !== calendarYear) { ++ done = true; ++ } ++ else { ++ result[calendarMonthString] = { monthIndex: monthIndex++ }; ++ // Move to the next month. Because months are sometimes 29 days, the day of the ++ // calendar month will move forward slowly but not enough to flip over to a new ++ // month before the loop ends at 12-13 months. ++ isoDaysDelta += 30; ++ } ++ oldCalendarDay = calendarDay; ++ oldMonthString = calendarMonthString; ++ } while (!done); ++ result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay; ++ cache.set(key, result); ++ return result; ++ } ++ estimateIsoDate(calendarDate) { ++ const { year, month } = calendarDate; ++ return { year, month: month >= 12 ? 12 : month + 1, day: 1 }; ++ } ++ adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) { ++ let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate; ++ if (fromLegacyDate) { ++ // Legacy Date output returns a string that's an integer with an optional ++ // "bis" suffix used only by the Chinese/Dangi calendar to indicate a leap ++ // month. Below we'll normalize the output. ++ year = eraYear; ++ if (monthExtra && monthExtra !== 'bis') ++ throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`); ++ const monthCode = buildMonthCode(month, monthExtra !== undefined); ++ const monthString = `${month}${monthExtra || ''}`; ++ const months = this.getMonthList(year, cache); ++ const monthInfo = months[monthString]; ++ if (monthInfo === undefined) ++ throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`); ++ month = monthInfo.monthIndex; ++ return { year: year, month, day: day, era: undefined, eraYear, monthCode }; ++ } ++ else { ++ // When called without input coming from legacy Date output, ++ // simply ensure that all fields are present. ++ this.validateCalendarDate(calendarDate); ++ if (year === undefined) ++ year = eraYear; ++ if (eraYear === undefined) ++ eraYear = year; ++ if (month === undefined) { ++ const months = this.getMonthList(year, cache); ++ let numberPart = monthCode.replace('L', 'bis').slice(1); ++ if (numberPart[0] === '0') ++ numberPart = numberPart.slice(1); ++ let monthInfo = months[numberPart]; ++ month = monthInfo && monthInfo.monthIndex; ++ // If this leap month isn't present in this year, constrain down to the last day of the previous month. ++ if (month === undefined && ++ monthCode.endsWith('L') && ++ !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) && ++ overflow === 'constrain') { ++ let withoutML = monthCode.slice(1, -1); ++ if (withoutML[0] === '0') ++ withoutML = withoutML.slice(1); ++ monthInfo = months[withoutML]; ++ if (monthInfo) { ++ ({ daysInMonth: day, monthIndex: month } = monthInfo); ++ monthCode = buildMonthCode(withoutML); ++ } ++ } ++ if (month === undefined) { ++ throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`); ++ } ++ } ++ else if (monthCode === undefined) { ++ const months = this.getMonthList(year, cache); ++ const monthEntries = ObjectEntries(months); ++ const largestMonth = monthEntries.length; ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, largestMonth); ++ RejectToRange(day, 1, this.maximumMonthLength()); ++ } ++ else { ++ month = ConstrainToRange(month, 1, largestMonth); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength()); ++ } ++ const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month); ++ if (matchingMonthEntry === undefined) { ++ throw new RangeError(`Invalid month ${month} in Chinese year ${year}`); ++ } ++ monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1); ++ } ++ else { ++ // Both month and monthCode are present. Make sure they don't conflict. ++ const months = this.getMonthList(year, cache); ++ let numberPart = monthCode.replace('L', 'bis').slice(1); ++ if (numberPart[0] === '0') ++ numberPart = numberPart.slice(1); ++ const monthInfo = months[numberPart]; ++ if (!monthInfo) ++ throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`); ++ if (month !== monthInfo.monthIndex) { ++ throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`); ++ } ++ } ++ return { ++ ...calendarDate, ++ year: year, ++ eraYear, ++ month, ++ monthCode: monthCode, ++ day: day ++ }; ++ } ++ } ++} ++class ChineseHelper extends ChineseBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'chinese'; ++ } ++} ++// Dangi (Korean) calendar has same implementation as Chinese ++class DangiHelper extends ChineseBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'dangi'; ++ } ++} ++/** ++ * Common implementation of all non-ISO calendars. ++ * Per-calendar id and logic live in `id` and `helper` properties attached later. ++ * This split allowed an easy separation between code that was similar between ++ * ISO and non-ISO implementations vs. code that was very different. ++ */ ++const nonIsoImpl = { ++ // `helper` is added when this object is spread into each calendar's ++ // implementation ++ helper: undefined, ++ dateFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ const cache = new OneObjectCache(); ++ // Intentionally alphabetical ++ const fields = PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']); ++ const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache); ++ const result = CreateTemporalDate(year, month, day, calendar); ++ cache.setObject(result); ++ return result; ++ }, ++ yearMonthFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ const cache = new OneObjectCache(); ++ // Intentionally alphabetical ++ const fields = PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []); ++ const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache); ++ const result = CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day); ++ cache.setObject(result); ++ return result; ++ }, ++ monthDayFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ // All built-in calendars require `day`, but some allow other fields to be ++ // substituted for `month`. And for lunisolar calendars, either `monthCode` ++ // or `year` must be provided because `month` is ambiguous without a year or ++ // a code. ++ const cache = new OneObjectCache(); ++ const fields = PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']); ++ const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache); ++ // `year` is a reference year where this month/day exists in this calendar ++ const result = CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year); ++ cache.setObject(result); ++ return result; ++ }, ++ fields(fieldsParam) { ++ let fields = fieldsParam; ++ if (ArrayIncludes.call(fields, 'year')) ++ fields = [...fields, 'era', 'eraYear']; ++ return fields; ++ }, ++ mergeFields(fields, additionalFields) { ++ const fieldsCopy = { ...fields }; ++ const additionalFieldsCopy = { ...additionalFields }; ++ // era and eraYear are intentionally unused ++ // eslint-disable-next-line @typescript-eslint/no-unused-vars ++ const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy; ++ const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy; ++ if (newMonth === undefined && newMonthCode === undefined) { ++ original.month = month; ++ original.monthCode = monthCode; ++ } ++ if (newYear === undefined && newEra === undefined && newEraYear === undefined) { ++ // Only `year` is needed. We don't set era and eraYear because it's ++ // possible to create a conflict for eras that start or end mid-year. See ++ // https://github.com/tc39/proposal-temporal/issues/1784. ++ original.year = year; ++ } ++ return { ...original, ...additionalFieldsCopy }; ++ }, ++ dateAdd(date, years, months, weeks, days, overflow, calendar) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache); ++ const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache); ++ const { year, month, day } = isoAdded; ++ const newTemporalObject = CreateTemporalDate(year, month, day, calendar); ++ // The new object's cache starts with the cache of the old object ++ const newCache = new OneObjectCache(cache); ++ newCache.setObject(newTemporalObject); ++ return newTemporalObject; ++ }, ++ dateUntil(one, two, largestUnit) { ++ const cacheOne = OneObjectCache.getCacheForObject(one); ++ const cacheTwo = OneObjectCache.getCacheForObject(two); ++ const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne); ++ const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo); ++ const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne); ++ return result; ++ }, ++ year(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.year; ++ }, ++ month(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.month; ++ }, ++ day(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.day; ++ }, ++ era(date) { ++ if (!this.helper.hasEra) ++ return undefined; ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.era; ++ }, ++ eraYear(date) { ++ if (!this.helper.hasEra) ++ return undefined; ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.eraYear; ++ }, ++ monthCode(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.monthCode; ++ }, ++ dayOfWeek(date) { ++ return impl['iso8601'].dayOfWeek(date); ++ }, ++ dayOfYear(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.isoToCalendarDate(date, cache); ++ const startOfYear = this.helper.startOfCalendarYear(calendarDate); ++ const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache); ++ return diffDays + 1; ++ }, ++ weekOfYear(date) { ++ return impl['iso8601'].weekOfYear(date); ++ }, ++ daysInWeek(date) { ++ return impl['iso8601'].daysInWeek(date); ++ }, ++ daysInMonth(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ // Easy case: if the helper knows the length without any heavy calculation. ++ const max = this.helper.maximumMonthLength(calendarDate); ++ const min = this.helper.minimumMonthLength(calendarDate); ++ if (max === min) ++ return max; ++ // The harder case is where months vary every year, e.g. islamic calendars. ++ // Find the answer by calculating the difference in days between the first ++ // day of the current month and the first day of the next month. ++ const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate); ++ const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache); ++ const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache); ++ return result; ++ }, ++ daysInYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate); ++ const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache); ++ const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache); ++ return result; ++ }, ++ monthsInYear(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const result = this.helper.monthsInYear(calendarDate, cache); ++ return result; ++ }, ++ inLeapYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const result = this.helper.inLeapYear(calendarDate, cache); ++ return result; ++ } ++}; ++for (const Helper of [ ++ HebrewHelper, ++ PersianHelper, ++ EthiopicHelper, ++ EthioaaHelper, ++ CopticHelper, ++ ChineseHelper, ++ DangiHelper, ++ RocHelper, ++ IndianHelper, ++ BuddhistHelper, ++ GregoryHelper, ++ JapaneseHelper, ++ IslamicHelper, ++ IslamicUmalquraHelper, ++ IslamicTblaHelper, ++ IslamicCivilHelper, ++ IslamicRgsaHelper, ++ IslamicCcHelper ++]) { ++ const helper = new Helper(); ++ // Clone the singleton non-ISO implementation that's the same for all ++ // calendars. The `helper` property contains per-calendar logic. ++ impl[helper.id] = { ...nonIsoImpl, helper }; ++} ++ ++class PlainDate { ++ constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = GetISO8601Calendar()) { ++ const isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalDateSlots. This check ++ // exists only to improve the error message. ++ if (arguments.length < 3) { ++ throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required'); ++ } ++ CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar); ++ } ++ get calendar() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get era() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ get eraYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ get year() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ get month() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthCode() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get day() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfWeek() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get weekOfYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInWeek() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), this); ++ } ++ get daysInMonth() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ get daysInYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ get monthsInYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ get inLeapYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ with(temporalDateLike, optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalDateLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalDateLike); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const props = PrepareTemporalFields(temporalDateLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid date-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarDateFromFields(calendar, fields, options); ++ } ++ withCalendar(calendarParam) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar); ++ } ++ add(temporalDurationLike, optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const duration = ToTemporalDuration(temporalDurationLike); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options); ++ } ++ subtract(temporalDurationLike, optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const duration = CreateNegatedTemporalDuration(ToTemporalDuration(temporalDurationLike)); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDate('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDate('since', this, other, options); ++ } ++ equals(otherParam) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalDate(otherParam); ++ for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const showCalendar = ToShowCalendarOption(options); ++ return TemporalDateToString(this, showCalendar); ++ } ++ toJSON() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainDate'); ++ } ++ toPlainDateTime(temporalTimeParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const year = GetSlot(this, ISO_YEAR); ++ const month = GetSlot(this, ISO_MONTH); ++ const day = GetSlot(this, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ if (temporalTimeParam === undefined) ++ return CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar); ++ const temporalTime = ToTemporalTime(temporalTimeParam); ++ const hour = GetSlot(temporalTime, ISO_HOUR); ++ const minute = GetSlot(temporalTime, ISO_MINUTE); ++ const second = GetSlot(temporalTime, ISO_SECOND); ++ const millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ toZonedDateTime(item) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ let timeZone, temporalTime; ++ if (IsObject(item)) { ++ const timeZoneLike = item.timeZone; ++ if (timeZoneLike === undefined) { ++ // The cast below is needed because it's possible here for ++ // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`, ++ // not a TimeZoneProtocol. ++ // TODO: should we check for that shape to improve on the (bad) error ++ // message that the caller will get from ToTemporalTimeZone? ++ timeZone = ToTemporalTimeZone(item); ++ } ++ else { ++ timeZone = ToTemporalTimeZone(timeZoneLike); ++ temporalTime = item.plainTime; ++ } ++ } ++ else { ++ timeZone = ToTemporalTimeZone(item); ++ } ++ const year = GetSlot(this, ISO_YEAR); ++ const month = GetSlot(this, ISO_MONTH); ++ const day = GetSlot(this, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0; ++ if (temporalTime !== undefined) { ++ temporalTime = ToTemporalTime(temporalTime); ++ hour = GetSlot(temporalTime, ISO_HOUR); ++ minute = GetSlot(temporalTime, ISO_MINUTE); ++ second = GetSlot(temporalTime, ISO_SECOND); ++ millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ } ++ const dt = CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ toPlainYearMonth() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ toPlainMonthDay() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ getISOFields() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalDate(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR)); ++ } ++ return ToTemporalDate(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalDate(oneParam); ++ const two = ToTemporalDate(twoParam); ++ return CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY)); ++ } ++} ++MakeIntrinsicClass(PlainDate, 'Temporal.PlainDate'); ++ ++class PlainDateTime { ++ constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = GetISO8601Calendar()) { ++ const isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ const hour = ToIntegerThrowOnInfinity(hourParam); ++ const minute = ToIntegerThrowOnInfinity(minuteParam); ++ const second = ToIntegerThrowOnInfinity(secondParam); ++ const millisecond = ToIntegerThrowOnInfinity(millisecondParam); ++ const microsecond = ToIntegerThrowOnInfinity(microsecondParam); ++ const nanosecond = ToIntegerThrowOnInfinity(nanosecondParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This ++ // check exists only to improve the error message. ++ if (arguments.length < 3) { ++ throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required'); ++ } ++ CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ get calendar() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get year() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ get month() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthCode() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get day() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ get hour() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_HOUR); ++ } ++ get minute() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MINUTE); ++ } ++ get second() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_SECOND); ++ } ++ get millisecond() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MILLISECOND); ++ } ++ get microsecond() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MICROSECOND); ++ } ++ get nanosecond() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_NANOSECOND); ++ } ++ get era() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ get eraYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfWeek() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get weekOfYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInWeek() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), this); ++ } ++ get daysInYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInMonth() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthsInYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ get inLeapYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ with(temporalDateTimeLike, optionsParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalDateTimeLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike); ++ const options = GetOptionsObject(optionsParam); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const props = PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid date-time-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ withPlainTime(temporalTimeParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const year = GetSlot(this, ISO_YEAR); ++ const month = GetSlot(this, ISO_MONTH); ++ const day = GetSlot(this, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ if (temporalTimeParam === undefined) ++ return CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar); ++ const temporalTime = ToTemporalTime(temporalTimeParam); ++ const hour = GetSlot(temporalTime, ISO_HOUR); ++ const minute = GetSlot(temporalTime, ISO_MINUTE); ++ const second = GetSlot(temporalTime, ISO_SECOND); ++ const millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ withPlainDate(temporalDateParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const temporalDate = ToTemporalDate(temporalDateParam); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ let calendar = GetSlot(temporalDate, CALENDAR); ++ const hour = GetSlot(this, ISO_HOUR); ++ const minute = GetSlot(this, ISO_MINUTE); ++ const second = GetSlot(this, ISO_SECOND); ++ const millisecond = GetSlot(this, ISO_MILLISECOND); ++ const microsecond = GetSlot(this, ISO_MICROSECOND); ++ const nanosecond = GetSlot(this, ISO_NANOSECOND); ++ calendar = ConsolidateCalendars(GetSlot(this, CALENDAR), calendar); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ withCalendar(calendarParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar); ++ } ++ add(temporalDurationLike, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options); ++ } ++ subtract(temporalDurationLike, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDateTime('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDateTime('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED, ['day']); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const maximumIncrements = { ++ day: 1, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++ let year = GetSlot(this, ISO_YEAR); ++ let month = GetSlot(this, ISO_MONTH); ++ let day = GetSlot(this, ISO_DAY); ++ let hour = GetSlot(this, ISO_HOUR); ++ let minute = GetSlot(this, ISO_MINUTE); ++ let second = GetSlot(this, ISO_SECOND); ++ let millisecond = GetSlot(this, ISO_MILLISECOND); ++ let microsecond = GetSlot(this, ISO_MICROSECOND); ++ let nanosecond = GetSlot(this, ISO_NANOSECOND); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode)); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR)); ++ } ++ equals(otherParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalDateTime(otherParam); ++ for (const slot of [ ++ ISO_YEAR, ++ ISO_MONTH, ++ ISO_DAY, ++ ISO_HOUR, ++ ISO_MINUTE, ++ ISO_SECOND, ++ ISO_MILLISECOND, ++ ISO_MICROSECOND, ++ ISO_NANOSECOND ++ ]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const showCalendar = ToShowCalendarOption(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode }); ++ } ++ toJSON() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToString(this, 'auto'); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime'); ++ } ++ toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const timeZone = ToTemporalTimeZone(temporalTimeZoneLike); ++ const options = GetOptionsObject(optionsParam); ++ const disambiguation = ToTemporalDisambiguation(options); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR)); ++ } ++ toPlainDate() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToDate(this); ++ } ++ toPlainYearMonth() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ toPlainMonthDay() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ toPlainTime() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToTime(this); ++ } ++ getISOFields() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoHour: GetSlot(this, ISO_HOUR), ++ isoMicrosecond: GetSlot(this, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(this, ISO_MILLISECOND), ++ isoMinute: GetSlot(this, ISO_MINUTE), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoNanosecond: GetSlot(this, ISO_NANOSECOND), ++ isoSecond: GetSlot(this, ISO_SECOND), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR)); ++ } ++ return ToTemporalDateTime(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalDateTime(oneParam); ++ const two = ToTemporalDateTime(twoParam); ++ for (const slot of [ ++ ISO_YEAR, ++ ISO_MONTH, ++ ISO_DAY, ++ ISO_HOUR, ++ ISO_MINUTE, ++ ISO_SECOND, ++ ISO_MILLISECOND, ++ ISO_MICROSECOND, ++ ISO_NANOSECOND ++ ]) { ++ const val1 = GetSlot(one, slot); ++ const val2 = GetSlot(two, slot); ++ if (val1 !== val2) ++ return ComparisonResult(val1 - val2); ++ } ++ return 0; ++ } ++} ++MakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime'); ++ ++class Duration { ++ constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) { ++ const years = ToIntegerWithoutRounding(yearsParam); ++ const months = ToIntegerWithoutRounding(monthsParam); ++ const weeks = ToIntegerWithoutRounding(weeksParam); ++ const days = ToIntegerWithoutRounding(daysParam); ++ const hours = ToIntegerWithoutRounding(hoursParam); ++ const minutes = ToIntegerWithoutRounding(minutesParam); ++ const seconds = ToIntegerWithoutRounding(secondsParam); ++ const milliseconds = ToIntegerWithoutRounding(millisecondsParam); ++ const microseconds = ToIntegerWithoutRounding(microsecondsParam); ++ const nanoseconds = ToIntegerWithoutRounding(nanosecondsParam); ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ CreateSlots(this); ++ SetSlot(this, YEARS, years); ++ SetSlot(this, MONTHS, months); ++ SetSlot(this, WEEKS, weeks); ++ SetSlot(this, DAYS, days); ++ SetSlot(this, HOURS, hours); ++ SetSlot(this, MINUTES, minutes); ++ SetSlot(this, SECONDS, seconds); ++ SetSlot(this, MILLISECONDS, milliseconds); ++ SetSlot(this, MICROSECONDS, microseconds); ++ SetSlot(this, NANOSECONDS, nanoseconds); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${TemporalDurationToString(this)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get years() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, YEARS); ++ } ++ get months() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MONTHS); ++ } ++ get weeks() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, WEEKS); ++ } ++ get days() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, DAYS); ++ } ++ get hours() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, HOURS); ++ } ++ get minutes() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MINUTES); ++ } ++ get seconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, SECONDS); ++ } ++ get milliseconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MILLISECONDS); ++ } ++ get microseconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MICROSECONDS); ++ } ++ get nanoseconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, NANOSECONDS); ++ } ++ get sign() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)); ++ } ++ get blank() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return (DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0); ++ } ++ with(durationLike) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ const props = PrepareTemporalFields(durationLike, ++ // NOTE: Field order here is important. ++ [ ++ 'days', ++ 'hours', ++ 'microseconds', ++ 'milliseconds', ++ 'minutes', ++ 'months', ++ 'nanoseconds', ++ 'seconds', ++ 'weeks', ++ 'years' ++ ], 'partial'); ++ if (!props) { ++ throw new TypeError('invalid duration-like'); ++ } ++ const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props; ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ negated() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return CreateNegatedTemporalDuration(this); ++ } ++ abs() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS))); ++ } ++ add(other, options = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromDuration('add', this, other, options); ++ } ++ subtract(other, options = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ let years = GetSlot(this, YEARS); ++ let months = GetSlot(this, MONTHS); ++ let weeks = GetSlot(this, WEEKS); ++ let days = GetSlot(this, DAYS); ++ let hours = GetSlot(this, HOURS); ++ let minutes = GetSlot(this, MINUTES); ++ let seconds = GetSlot(this, SECONDS); ++ let milliseconds = GetSlot(this, MILLISECONDS); ++ let microseconds = GetSlot(this, MICROSECONDS); ++ let nanoseconds = GetSlot(this, NANOSECONDS); ++ let defaultLargestUnit = DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ let smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined); ++ let smallestUnitPresent = true; ++ if (!smallestUnit) { ++ smallestUnitPresent = false; ++ smallestUnit = 'nanosecond'; ++ } ++ defaultLargestUnit = LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']); ++ let largestUnitPresent = true; ++ if (!largestUnit) { ++ largestUnitPresent = false; ++ largestUnit = defaultLargestUnit; ++ } ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (!smallestUnitPresent && !largestUnitPresent) { ++ throw new RangeError('at least one of smallestUnit or largestUnit is required'); ++ } ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ let relativeTo = ToRelativeTemporalObject(options); ++ ({ years, months, weeks, days } = UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo)); ++ ({ years, months, weeks, days } = BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo)); ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ relativeTo = MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0); ++ } ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo)); ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ total(optionsParam) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ let years = GetSlot(this, YEARS); ++ let months = GetSlot(this, MONTHS); ++ let weeks = GetSlot(this, WEEKS); ++ let days = GetSlot(this, DAYS); ++ let hours = GetSlot(this, HOURS); ++ let minutes = GetSlot(this, MINUTES); ++ let seconds = GetSlot(this, SECONDS); ++ let milliseconds = GetSlot(this, MILLISECONDS); ++ let microseconds = GetSlot(this, MICROSECONDS); ++ let nanoseconds = GetSlot(this, NANOSECONDS); ++ if (optionsParam === undefined) ++ throw new TypeError('options argument is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('unit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const unit = GetTemporalUnit(options, 'unit', 'datetime', REQUIRED); ++ const relativeTo = ToRelativeTemporalObject(options); ++ // Convert larger units down to days ++ ({ years, months, weeks, days } = UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo)); ++ // If the unit we're totalling is smaller than `days`, convert days down to that unit. ++ let intermediate; ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ intermediate = MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0); ++ } ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate)); ++ // Finally, truncate to the correct unit and calculate remainder ++ const { total } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo); ++ return total; ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ if (precision === 'minute') ++ throw new RangeError('smallestUnit must not be "minute"'); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalDurationToString(this, precision, { unit, increment, roundingMode }); ++ } ++ toJSON() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDurationToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') { ++ return new Intl.DurationFormat(locales, options).format(this); ++ } ++ console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.'); ++ return TemporalDurationToString(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() to compare Temporal.Duration'); ++ } ++ static from(item) { ++ if (IsTemporalDuration(item)) { ++ return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS)); ++ } ++ return ToTemporalDuration(item); ++ } ++ static compare(oneParam, twoParam, optionsParam = undefined) { ++ const one = ToTemporalDuration(oneParam); ++ const two = ToTemporalDuration(twoParam); ++ const options = GetOptionsObject(optionsParam); ++ const relativeTo = ToRelativeTemporalObject(options); ++ const y1 = GetSlot(one, YEARS); ++ const mon1 = GetSlot(one, MONTHS); ++ const w1 = GetSlot(one, WEEKS); ++ let d1 = GetSlot(one, DAYS); ++ const h1 = GetSlot(one, HOURS); ++ const min1 = GetSlot(one, MINUTES); ++ const s1 = GetSlot(one, SECONDS); ++ const ms1 = GetSlot(one, MILLISECONDS); ++ const µs1 = GetSlot(one, MICROSECONDS); ++ let ns1 = GetSlot(one, NANOSECONDS); ++ const y2 = GetSlot(two, YEARS); ++ const mon2 = GetSlot(two, MONTHS); ++ const w2 = GetSlot(two, WEEKS); ++ let d2 = GetSlot(two, DAYS); ++ const h2 = GetSlot(two, HOURS); ++ const min2 = GetSlot(two, MINUTES); ++ const s2 = GetSlot(two, SECONDS); ++ const ms2 = GetSlot(two, MILLISECONDS); ++ const µs2 = GetSlot(two, MICROSECONDS); ++ let ns2 = GetSlot(two, NANOSECONDS); ++ const shift1 = CalculateOffsetShift(relativeTo, y1, mon1, w1, d1); ++ const shift2 = CalculateOffsetShift(relativeTo, y2, mon2, w2, d2); ++ if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) { ++ ({ days: d1 } = UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo)); ++ ({ days: d2 } = UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo)); ++ } ++ const totalNs1 = TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1); ++ const totalNs2 = TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2); ++ return ComparisonResult(JSBI__default["default"].toNumber(JSBI__default["default"].subtract(totalNs1, totalNs2))); ++ } ++} ++MakeIntrinsicClass(Duration, 'Temporal.Duration'); ++ ++const ObjectCreate$1 = Object.create; ++class PlainMonthDay { ++ constructor(isoMonthParam, isoDayParam, calendarParam = GetISO8601Calendar(), referenceISOYearParam = 1972) { ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ const referenceISOYear = ToIntegerThrowOnInfinity(referenceISOYearParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This ++ // check exists only to improve the error message. ++ if (arguments.length < 2) { ++ throw new RangeError('missing argument: isoMonth and isoDay are required'); ++ } ++ CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear); ++ } ++ get monthCode() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get day() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ get calendar() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ with(temporalMonthDayLike, optionsParam = undefined) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalMonthDayLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const props = PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid month-day-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarMonthDayFromFields(calendar, fields, options); ++ } ++ equals(otherParam) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalMonthDay(otherParam); ++ for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const showCalendar = ToShowCalendarOption(options); ++ return TemporalMonthDayToString(this, showCalendar); ++ } ++ toJSON() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalMonthDayToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use equals() to compare Temporal.PlainMonthDay'); ++ } ++ toPlainDate(item) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) ++ throw new TypeError('argument should be an object'); ++ const calendar = GetSlot(this, CALENDAR); ++ const receiverFieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, receiverFieldNames, []); ++ const inputFieldNames = CalendarFields(calendar, ['year']); ++ const inputFields = PrepareTemporalFields(item, inputFieldNames, []); ++ let mergedFields = CalendarMergeFields(calendar, fields, inputFields); ++ // TODO: Use MergeLists abstract operation. ++ const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])]; ++ mergedFields = PrepareTemporalFields(mergedFields, mergedFieldNames, []); ++ const options = ObjectCreate$1(null); ++ options.overflow = 'reject'; ++ return CalendarDateFromFields(calendar, mergedFields, options); ++ } ++ getISOFields() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalMonthDay(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR)); ++ } ++ return ToTemporalMonthDay(item, options); ++ } ++} ++MakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay'); ++ ++const instant = () => { ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ return new Instant(SystemUTCEpochNanoSeconds()); ++}; ++const plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => { ++ const tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ const calendar = ToTemporalCalendar(calendarLike); ++ const inst = instant(); ++ return BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar); ++}; ++const plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => { ++ const tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ const calendar = GetISO8601Calendar(); ++ const inst = instant(); ++ return BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar); ++}; ++const zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => { ++ const tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ const calendar = ToTemporalCalendar(calendarLike); ++ return CreateTemporalZonedDateTime(SystemUTCEpochNanoSeconds(), tZ, calendar); ++}; ++const zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => { ++ return zonedDateTime(GetISO8601Calendar(), temporalTimeZoneLike); ++}; ++const plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => { ++ return TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike)); ++}; ++const plainDateISO = (temporalTimeZoneLike = timeZone()) => { ++ return TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike)); ++}; ++const plainTimeISO = (temporalTimeZoneLike = timeZone()) => { ++ return TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike)); ++}; ++const timeZone = () => { ++ return SystemTimeZone(); ++}; ++const Now = { ++ instant, ++ plainDateTime, ++ plainDateTimeISO, ++ plainDate, ++ plainDateISO, ++ plainTimeISO, ++ timeZone, ++ zonedDateTime, ++ zonedDateTimeISO, ++ [Symbol.toStringTag]: 'Temporal.Now' ++}; ++Object.defineProperty(Now, Symbol.toStringTag, { ++ value: 'Temporal.Now', ++ writable: false, ++ enumerable: false, ++ configurable: true ++}); ++ ++const ObjectAssign = Object.assign; ++function TemporalTimeToString(time, precision, options = undefined) { ++ let hour = GetSlot(time, ISO_HOUR); ++ let minute = GetSlot(time, ISO_MINUTE); ++ let second = GetSlot(time, ISO_SECOND); ++ let millisecond = GetSlot(time, ISO_MILLISECOND); ++ let microsecond = GetSlot(time, ISO_MICROSECOND); ++ let nanosecond = GetSlot(time, ISO_NANOSECOND); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode)); ++ } ++ const hourString = ISODateTimePartString(hour); ++ const minuteString = ISODateTimePartString(minute); ++ const seconds = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision); ++ return `${hourString}:${minuteString}${seconds}`; ++} ++class PlainTime { ++ constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) { ++ const isoHour = ToIntegerThrowOnInfinity(isoHourParam); ++ const isoMinute = ToIntegerThrowOnInfinity(isoMinuteParam); ++ const isoSecond = ToIntegerThrowOnInfinity(isoSecondParam); ++ const isoMillisecond = ToIntegerThrowOnInfinity(isoMillisecondParam); ++ const isoMicrosecond = ToIntegerThrowOnInfinity(isoMicrosecondParam); ++ const isoNanosecond = ToIntegerThrowOnInfinity(isoNanosecondParam); ++ RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond); ++ CreateSlots(this); ++ SetSlot(this, ISO_HOUR, isoHour); ++ SetSlot(this, ISO_MINUTE, isoMinute); ++ SetSlot(this, ISO_SECOND, isoSecond); ++ SetSlot(this, ISO_MILLISECOND, isoMillisecond); ++ SetSlot(this, ISO_MICROSECOND, isoMicrosecond); ++ SetSlot(this, ISO_NANOSECOND, isoNanosecond); ++ SetSlot(this, CALENDAR, GetISO8601Calendar()); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get calendar() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ // PlainTime's calendar isn't settable, so can't be a userland calendar ++ return GetSlot(this, CALENDAR); ++ } ++ get hour() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_HOUR); ++ } ++ get minute() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MINUTE); ++ } ++ get second() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_SECOND); ++ } ++ get millisecond() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MILLISECOND); ++ } ++ get microsecond() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MICROSECOND); ++ } ++ get nanosecond() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_NANOSECOND); ++ } ++ with(temporalTimeLike, optionsParam = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalTimeLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalTimeLike); ++ const partialTime = ToTemporalTimeRecord(temporalTimeLike, 'partial'); ++ const options = GetOptionsObject(optionsParam); ++ const overflow = ToTemporalOverflow(options); ++ const fields = ToTemporalTimeRecord(this); ++ let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow)); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ add(temporalDurationLike) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike); ++ } ++ subtract(temporalDurationLike) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainTime('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainTime('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const MAX_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false); ++ let hour = GetSlot(this, ISO_HOUR); ++ let minute = GetSlot(this, ISO_MINUTE); ++ let second = GetSlot(this, ISO_SECOND); ++ let millisecond = GetSlot(this, ISO_MILLISECOND); ++ let microsecond = GetSlot(this, ISO_MICROSECOND); ++ let nanosecond = GetSlot(this, ISO_NANOSECOND); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode)); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ equals(otherParam) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalTime(otherParam); ++ for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return true; ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalTimeToString(this, precision, { unit, increment, roundingMode }); ++ } ++ toJSON() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalTimeToString(this, 'auto'); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainTime'); ++ } ++ toPlainDateTime(temporalDateParam) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ const temporalDate = ToTemporalDate(temporalDateParam); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ const calendar = GetSlot(temporalDate, CALENDAR); ++ const hour = GetSlot(this, ISO_HOUR); ++ const minute = GetSlot(this, ISO_MINUTE); ++ const second = GetSlot(this, ISO_SECOND); ++ const millisecond = GetSlot(this, ISO_MILLISECOND); ++ const microsecond = GetSlot(this, ISO_MICROSECOND); ++ const nanosecond = GetSlot(this, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ toZonedDateTime(item) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) { ++ throw new TypeError('invalid argument'); ++ } ++ const dateLike = item.plainDate; ++ if (dateLike === undefined) { ++ throw new TypeError('missing date property'); ++ } ++ const temporalDate = ToTemporalDate(dateLike); ++ const timeZoneLike = item.timeZone; ++ if (timeZoneLike === undefined) { ++ throw new TypeError('missing timeZone property'); ++ } ++ const timeZone = ToTemporalTimeZone(timeZoneLike); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ const calendar = GetSlot(temporalDate, CALENDAR); ++ const hour = GetSlot(this, ISO_HOUR); ++ const minute = GetSlot(this, ISO_MINUTE); ++ const second = GetSlot(this, ISO_SECOND); ++ const millisecond = GetSlot(this, ISO_MILLISECOND); ++ const microsecond = GetSlot(this, ISO_MICROSECOND); ++ const nanosecond = GetSlot(this, ISO_NANOSECOND); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ getISOFields() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoHour: GetSlot(this, ISO_HOUR), ++ isoMicrosecond: GetSlot(this, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(this, ISO_MILLISECOND), ++ isoMinute: GetSlot(this, ISO_MINUTE), ++ isoNanosecond: GetSlot(this, ISO_NANOSECOND), ++ isoSecond: GetSlot(this, ISO_SECOND) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ const overflow = ToTemporalOverflow(options); ++ if (IsTemporalTime(item)) { ++ return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND)); ++ } ++ return ToTemporalTime(item, overflow); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalTime(oneParam); ++ const two = ToTemporalTime(twoParam); ++ for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) { ++ const val1 = GetSlot(one, slot); ++ const val2 = GetSlot(two, slot); ++ if (val1 !== val2) ++ return ComparisonResult(val1 - val2); ++ } ++ return 0; ++ } ++} ++MakeIntrinsicClass(PlainTime, 'Temporal.PlainTime'); ++ ++class TimeZone { ++ constructor(timeZoneIdentifierParam) { ++ // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw. ++ // This check exists only to improve the error message. ++ if (arguments.length < 1) { ++ throw new RangeError('missing argument: identifier is required'); ++ } ++ const timeZoneIdentifier = GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam); ++ CreateSlots(this); ++ SetSlot(this, TIMEZONE_ID, timeZoneIdentifier); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get id() { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ getOffsetNanosecondsFor(instantParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const instant = ToTemporalInstant(instantParam); ++ const id = GetSlot(this, TIMEZONE_ID); ++ if (TestTimeZoneOffsetString(id)) { ++ return ParseTimeZoneOffsetString(id); ++ } ++ return GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id); ++ } ++ getOffsetStringFor(instantParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const instant = ToTemporalInstant(instantParam); ++ return BuiltinTimeZoneGetOffsetStringFor(this, instant); ++ } ++ getPlainDateTimeFor(instantParam, calendarParam = GetISO8601Calendar()) { ++ const instant = ToTemporalInstant(instantParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar); ++ } ++ getInstantFor(dateTimeParam, optionsParam = undefined) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const dateTime = ToTemporalDateTime(dateTimeParam); ++ const options = GetOptionsObject(optionsParam); ++ const disambiguation = ToTemporalDisambiguation(options); ++ return BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation); ++ } ++ getPossibleInstantsFor(dateTimeParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const dateTime = ToTemporalDateTime(dateTimeParam); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ const id = GetSlot(this, TIMEZONE_ID); ++ if (TestTimeZoneOffsetString(id)) { ++ const epochNs = GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ if (epochNs === null) ++ throw new RangeError('DateTime outside of supported range'); ++ const offsetNs = ParseTimeZoneOffsetString(id); ++ return [new Instant(JSBI__default["default"].subtract(epochNs, JSBI__default["default"].BigInt(offsetNs)))]; ++ } ++ const possibleEpochNs = GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ return possibleEpochNs.map((ns) => new Instant(ns)); ++ } ++ getNextTransition(startingPointParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const startingPoint = ToTemporalInstant(startingPointParam); ++ const id = GetSlot(this, TIMEZONE_ID); ++ // Offset time zones or UTC have no transitions ++ if (TestTimeZoneOffsetString(id) || id === 'UTC') { ++ return null; ++ } ++ let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ epochNanoseconds = GetIANATimeZoneNextTransition(epochNanoseconds, id); ++ return epochNanoseconds === null ? null : new Instant(epochNanoseconds); ++ } ++ getPreviousTransition(startingPointParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const startingPoint = ToTemporalInstant(startingPointParam); ++ const id = GetSlot(this, TIMEZONE_ID); ++ // Offset time zones or UTC have no transitions ++ if (TestTimeZoneOffsetString(id) || id === 'UTC') { ++ return null; ++ } ++ let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ epochNanoseconds = GetIANATimeZonePreviousTransition(epochNanoseconds, id); ++ return epochNanoseconds === null ? null : new Instant(epochNanoseconds); ++ } ++ toString() { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(GetSlot(this, TIMEZONE_ID)); ++ } ++ toJSON() { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ static from(item) { ++ return ToTemporalTimeZone(item); ++ } ++} ++MakeIntrinsicClass(TimeZone, 'Temporal.TimeZone'); ++ ++const ObjectCreate = Object.create; ++class PlainYearMonth { ++ constructor(isoYearParam, isoMonthParam, calendarParam = GetISO8601Calendar(), referenceISODayParam = 1) { ++ const isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ const referenceISODay = ToIntegerThrowOnInfinity(referenceISODayParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This ++ // check exists only to improve the error message. ++ if (arguments.length < 2) { ++ throw new RangeError('missing argument: isoYear and isoMonth are required'); ++ } ++ CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay); ++ } ++ get year() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ get month() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthCode() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get calendar() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get era() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ get eraYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInMonth() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ get daysInYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ get monthsInYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ get inLeapYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ with(temporalYearMonthLike, optionsParam = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalYearMonthLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']); ++ const props = PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid year-month-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarYearMonthFromFields(calendar, fields, options); ++ } ++ add(temporalDurationLike, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options); ++ } ++ subtract(temporalDurationLike, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainYearMonth('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainYearMonth('since', this, other, options); ++ } ++ equals(otherParam) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalYearMonth(otherParam); ++ for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const showCalendar = ToShowCalendarOption(options); ++ return TemporalYearMonthToString(this, showCalendar); ++ } ++ toJSON() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalYearMonthToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth'); ++ } ++ toPlainDate(item) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) ++ throw new TypeError('argument should be an object'); ++ const calendar = GetSlot(this, CALENDAR); ++ const receiverFieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, receiverFieldNames, []); ++ const inputFieldNames = CalendarFields(calendar, ['day']); ++ const inputFields = PrepareTemporalFields(item, inputFieldNames, []); ++ let mergedFields = CalendarMergeFields(calendar, fields, inputFields); ++ // TODO: Use MergeLists abstract operation. ++ const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])]; ++ mergedFields = PrepareTemporalFields(mergedFields, mergedFieldNames, []); ++ const options = ObjectCreate(null); ++ options.overflow = 'reject'; ++ return CalendarDateFromFields(calendar, mergedFields, options); ++ } ++ getISOFields() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalYearMonth(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY)); ++ } ++ return ToTemporalYearMonth(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalYearMonth(oneParam); ++ const two = ToTemporalYearMonth(twoParam); ++ return CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY)); ++ } ++} ++MakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth'); ++ ++class ZonedDateTime { ++ constructor(epochNanosecondsParam, timeZoneParam, calendarParam = GetISO8601Calendar()) { ++ // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only ++ // to improve the error message. ++ // ToTemporalTimeZone(undefined) will end up calling TimeZone.from("undefined"), which ++ // could succeed. ++ if (arguments.length < 1) { ++ throw new TypeError('missing argument: epochNanoseconds is required'); ++ } ++ const epochNanoseconds = ToBigInt(epochNanosecondsParam); ++ const timeZone = ToTemporalTimeZone(timeZoneParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar); ++ } ++ get calendar() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get timeZone() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, TIME_ZONE); ++ } ++ get year() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get month() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get monthCode() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get day() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get hour() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_HOUR); ++ } ++ get minute() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MINUTE); ++ } ++ get second() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_SECOND); ++ } ++ get millisecond() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MILLISECOND); ++ } ++ get microsecond() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MICROSECOND); ++ } ++ get nanosecond() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_NANOSECOND); ++ } ++ get era() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get eraYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get epochSeconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI__default["default"].toNumber(JSBI__default["default"].divide(value, BILLION)); ++ } ++ get epochMilliseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI__default["default"].toNumber(JSBI__default["default"].divide(value, MILLION)); ++ } ++ get epochMicroseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return ToBigIntExternal(JSBI__default["default"].divide(value, THOUSAND)); ++ } ++ get epochNanoseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS)); ++ } ++ get dayOfWeek() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get dayOfYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get weekOfYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get hoursInDay() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const dt = dateTime(this); ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const year = GetSlot(dt, ISO_YEAR); ++ const month = GetSlot(dt, ISO_MONTH); ++ const day = GetSlot(dt, ISO_DAY); ++ const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0); ++ const tomorrowFields = AddISODate(year, month, day, 0, 0, 0, 1, 'reject'); ++ const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const todayNs = GetSlot(BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS); ++ const tomorrowNs = GetSlot(BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS); ++ return JSBI__default["default"].toNumber(JSBI__default["default"].subtract(tomorrowNs, todayNs)) / 3.6e12; ++ } ++ get daysInWeek() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get daysInMonth() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get daysInYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get monthsInYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get inLeapYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get offset() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT)); ++ } ++ get offsetNanoseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT)); ++ } ++ with(temporalZonedDateTimeLike, optionsParam = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalZonedDateTimeLike)) { ++ throw new TypeError('invalid zoned-date-time-like'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike); ++ // TODO: Reorder according to spec. ++ const options = GetOptionsObject(optionsParam); ++ const disambiguation = ToTemporalDisambiguation(options); ++ const offset = ToTemporalOffset(options, 'prefer'); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fieldsWithOffset = ArrayPush(fieldNames, 'offset'); ++ const props = PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial'); ++ const fieldsWithTimeZoneAndOffset = ArrayPush(fieldsWithOffset, 'timeZone'); ++ let fields = PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']); ++ let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options); ++ const offsetNs = ParseTimeZoneOffsetString(fields.offset); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, ++ /* matchMinute = */ false); ++ return CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar); ++ } ++ withPlainDate(temporalDateParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const temporalDate = ToTemporalDate(temporalDateParam); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ let calendar = GetSlot(temporalDate, CALENDAR); ++ const thisDt = dateTime(this); ++ const hour = GetSlot(thisDt, ISO_HOUR); ++ const minute = GetSlot(thisDt, ISO_MINUTE); ++ const second = GetSlot(thisDt, ISO_SECOND); ++ const millisecond = GetSlot(thisDt, ISO_MILLISECOND); ++ const microsecond = GetSlot(thisDt, ISO_MICROSECOND); ++ const nanosecond = GetSlot(thisDt, ISO_NANOSECOND); ++ calendar = ConsolidateCalendars(GetSlot(this, CALENDAR), calendar); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ withPlainTime(temporalTimeParam = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const PlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ToTemporalTime(temporalTimeParam); ++ const thisDt = dateTime(this); ++ const year = GetSlot(thisDt, ISO_YEAR); ++ const month = GetSlot(thisDt, ISO_MONTH); ++ const day = GetSlot(thisDt, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ const hour = GetSlot(temporalTime, ISO_HOUR); ++ const minute = GetSlot(temporalTime, ISO_MINUTE); ++ const second = GetSlot(temporalTime, ISO_SECOND); ++ const millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ withTimeZone(timeZoneParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const timeZone = ToTemporalTimeZone(timeZoneParam); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR)); ++ } ++ withCalendar(calendarParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar); ++ } ++ add(temporalDurationLike, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options); ++ } ++ subtract(temporalDurationLike, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalZonedDateTime('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalZonedDateTime('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED, ['day']); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const maximumIncrements = { ++ day: 1, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++ // first, round the underlying DateTime fields ++ const dt = dateTime(this); ++ let year = GetSlot(dt, ISO_YEAR); ++ let month = GetSlot(dt, ISO_MONTH); ++ let day = GetSlot(dt, ISO_DAY); ++ let hour = GetSlot(dt, ISO_HOUR); ++ let minute = GetSlot(dt, ISO_MINUTE); ++ let second = GetSlot(dt, ISO_SECOND); ++ let millisecond = GetSlot(dt, ISO_MILLISECOND); ++ let microsecond = GetSlot(dt, ISO_MICROSECOND); ++ let nanosecond = GetSlot(dt, ISO_NANOSECOND); ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const calendar = GetSlot(this, CALENDAR); ++ const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0); ++ const instantStart = BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible'); ++ const endNs = AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); ++ const dayLengthNs = JSBI__default["default"].subtract(endNs, JSBI__default["default"].BigInt(GetSlot(instantStart, EPOCHNANOSECONDS))); ++ if (JSBI__default["default"].equal(dayLengthNs, ZERO)) { ++ throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days'); ++ } ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, ++ // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER ++ // (which can hold up to 104 days in nanoseconds) ++ JSBI__default["default"].toNumber(dayLengthNs))); ++ // Now reset all DateTime fields but leave the TimeZone. The offset will ++ // also be retained if the new date/time values are still OK with the old ++ // offset. Otherwise the offset will be changed to be compatible with the ++ // new date/time values. If DST disambiguation is required, the `compatible` ++ // disambiguation algorithm will be used. ++ const offsetNs = GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT)); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', ++ /* matchMinute = */ false); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR)); ++ } ++ equals(otherParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalZonedDateTime(otherParam); ++ const one = GetSlot(this, EPOCHNANOSECONDS); ++ const two = GetSlot(other, EPOCHNANOSECONDS); ++ if (!JSBI__default["default"].equal(JSBI__default["default"].BigInt(one), JSBI__default["default"].BigInt(two))) ++ return false; ++ if (!TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) ++ return false; ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ const showCalendar = ToShowCalendarOption(options); ++ const showTimeZone = ToShowTimeZoneNameOption(options); ++ const showOffset = ToShowOffsetOption(options); ++ return TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, { ++ unit, ++ increment, ++ roundingMode ++ }); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ toJSON() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalZonedDateTimeToString(this, 'auto'); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime'); ++ } ++ startOfDay() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const dt = dateTime(this); ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const calendar = GetSlot(this, CALENDAR); ++ const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ toInstant() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS)); ++ } ++ toPlainDate() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToDate(dateTime(this)); ++ } ++ toPlainTime() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToTime(dateTime(this)); ++ } ++ toPlainDateTime() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return dateTime(this); ++ } ++ toPlainYearMonth() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ toPlainMonthDay() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ getISOFields() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const dt = dateTime(this); ++ const tz = GetSlot(this, TIME_ZONE); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(dt, ISO_DAY), ++ isoHour: GetSlot(dt, ISO_HOUR), ++ isoMicrosecond: GetSlot(dt, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(dt, ISO_MILLISECOND), ++ isoMinute: GetSlot(dt, ISO_MINUTE), ++ isoMonth: GetSlot(dt, ISO_MONTH), ++ isoNanosecond: GetSlot(dt, ISO_NANOSECOND), ++ isoSecond: GetSlot(dt, ISO_SECOND), ++ isoYear: GetSlot(dt, ISO_YEAR), ++ offset: BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)), ++ timeZone: tz ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ToTemporalDisambiguation(options); ++ ToTemporalOffset(options, 'reject'); ++ return CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR)); ++ } ++ return ToTemporalZonedDateTime(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalZonedDateTime(oneParam); ++ const two = ToTemporalZonedDateTime(twoParam); ++ const ns1 = GetSlot(one, EPOCHNANOSECONDS); ++ const ns2 = GetSlot(two, EPOCHNANOSECONDS); ++ if (JSBI__default["default"].lessThan(JSBI__default["default"].BigInt(ns1), JSBI__default["default"].BigInt(ns2))) ++ return -1; ++ if (JSBI__default["default"].greaterThan(JSBI__default["default"].BigInt(ns1), JSBI__default["default"].BigInt(ns2))) ++ return 1; ++ return 0; ++ } ++} ++MakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime'); ++function dateTime(zdt) { ++ return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR)); ++} ++ ++var temporal = /*#__PURE__*/Object.freeze({ ++ __proto__: null, ++ Instant: Instant, ++ Calendar: Calendar, ++ PlainDate: PlainDate, ++ PlainDateTime: PlainDateTime, ++ Duration: Duration, ++ PlainMonthDay: PlainMonthDay, ++ Now: Now, ++ PlainTime: PlainTime, ++ TimeZone: TimeZone, ++ PlainYearMonth: PlainYearMonth, ++ ZonedDateTime: ZonedDateTime ++}); ++ ++function toTemporalInstant() { ++ // Observable access to valueOf is not correct here, but unavoidable ++ const epochNanoseconds = JSBI__default["default"].multiply(JSBI__default["default"].BigInt(+this), MILLION); ++ return new Instant(ToBigInt(epochNanoseconds)); ++} ++ ++// This entry point treats Temporal as a library, and does not polyfill it onto ++// Work around https://github.com/babel/babel/issues/2025. ++const types = [ ++ Instant, ++ Calendar, ++ PlainDate, ++ PlainDateTime, ++ Duration, ++ PlainMonthDay, ++ // Temporal.Now, // plain object (not a constructor), so no `prototype` ++ PlainTime, ++ TimeZone, ++ PlainYearMonth, ++ ZonedDateTime ++]; ++for (const type of types) { ++ const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype'); ++ if (descriptor.configurable || descriptor.enumerable || descriptor.writable) { ++ descriptor.configurable = false; ++ descriptor.enumerable = false; ++ descriptor.writable = false; ++ Object.defineProperty(type, 'prototype', descriptor); ++ } ++} ++ ++exports.Intl = intl; ++exports.Temporal = temporal; ++exports.toTemporalInstant = toTemporalInstant; + //# sourceMappingURL=index.cjs.map +diff --git a/node_modules/@js-temporal/polyfill/dist/index.cjs.map b/node_modules/@js-temporal/polyfill/dist/index.cjs.map +index f4bd58a..2f34058 100644 +--- a/node_modules/@js-temporal/polyfill/dist/index.cjs.map ++++ b/node_modules/@js-temporal/polyfill/dist/index.cjs.map +@@ -1 +1 @@ +-{"version":3,"file":"index.cjs","sources":["../tsc-out/intrinsicclass.js","../tsc-out/slots.js","../tsc-out/regex.js","../tsc-out/ecmascript.js","../tsc-out/intl.js","../tsc-out/instant.js","../tsc-out/calendar.js","../tsc-out/plaindate.js","../tsc-out/plaindatetime.js","../tsc-out/duration.js","../tsc-out/plainmonthday.js","../tsc-out/now.js","../tsc-out/plaintime.js","../tsc-out/timezone.js","../tsc-out/plainyearmonth.js","../tsc-out/zoneddatetime.js","../tsc-out/index.js","../tsc-out/legacydate.js"],"sourcesContent":["import { DEBUG } from './debug';\nconst INTRINSICS = {};\nconst customUtilInspectFormatters = {\n ['Temporal.Duration'](depth, options) {\n const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n if (depth < 1)\n return descr;\n const entries = [];\n for (const prop of [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n 'microseconds',\n 'nanoseconds'\n ]) {\n if (this[prop] !== 0)\n entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`);\n }\n return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n }\n};\nfunction defaultUtilInspectFormatter(depth, options) {\n return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\nexport function MakeIntrinsicClass(Class, name) {\n Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n value: name,\n writable: false,\n enumerable: false,\n configurable: true\n });\n if (DEBUG) {\n Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n for (const prop of Object.getOwnPropertyNames(Class)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class, prop, desc);\n }\n for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class.prototype, prop, desc);\n }\n DefineIntrinsic(name, Class);\n DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\nexport function DefineIntrinsic(name, value) {\n const key = `%${name}%`;\n if (INTRINSICS[key] !== undefined)\n throw new Error(`intrinsic ${name} already exists`);\n INTRINSICS[key] = value;\n}\nexport function GetIntrinsic(intrinsic) {\n return INTRINSICS[intrinsic];\n}\n//# sourceMappingURL=intrinsicclass.js.map","// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\nconst slots = new WeakMap();\nexport function CreateSlots(container) {\n slots.set(container, Object.create(null));\n}\nfunction GetSlots(container) {\n return slots.get(container);\n}\nexport function HasSlot(container, ...ids) {\n if (!container || 'object' !== typeof container)\n return false;\n const myslots = GetSlots(container);\n return !!myslots && ids.reduce((all, id) => all && id in myslots, true);\n}\nexport function GetSlot(container, id) {\n const value = GetSlots(container)[id];\n if (value === undefined)\n throw new TypeError(`Missing internal slot ${id}`);\n return value;\n}\nexport function SetSlot(container, id, value) {\n GetSlots(container)[id] = value;\n}\n//# sourceMappingURL=slots.js.map","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nconst timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\\\d{1,2}|${offsetNoCapture.source})`);\nconst calComponent = /[A-Za-z0-9]{3,8}/;\nconst calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`);\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\\\[(${timeZoneID.source})\\\\])?`);\nconst calendar = new RegExp(`\\\\[u-ca=(${calendarID.source})\\\\]`);\nexport const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i');\nexport const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i');\n// The short forms of YearMonth and MonthDay are only for the ISO calendar.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\nexport const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`);\nexport const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`);\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n//# sourceMappingURL=regex.js.map","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectAssign = Object.assign;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ObjectIs = Object.is;\nconst ReflectApply = Reflect.apply;\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { CreateSlots, GetSlot, HasSlot, SetSlot, EPOCHNANOSECONDS, TIMEZONE_ID, CALENDAR_ID, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, DATE_BRAND, YEAR_MONTH_BRAND, MONTH_DAY_BRAND, TIME_ZONE, CALENDAR, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS } from './slots';\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst DAY_SECONDS = 86400;\nconst DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\nconst BUILTIN_CALENDAR_IDS = [\n 'iso8601',\n 'hebrew',\n 'islamic',\n 'islamic-umalqura',\n 'islamic-tbla',\n 'islamic-civil',\n 'islamic-rgsa',\n 'islamicc',\n 'persian',\n 'ethiopic',\n 'ethioaa',\n 'coptic',\n 'chinese',\n 'dangi',\n 'roc',\n 'indian',\n 'buddhist',\n 'japanese',\n 'gregory'\n];\nfunction IsInteger(value) {\n if (typeof value !== 'number' || !NumberIsFinite(value))\n return false;\n const abs = MathAbs(value);\n return MathFloor(abs) === abs;\n}\nexport function IsObject(value) {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\nexport function ToNumber(value) {\n if (typeof value === 'bigint')\n throw new TypeError('Cannot convert BigInt to number');\n return NumberCtor(value);\n}\nfunction ToInteger(value) {\n const num = ToNumber(value);\n if (NumberIsNaN(num))\n return 0;\n const integer = MathTrunc(num);\n if (num === 0)\n return 0;\n return integer;\n}\nexport function ToString(value) {\n if (typeof value === 'symbol') {\n throw new TypeError('Cannot convert a Symbol value to a String');\n }\n return StringCtor(value);\n}\nexport function ToIntegerThrowOnInfinity(value) {\n const integer = ToInteger(value);\n if (!NumberIsFinite(integer)) {\n throw new RangeError('infinity is out of range');\n }\n return integer;\n}\nfunction ToPositiveInteger(valueParam, property) {\n const value = ToInteger(valueParam);\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (value < 1) {\n if (property !== undefined) {\n throw new RangeError(`property '${property}' cannot be a a number less than one`);\n }\n throw new RangeError('Cannot convert a number less than one to a positive integer');\n }\n return value;\n}\nexport function ToIntegerWithoutRounding(valueParam) {\n const value = ToNumber(valueParam);\n if (NumberIsNaN(value))\n return 0;\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (!IsInteger(value)) {\n throw new RangeError(`unsupported fractional value ${value}`);\n }\n return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0\n}\nfunction divmod(x, y) {\n const quotient = JSBI.divide(x, y);\n const remainder = JSBI.remainder(x, y);\n return { quotient, remainder };\n}\nfunction abs(x) {\n if (JSBI.lessThan(x, ZERO))\n return JSBI.multiply(x, NEGATIVE_ONE);\n return x;\n}\nexport function ArrayPush(arr, ...newItem) {\n ArrayPrototypePush.apply(arr, newItem);\n return arr;\n}\nconst BUILTIN_CASTS = new Map([\n ['year', ToIntegerThrowOnInfinity],\n ['month', ToPositiveInteger],\n ['monthCode', ToString],\n ['day', ToPositiveInteger],\n ['hour', ToIntegerThrowOnInfinity],\n ['minute', ToIntegerThrowOnInfinity],\n ['second', ToIntegerThrowOnInfinity],\n ['millisecond', ToIntegerThrowOnInfinity],\n ['microsecond', ToIntegerThrowOnInfinity],\n ['nanosecond', ToIntegerThrowOnInfinity],\n ['years', ToIntegerWithoutRounding],\n ['months', ToIntegerWithoutRounding],\n ['weeks', ToIntegerWithoutRounding],\n ['days', ToIntegerWithoutRounding],\n ['hours', ToIntegerWithoutRounding],\n ['minutes', ToIntegerWithoutRounding],\n ['seconds', ToIntegerWithoutRounding],\n ['milliseconds', ToIntegerWithoutRounding],\n ['microseconds', ToIntegerWithoutRounding],\n ['nanoseconds', ToIntegerWithoutRounding],\n ['era', ToString],\n ['eraYear', ToInteger],\n ['offset', ToString]\n]);\nconst BUILTIN_DEFAULTS = new Map([\n ['hour', 0],\n ['minute', 0],\n ['second', 0],\n ['millisecond', 0],\n ['microsecond', 0],\n ['nanosecond', 0]\n]);\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n ['years', 'year', 'date'],\n ['months', 'month', 'date'],\n ['weeks', 'week', 'date'],\n ['days', 'day', 'date'],\n ['hours', 'hour', 'time'],\n ['minutes', 'minute', 'time'],\n ['seconds', 'second', 'time'],\n ['milliseconds', 'millisecond', 'time'],\n ['microseconds', 'microsecond', 'time'],\n ['nanoseconds', 'nanosecond', 'time']\n];\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]]));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\nimport * as PARSE from './regex';\nconst IntlDateTimeFormatEnUsCache = new Map();\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) {\n let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n if (instance === undefined) {\n instance = new IntlDateTimeFormat('en-us', {\n timeZone: StringCtor(timeZoneIdentifier),\n hour12: false,\n era: 'short',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n }\n return instance;\n}\nexport function IsTemporalInstant(item) {\n return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\nexport function IsTemporalTimeZone(item) {\n return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item) {\n return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item) {\n return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item) {\n return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item) {\n return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY));\n}\nexport function IsTemporalDateTime(item) {\n return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND);\n}\nexport function IsTemporalYearMonth(item) {\n return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item) {\n return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item) {\n return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectObjectWithCalendarOrTimeZone(item) {\n if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n throw new TypeError('with() does not support a calendar or timeZone property');\n }\n if (item.calendar !== undefined) {\n throw new TypeError('with() does not support a calendar property');\n }\n if (item.timeZone !== undefined) {\n throw new TypeError('with() does not support a timeZone property');\n }\n}\nfunction ParseTemporalTimeZone(stringIdent) {\n let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n if (ianaName)\n return ianaName;\n if (z)\n return 'UTC';\n return offset; // if !ianaName && !z then offset must be present\n}\nfunction FormatCalendarAnnotation(id, showCalendar) {\n if (showCalendar === 'never')\n return '';\n if (showCalendar === 'auto' && id === 'iso8601')\n return '';\n return `[u-ca=${id}]`;\n}\nfunction ParseISODateTime(isoString) {\n // ZDT is the superset of fields for every other Temporal type\n const match = PARSE.zoneddatetime.exec(isoString);\n if (!match)\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n const year = ToInteger(yearString);\n const month = ToInteger(match[2] || match[4]);\n const day = ToInteger(match[3] || match[5]);\n const hour = ToInteger(match[6]);\n const hasTime = match[6] !== undefined;\n const minute = ToInteger(match[7] || match[10]);\n let second = ToInteger(match[8] || match[11]);\n if (second === 60)\n second = 59;\n const fraction = (match[9] || match[12]) + '000000000';\n const millisecond = ToInteger(fraction.slice(0, 3));\n const microsecond = ToInteger(fraction.slice(3, 6));\n const nanosecond = ToInteger(fraction.slice(6, 9));\n let offset;\n let z = false;\n if (match[13]) {\n offset = undefined;\n z = true;\n }\n else if (match[14] && match[15]) {\n const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n const offsetHours = match[15] || '00';\n const offsetMinutes = match[16] || '00';\n const offsetSeconds = match[17] || '00';\n let offsetFraction = match[18] || '0';\n offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n if (+offsetFraction) {\n while (offsetFraction.endsWith('0'))\n offsetFraction = offsetFraction.slice(0, -1);\n offset += `:${offsetSeconds}.${offsetFraction}`;\n }\n else if (+offsetSeconds) {\n offset += `:${offsetSeconds}`;\n }\n if (offset === '-00:00')\n offset = '+00:00';\n }\n let ianaName = match[19];\n if (ianaName) {\n try {\n // Canonicalize name if it is an IANA link name or is capitalized wrong\n ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString();\n }\n catch {\n // Not an IANA name, may be a custom ID, pass through unchanged\n }\n }\n const calendar = match[20];\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n return {\n year,\n month,\n day,\n hasTime,\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond,\n ianaName,\n offset,\n z,\n calendar\n };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.z && !result.offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.ianaName)\n throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString) {\n const match = PARSE.time.exec(isoString);\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (match) {\n hour = ToInteger(match[1]);\n minute = ToInteger(match[2] || match[5]);\n second = ToInteger(match[3] || match[6]);\n if (second === 60)\n second = 59;\n const fraction = (match[4] || match[7]) + '000000000';\n millisecond = ToInteger(fraction.slice(0, 3));\n microsecond = ToInteger(fraction.slice(3, 6));\n nanosecond = ToInteger(fraction.slice(6, 9));\n calendar = match[15];\n }\n else {\n let z, hasTime;\n ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseISODateTime(isoString));\n if (!hasTime)\n throw new RangeError(`time is missing in string: ${isoString}`);\n if (z)\n throw new RangeError('Z designator not supported for PlainTime');\n }\n // if it's a date-time string, OK\n if (/[tT ][0-9][0-9]/.test(isoString)) {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n // slow but non-grammar-dependent way to ensure that time-only strings that\n // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to\n // assertion in spec text\n try {\n const { month, day } = ParseTemporalMonthDayString(isoString);\n RejectISODate(1972, month, day);\n }\n catch {\n try {\n const { year, month } = ParseTemporalYearMonthString(isoString);\n RejectISODate(year, month, 1);\n }\n catch {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n }\n throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString) {\n const match = PARSE.yearmonth.exec(isoString);\n let year, month, calendar, referenceISODay;\n if (match) {\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n year = ToInteger(yearString);\n month = ToInteger(match[2]);\n calendar = match[3];\n }\n else {\n let z;\n ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainYearMonth');\n }\n return { year, month, calendar, referenceISODay };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString) {\n const match = PARSE.monthday.exec(isoString);\n let month, day, calendar, referenceISOYear;\n if (match) {\n month = ToInteger(match[1]);\n day = ToInteger(match[2]);\n }\n else {\n let z;\n ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainMonthDay');\n }\n return { month, day, calendar, referenceISOYear };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent) {\n try {\n let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent);\n if (canonicalIdent)\n return { ianaName: canonicalIdent.toString() };\n }\n catch {\n // fall through\n }\n try {\n // Try parsing ISO string instead\n const result = ParseISODateTime(stringIdent);\n if (result.z || result.offset || result.ianaName) {\n return result;\n }\n }\n catch {\n // fall through\n }\n throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString) {\n const match = PARSE.duration.exec(isoString);\n if (!match)\n throw new RangeError(`invalid duration: ${isoString}`);\n if (match.slice(2).every((element) => element === undefined)) {\n throw new RangeError(`invalid duration: ${isoString}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n const years = ToInteger(match[2]) * sign;\n const months = ToInteger(match[3]) * sign;\n const weeks = ToInteger(match[4]) * sign;\n const days = ToInteger(match[5]) * sign;\n const hours = ToInteger(match[6]) * sign;\n let fHours = match[7];\n let minutes = ToInteger(match[8]) * sign;\n let fMinutes = match[9];\n let seconds = ToInteger(match[10]) * sign;\n const fSeconds = match[11] + '000000000';\n let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign;\n let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign;\n let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign;\n fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0;\n fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0;\n ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds));\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString) {\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString);\n if (!z && !offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n // At least one of z or offset is defined, but TS doesn't seem to understand\n // that we only use offset if z is not defined (and thus offset must be defined).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs));\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n return epochNs;\n}\nexport function RegulateISODate(yearParam, monthParam, dayParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, day);\n break;\n case 'constrain':\n ({ year, month, day } = ConstrainISODate(year, month, day));\n break;\n }\n return { year, month, day };\n}\nexport function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n switch (overflow) {\n case 'reject':\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n break;\n case 'constrain':\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond));\n break;\n }\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RegulateISOYearMonth(yearParam, monthParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n const referenceISODay = 1;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, referenceISODay);\n break;\n case 'constrain':\n ({ year, month } = ConstrainISODate(year, month));\n break;\n }\n return { year, month };\n}\nfunction DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) {\n let fHours = fHoursParam;\n let minutes = minutesParam;\n let fMinutes = fMinutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (fHours !== 0) {\n [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const mins = fHours * 60;\n minutes = MathTrunc(mins);\n fMinutes = mins % 1;\n }\n if (fMinutes !== 0) {\n [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const secs = fMinutes * 60;\n seconds = MathTrunc(secs);\n const fSeconds = secs % 1;\n if (fSeconds !== 0) {\n const mils = fSeconds * 1000;\n milliseconds = MathTrunc(mils);\n const fMilliseconds = mils % 1;\n if (fMilliseconds !== 0) {\n const mics = fMilliseconds * 1000;\n microseconds = MathTrunc(mics);\n const fMicroseconds = mics % 1;\n if (fMicroseconds !== 0) {\n const nans = fMicroseconds * 1000;\n nanoseconds = MathTrunc(nans);\n }\n }\n }\n }\n return { minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalDurationRecord(item) {\n if (!IsObject(item)) {\n return ParseTemporalDurationString(ToString(item));\n }\n if (IsTemporalDuration(item)) {\n return {\n years: GetSlot(item, YEARS),\n months: GetSlot(item, MONTHS),\n weeks: GetSlot(item, WEEKS),\n days: GetSlot(item, DAYS),\n hours: GetSlot(item, HOURS),\n minutes: GetSlot(item, MINUTES),\n seconds: GetSlot(item, SECONDS),\n milliseconds: GetSlot(item, MILLISECONDS),\n microseconds: GetSlot(item, MICROSECONDS),\n nanoseconds: GetSlot(item, NANOSECONDS)\n };\n }\n const result = {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n let partial = ToTemporalPartialDurationRecord(item);\n for (const property of DURATION_FIELDS) {\n const value = partial[property];\n if (value !== undefined) {\n result[property] = value;\n }\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalPartialDurationRecord(temporalDurationLike) {\n if (!IsObject(temporalDurationLike)) {\n throw new TypeError('invalid duration-like');\n }\n const result = {\n years: undefined,\n months: undefined,\n weeks: undefined,\n days: undefined,\n hours: undefined,\n minutes: undefined,\n seconds: undefined,\n milliseconds: undefined,\n microseconds: undefined,\n nanoseconds: undefined\n };\n let any = false;\n for (const property of DURATION_FIELDS) {\n const value = temporalDurationLike[property];\n if (value !== undefined) {\n any = true;\n result[property] = ToIntegerWithoutRounding(value);\n }\n }\n if (!any) {\n throw new TypeError('invalid duration-like');\n }\n return result;\n}\nfunction ToLimitedTemporalDuration(item, disallowedProperties) {\n let record = ToTemporalDurationRecord(item);\n for (const property of disallowedProperties) {\n if (record[property] !== 0) {\n throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);\n }\n }\n return record;\n}\nexport function ToTemporalOverflow(options) {\n if (options === undefined)\n return 'constrain';\n return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\nexport function ToTemporalDisambiguation(options) {\n if (options === undefined)\n return 'compatible';\n return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\nexport function ToTemporalRoundingMode(options, fallback) {\n return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback);\n}\nfunction NegateTemporalRoundingMode(roundingMode) {\n switch (roundingMode) {\n case 'ceil':\n return 'floor';\n case 'floor':\n return 'ceil';\n default:\n return roundingMode;\n }\n}\nexport function ToTemporalOffset(options, fallback) {\n if (options === undefined)\n return fallback;\n return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\nexport function ToShowCalendarOption(options) {\n return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto');\n}\nexport function ToShowTimeZoneNameOption(options) {\n return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto');\n}\nexport function ToShowOffsetOption(options) {\n return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\nexport function ToTemporalRoundingIncrement(options, dividend, inclusive) {\n let maximum = Infinity;\n if (dividend !== undefined)\n maximum = dividend;\n if (!inclusive && dividend !== undefined)\n maximum = dividend > 1 ? dividend - 1 : 1;\n const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1);\n if (dividend !== undefined && dividend % increment !== 0) {\n throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n }\n return increment;\n}\nexport function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) {\n const maximumIncrements = {\n year: undefined,\n month: undefined,\n week: undefined,\n day: undefined,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n}\nexport function ToSecondsStringPrecision(options) {\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n if (smallestUnit === 'hour') {\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains.\n // Maybe this is fixed in later TS versions?\n if (c === 'time' && s !== 'hour') {\n allowed.push(s, p);\n }\n return allowed;\n }, []);\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n switch (smallestUnit) {\n case 'minute':\n return { precision: 'minute', unit: 'minute', increment: 1 };\n case 'second':\n return { precision: 0, unit: 'second', increment: 1 };\n case 'millisecond':\n return { precision: 3, unit: 'millisecond', increment: 1 };\n case 'microsecond':\n return { precision: 6, unit: 'microsecond', increment: 1 };\n case 'nanosecond':\n return { precision: 9, unit: 'nanosecond', increment: 1 };\n default: // fall through if option not given\n }\n let digits = options.fractionalSecondDigits;\n if (digits === undefined)\n digits = 'auto';\n if (typeof digits !== 'number') {\n const stringDigits = ToString(digits);\n if (stringDigits === 'auto')\n return { precision: 'auto', unit: 'nanosecond', increment: 1 };\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`);\n }\n if (NumberIsNaN(digits) || digits < 0 || digits > 9) {\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n const precision = MathFloor(digits);\n switch (precision) {\n case 0:\n return { precision, unit: 'second', increment: 1 };\n case 1:\n case 2:\n case 3:\n return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n case 4:\n case 5:\n case 6:\n return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n case 7:\n case 8:\n case 9:\n return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n default:\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n}\nexport const REQUIRED = Symbol('~required~');\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) {\n const allowedSingular = [];\n for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n if (unitGroup === 'datetime' || unitGroup === category) {\n allowedSingular.push(singular);\n }\n }\n allowedSingular.push(...extraValues);\n let defaultVal = requiredOrDefault;\n if (defaultVal === REQUIRED) {\n defaultVal = undefined;\n }\n else if (defaultVal !== undefined) {\n allowedSingular.push(defaultVal);\n }\n const allowedValues = [\n ...allowedSingular\n ];\n for (const singular of allowedSingular) {\n const plural = PLURAL_FOR.get(singular);\n if (plural !== undefined)\n allowedValues.push(plural);\n }\n let retval = GetOption(options, key, allowedValues, defaultVal);\n if (retval === undefined && requiredOrDefault === REQUIRED) {\n throw new RangeError(`${key} is required`);\n }\n // Coerce any plural units into their singular form\n if (SINGULAR_FOR.has(retval)) {\n // We just has-checked this, but tsc doesn't understand that.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(retval);\n }\n return retval;\n}\nexport function ToRelativeTemporalObject(options) {\n const relativeTo = options.relativeTo;\n if (relativeTo === undefined)\n return relativeTo;\n let offsetBehaviour = 'option';\n let matchMinutes = false;\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n if (IsObject(relativeTo)) {\n if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo))\n return relativeTo;\n if (IsTemporalDateTime(relativeTo))\n return TemporalDateTimeToDate(relativeTo);\n calendar = GetTemporalCalendarWithISODefault(relativeTo);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n const dateOptions = ObjectCreate(null);\n dateOptions.overflow = 'constrain';\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions));\n // The `offset` and `timeZone` properties only exist on ZonedDateTime (or\n // ZonedDateTimeLike-property bags). The assertions below are used to avoid\n // TS errors while not diverging runtime code from proposal-temporal.\n offset = relativeTo.offset;\n if (offset === undefined)\n offsetBehaviour = 'wall';\n timeZone = relativeTo.timeZone;\n }\n else {\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n ParseISODateTime(ToString(relativeTo)));\n if (ianaName)\n timeZone = ianaName;\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinutes = true;\n }\n if (timeZone !== undefined) {\n timeZone = ToTemporalTimeZone(timeZone);\n let offsetNs = 0;\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(ToString(offset));\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n }\n return CreateTemporalDate(year, month, day, calendar);\n}\nexport function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n for (const [prop, v] of [\n ['years', years],\n ['months', months],\n ['weeks', weeks],\n ['days', days],\n ['hours', hours],\n ['minutes', minutes],\n ['seconds', seconds],\n ['milliseconds', milliseconds],\n ['microseconds', microseconds],\n ['nanoseconds', nanoseconds]\n ]) {\n if (v !== 0) {\n // All the above keys are definitely in SINGULAR_FOR\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(prop);\n }\n }\n return 'nanosecond';\n}\nexport function LargerOfTwoTemporalUnits(unit1, unit2) {\n if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2))\n return unit2;\n return unit1;\n}\nfunction MergeLargestUnitOption(optionsParam, largestUnit) {\n let options = optionsParam;\n if (options === undefined)\n options = ObjectCreate(null);\n return ObjectAssign(ObjectCreate(null), options, { largestUnit });\n}\nexport function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) {\n const result = ObjectCreate(null);\n let any = false;\n for (const property of fields) {\n let value = bag[property];\n if (value !== undefined) {\n any = true;\n if (BUILTIN_CASTS.has(property)) {\n // We just has-checked this map access, so there will definitely be a\n // value.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n value = BUILTIN_CASTS.get(property)(value);\n }\n result[property] = value;\n }\n else if (requiredFields !== 'partial') {\n // TODO: using .call in this way is not correctly type-checked by tsc.\n // We might need a type-safe Call wrapper?\n if (ArrayIncludes.call(requiredFields, property)) {\n throw new TypeError(`required property '${property}' missing or undefined`);\n }\n value = BUILTIN_DEFAULTS.get(property);\n result[property] = value;\n }\n }\n if (requiredFields === 'partial' && !any) {\n throw new TypeError(emptySourceErrorMessage);\n }\n if ((result.era === undefined) !== (result.eraYear === undefined)) {\n throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n }\n return result;\n}\nexport function ToTemporalTimeRecord(bag, completeness = 'complete') {\n // NOTE: Field order here is important.\n const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n const result = {};\n for (const field of fields) {\n const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n if (valueDesc !== undefined) {\n result[field] = valueDesc.value;\n }\n else if (completeness === 'complete') {\n result[field] = 0;\n }\n }\n return result;\n}\nexport function ToTemporalDate(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalDate(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarDateFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n if (z)\n throw new RangeError('Z designator not supported for PlainDate');\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n return new TemporalPlainDate(year, month, day, calendar); // include validation\n}\nexport function InterpretTemporalDateTimeFields(calendar, fields, options) {\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n const overflow = ToTemporalOverflow(options);\n const date = CalendarDateFromFields(calendar, fields, options);\n const year = GetSlot(date, ISO_YEAR);\n const month = GetSlot(date, ISO_MONTH);\n const day = GetSlot(date, ISO_DAY);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function ToTemporalDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalDateTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDate(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseTemporalDateTimeString(ToString(item)));\n if (z)\n throw new RangeError('Z designator not supported for PlainDateTime');\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n }\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function ToTemporalDuration(item) {\n if (IsTemporalDuration(item))\n return item;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function ToTemporalInstant(item) {\n if (IsTemporalInstant(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n }\n const ns = ParseTemporalInstant(ToString(item));\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(ns);\n}\nexport function ToTemporalMonthDay(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalMonthDay(item))\n return item;\n let calendar, calendarAbsent;\n if (HasSlot(item, CALENDAR)) {\n calendar = GetSlot(item, CALENDAR);\n calendarAbsent = false;\n }\n else {\n let maybeStringCalendar = item.calendar;\n calendarAbsent = maybeStringCalendar === undefined;\n if (maybeStringCalendar === undefined)\n maybeStringCalendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(maybeStringCalendar);\n }\n // HasSlot above adjusts the type of 'item' to include\n // TypesWithCalendarUnits, which causes type-inference failures below.\n // This is probably indicative of problems with HasSlot's typing.\n item = item;\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n // Callers who omit the calendar are not writing calendar-independent\n // code. In that case, `monthCode`/`year` can be omitted; `month` and\n // `day` are sufficient. Add a `year` to satisfy calendar validation.\n if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n fields.year = 1972;\n }\n return CalendarMonthDayFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item));\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISOYear === undefined) {\n RejectISODate(1972, month, day);\n return CreateTemporalMonthDay(month, day, calendar);\n }\n const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n return CalendarMonthDayFromFields(calendar, result);\n}\nexport function ToTemporalTime(itemParam, overflow = 'constrain') {\n let item = itemParam;\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n if (ToString(calendar) !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n }\n else {\n ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item)));\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar !== undefined && calendar !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n }\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function ToTemporalYearMonth(item, options) {\n if (IsObject(item)) {\n if (IsTemporalYearMonth(item))\n return item;\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item));\n // TODO: replace with ternary?\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISODay === undefined) {\n RejectISODate(year, month, 1);\n return CreateTemporalYearMonth(year, month, calendar);\n }\n const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n return CalendarYearMonthFromFields(calendar, result);\n}\nexport function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n // Simple case: ISO string without a TZ offset (or caller wants to ignore\n // the offset), so just convert DateTime to Instant in the given time zone\n const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n }\n // The caller wants the offset to always win ('use') OR the caller is OK\n // with the offset winning ('prefer' or 'reject') as long as it's valid\n // for this timezone and date/time.\n if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n // Calculate the instant for the input's date/time and offset\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('ZonedDateTime outside of supported range');\n return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n }\n // \"prefer\" or \"reject\"\n const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n for (const candidate of possibleInstants) {\n const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand'));\n if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n return GetSlot(candidate, EPOCHNANOSECONDS);\n }\n }\n // the user-provided offset doesn't match any instants for this time\n // zone and date/time.\n if (offsetOpt === 'reject') {\n const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n // toString (which is invoked by Node when using template literals directly).\n // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n }\n // fall through: offsetOpt === 'prefer', but the offset doesn't match\n // so fall back to use the time zone instead.\n const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n}\nexport function ToTemporalZonedDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar;\n let matchMinute = false;\n let offsetBehaviour = 'option';\n if (IsObject(item)) {\n if (IsTemporalZonedDateTime(item))\n return item;\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset');\n const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n timeZone = ToTemporalTimeZone(fields.timeZone);\n offset = fields.offset;\n if (offset === undefined) {\n offsetBehaviour = 'wall';\n }\n else {\n offset = ToString(offset);\n }\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n ParseTemporalZonedDateTimeString(ToString(item)));\n if (!ianaName)\n throw new RangeError('time zone ID required in brackets');\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n timeZone = new TemporalTimeZone(ianaName);\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinute = true; // ISO strings may specify offset with less precision\n }\n let offsetNs = 0;\n // The code above guarantees that if offsetBehaviour === 'option', then\n // `offset` is not undefined.\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(offset);\n const disambiguation = ToTemporalDisambiguation(options);\n const offsetOpt = ToTemporalOffset(options, 'reject');\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nexport function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) {\n RejectISODate(isoYear, isoMonth, isoDay);\n RejectDateRange(isoYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, DATE_BRAND, true);\n if (DEBUG) {\n ObjectDefineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) {\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n const result = ObjectCreate(TemporalPlainDate.prototype);\n CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n return result;\n}\nexport function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) {\n RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_HOUR, h);\n SetSlot(result, ISO_MINUTE, min);\n SetSlot(result, ISO_SECOND, s);\n SetSlot(result, ISO_MILLISECOND, ms);\n SetSlot(result, ISO_MICROSECOND, µs);\n SetSlot(result, ISO_NANOSECOND, ns);\n SetSlot(result, CALENDAR, calendar);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) {\n const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const result = ObjectCreate(TemporalPlainDateTime.prototype);\n CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n return result;\n}\nexport function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) {\n RejectISODate(referenceISOYear, isoMonth, isoDay);\n RejectDateRange(referenceISOYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_YEAR, referenceISOYear);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, MONTH_DAY_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) {\n const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n return result;\n}\nexport function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) {\n RejectISODate(isoYear, isoMonth, referenceISODay);\n RejectYearMonthRange(isoYear, isoMonth);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, referenceISODay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, YEAR_MONTH_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) {\n const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n return result;\n}\nexport function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) {\n ValidateEpochNanoseconds(epochNanoseconds);\n CreateSlots(result);\n SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n SetSlot(result, TIME_ZONE, timeZone);\n SetSlot(result, CALENDAR, calendar);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n SetSlot(result, INSTANT, instant);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) {\n const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n const result = ObjectCreate(TemporalZonedDateTime.prototype);\n CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n return result;\n}\nexport function GetISO8601Calendar() {\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n return new TemporalCalendar('iso8601');\n}\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields(calendar, fieldNamesParam) {\n let fieldNames = fieldNamesParam;\n if (calendar.fields) {\n fieldNames = calendar.fields(fieldNames);\n }\n const result = [];\n for (const name of fieldNames) {\n if (typeof name !== 'string')\n throw new TypeError('bad return from calendar.fields()');\n ArrayPrototypePush.call(result, name);\n }\n return result;\n}\nexport function CalendarMergeFields(calendar, fields, additionalFields) {\n const calMergeFields = calendar.mergeFields;\n if (!calMergeFields) {\n return { ...fields, ...additionalFields };\n }\n const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]);\n if (!IsObject(result))\n throw new TypeError('bad return from calendar.mergeFields()');\n return result;\n}\nexport function CalendarDateAdd(calendar, date, duration, options, dateAddParam) {\n let dateAdd = dateAddParam;\n if (dateAdd === undefined) {\n dateAdd = calendar.dateAdd;\n }\n const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nfunction CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) {\n let dateUntil = dateUntilParam;\n if (dateUntil === undefined) {\n dateUntil = calendar.dateUntil;\n }\n const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n if (!IsTemporalDuration(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYear(calendar, dateLike) {\n const result = calendar.year(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar year result must be an integer');\n }\n return ToIntegerThrowOnInfinity(result);\n}\nexport function CalendarMonth(calendar, dateLike) {\n const result = calendar.month(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar month result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarMonthCode(calendar, dateLike) {\n const result = calendar.monthCode(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar monthCode result must be a string');\n }\n return ToString(result);\n}\nexport function CalendarDay(calendar, dateLike) {\n const result = calendar.day(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar day result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarEra(calendar, dateLike) {\n let result = calendar.era(dateLike);\n if (result !== undefined) {\n result = ToString(result);\n }\n return result;\n}\nexport function CalendarEraYear(calendar, dateLike) {\n let result = calendar.eraYear(dateLike);\n if (result !== undefined) {\n result = ToIntegerThrowOnInfinity(result);\n }\n return result;\n}\nexport function CalendarDayOfWeek(calendar, dateLike) {\n return calendar.dayOfWeek(dateLike);\n}\nexport function CalendarDayOfYear(calendar, dateLike) {\n return calendar.dayOfYear(dateLike);\n}\nexport function CalendarWeekOfYear(calendar, dateLike) {\n return calendar.weekOfYear(dateLike);\n}\nexport function CalendarDaysInWeek(calendar, dateLike) {\n return calendar.daysInWeek(dateLike);\n}\nexport function CalendarDaysInMonth(calendar, dateLike) {\n return calendar.daysInMonth(dateLike);\n}\nexport function CalendarDaysInYear(calendar, dateLike) {\n return calendar.daysInYear(dateLike);\n}\nexport function CalendarMonthsInYear(calendar, dateLike) {\n return calendar.monthsInYear(dateLike);\n}\nexport function CalendarInLeapYear(calendar, dateLike) {\n return calendar.inLeapYear(dateLike);\n}\nexport function ToTemporalCalendar(calendarLikeParam) {\n let calendarLike = calendarLikeParam;\n if (IsObject(calendarLike)) {\n if (HasSlot(calendarLike, CALENDAR))\n return GetSlot(calendarLike, CALENDAR);\n if (!('calendar' in calendarLike))\n return calendarLike;\n calendarLike = calendarLike.calendar;\n if (IsObject(calendarLike) && !('calendar' in calendarLike))\n return calendarLike;\n }\n const identifier = ToString(calendarLike);\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n if (IsBuiltinCalendar(identifier))\n return new TemporalCalendar(identifier);\n let calendar;\n try {\n ({ calendar } = ParseISODateTime(identifier));\n }\n catch {\n throw new RangeError(`Invalid calendar: ${identifier}`);\n }\n if (!calendar)\n calendar = 'iso8601';\n return new TemporalCalendar(calendar);\n}\nfunction GetTemporalCalendarWithISODefault(item) {\n if (HasSlot(item, CALENDAR))\n return GetSlot(item, CALENDAR);\n const { calendar } = item;\n if (calendar === undefined)\n return GetISO8601Calendar();\n return ToTemporalCalendar(calendar);\n}\nexport function CalendarEquals(one, two) {\n if (one === two)\n return true;\n const cal1 = ToString(one);\n const cal2 = ToString(two);\n return cal1 === cal2;\n}\nexport function ConsolidateCalendars(one, two) {\n if (one === two)\n return two;\n const sOne = ToString(one);\n const sTwo = ToString(two);\n if (sOne === sTwo || sOne === 'iso8601') {\n return two;\n }\n else if (sTwo === 'iso8601') {\n return one;\n }\n else {\n throw new RangeError('irreconcilable calendars');\n }\n}\nexport function CalendarDateFromFields(calendar, fields, options) {\n const result = calendar.dateFromFields(fields, options);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYearMonthFromFields(calendar, fields, options) {\n const result = calendar.yearMonthFromFields(fields, options);\n if (!IsTemporalYearMonth(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarMonthDayFromFields(calendar, fields, options) {\n const result = calendar.monthDayFromFields(fields, options);\n if (!IsTemporalMonthDay(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function ToTemporalTimeZone(temporalTimeZoneLikeParam) {\n let temporalTimeZoneLike = temporalTimeZoneLikeParam;\n if (IsObject(temporalTimeZoneLike)) {\n if (IsTemporalZonedDateTime(temporalTimeZoneLike))\n return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n if (!('timeZone' in temporalTimeZoneLike))\n return temporalTimeZoneLike;\n temporalTimeZoneLike = temporalTimeZoneLike.timeZone;\n if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) {\n return temporalTimeZoneLike;\n }\n }\n const identifier = ToString(temporalTimeZoneLike);\n const timeZone = ParseTemporalTimeZone(identifier);\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(timeZone);\n}\nexport function TimeZoneEquals(one, two) {\n if (one === two)\n return true;\n const tz1 = ToString(one);\n const tz2 = ToString(two);\n return tz1 === tz2;\n}\nexport function TemporalDateTimeToDate(dateTime) {\n return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR));\n}\nexport function TemporalDateTimeToTime(dateTime) {\n const Time = GetIntrinsic('%Temporal.PlainTime%');\n return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n}\nexport function GetOffsetNanosecondsFor(timeZone, instant) {\n let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor;\n if (typeof getOffsetNanosecondsFor !== 'function') {\n throw new TypeError('getOffsetNanosecondsFor not callable');\n }\n const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]);\n if (typeof offsetNs !== 'number') {\n throw new TypeError('bad return from getOffsetNanosecondsFor');\n }\n if (!IsInteger(offsetNs) || MathAbs(offsetNs) > 86400e9) {\n throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n }\n return offsetNs;\n}\nexport function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) {\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n return FormatTimeZoneOffsetString(offsetNs);\n}\nexport function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) {\n const ns = GetSlot(instant, EPOCHNANOSECONDS);\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs));\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) {\n const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\nfunction DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const numInstants = possibleInstants.length;\n if (numInstants === 1)\n return possibleInstants[0];\n if (numInstants) {\n switch (disambiguation) {\n case 'compatible':\n // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n case 'earlier':\n return possibleInstants[0];\n case 'later':\n return possibleInstants[numInstants - 1];\n case 'reject': {\n throw new RangeError('multiple instants found');\n }\n }\n }\n const year = GetSlot(dateTime, ISO_YEAR);\n const month = GetSlot(dateTime, ISO_MONTH);\n const day = GetSlot(dateTime, ISO_DAY);\n const hour = GetSlot(dateTime, ISO_HOUR);\n const minute = GetSlot(dateTime, ISO_MINUTE);\n const second = GetSlot(dateTime, ISO_SECOND);\n const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utcns === null)\n throw new RangeError('DateTime outside of supported range');\n const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n const nanoseconds = offsetAfter - offsetBefore;\n switch (disambiguation) {\n case 'earlier': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined);\n const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar);\n return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n }\n case 'compatible':\n // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n case 'later': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined);\n const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar);\n const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n return possible[possible.length - 1];\n }\n case 'reject': {\n throw new RangeError('no such instant found');\n }\n }\n}\nfunction GetPossibleInstantsFor(timeZone, dateTime) {\n const possibleInstants = timeZone.getPossibleInstantsFor(dateTime);\n const result = [];\n for (const instant of possibleInstants) {\n if (!IsTemporalInstant(instant)) {\n throw new TypeError('bad return from getPossibleInstantsFor');\n }\n ArrayPrototypePush.call(result, instant);\n }\n return result;\n}\nexport function ISOYearString(year) {\n let yearString;\n if (year < 0 || year > 9999) {\n const sign = year < 0 ? '-' : '+';\n const yearNumber = MathAbs(year);\n yearString = sign + `000000${yearNumber}`.slice(-6);\n }\n else {\n yearString = `0000${year}`.slice(-4);\n }\n return yearString;\n}\nexport function ISODateTimePartString(part) {\n return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) {\n if (precision === 'minute')\n return '';\n const secs = `:${ISODateTimePartString(second)}`;\n let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n let fraction;\n if (precision === 'auto') {\n if (fractionNumber === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n }\n else {\n if (precision === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n }\n return `${secs}.${fraction}`;\n}\nexport function TemporalInstantToString(instant, timeZone, precision) {\n let outputTimeZone = timeZone;\n if (outputTimeZone === undefined) {\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n outputTimeZone = new TemporalTimeZone('UTC');\n }\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let timeZoneString = 'Z';\n if (timeZone !== undefined) {\n const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n }\n return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\nexport function TemporalDurationToString(duration, precision = 'auto', options = undefined) {\n function formatNumber(num) {\n if (num <= NumberMaxSafeInteger)\n return num.toString(10);\n return JSBI.BigInt(num).toString(10);\n }\n const years = GetSlot(duration, YEARS);\n const months = GetSlot(duration, MONTHS);\n const weeks = GetSlot(duration, WEEKS);\n const days = GetSlot(duration, DAYS);\n const hours = GetSlot(duration, HOURS);\n const minutes = GetSlot(duration, MINUTES);\n let seconds = GetSlot(duration, SECONDS);\n let ms = GetSlot(duration, MILLISECONDS);\n let µs = GetSlot(duration, MICROSECONDS);\n let ns = GetSlot(duration, NANOSECONDS);\n const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({\n seconds,\n milliseconds: ms,\n microseconds: µs,\n nanoseconds: ns\n } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n }\n const dateParts = [];\n if (years)\n dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n if (months)\n dateParts.push(`${formatNumber(MathAbs(months))}M`);\n if (weeks)\n dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n if (days)\n dateParts.push(`${formatNumber(MathAbs(days))}D`);\n const timeParts = [];\n if (hours)\n timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n if (minutes)\n timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n const secondParts = [];\n let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n let nsBigInt, µsBigInt, msBigInt, secondsBigInt;\n ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n const fraction = MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n let decimalPart;\n if (precision === 'auto') {\n if (fraction !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0');\n while (decimalPart[decimalPart.length - 1] === '0') {\n decimalPart = decimalPart.slice(0, -1);\n }\n }\n }\n else if (precision !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n }\n if (decimalPart)\n secondParts.unshift('.', decimalPart);\n if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n secondParts.unshift(abs(secondsBigInt).toString());\n }\n if (secondParts.length)\n timeParts.push(`${secondParts.join('')}S`);\n if (timeParts.length)\n timeParts.unshift('T');\n if (!dateParts.length && !timeParts.length)\n return 'PT0S';\n return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\nexport function TemporalDateToString(date, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(date, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n const calendarID = ToString(GetSlot(date, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${year}-${month}-${day}${calendar}`;\n}\nexport function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) {\n let year = GetSlot(dateTime, ISO_YEAR);\n let month = GetSlot(dateTime, ISO_MONTH);\n let day = GetSlot(dateTime, ISO_DAY);\n let hour = GetSlot(dateTime, ISO_HOUR);\n let minute = GetSlot(dateTime, ISO_MINUTE);\n let second = GetSlot(dateTime, ISO_SECOND);\n let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const yearString = ISOYearString(year);\n const monthString = ISODateTimePartString(month);\n const dayString = ISODateTimePartString(day);\n const hourString = ISODateTimePartString(hour);\n const minuteString = ISODateTimePartString(minute);\n const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n const calendarID = ToString(GetSlot(dateTime, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\nexport function TemporalMonthDayToString(monthDay, showCalendar = 'auto') {\n const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n let resultString = `${month}-${day}`;\n const calendar = GetSlot(monthDay, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n resultString = `${year}-${resultString}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n let resultString = `${year}-${month}`;\n const calendar = GetSlot(yearMonth, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n resultString += `-${day}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) {\n let instant = GetSlot(zdt, INSTANT);\n if (options) {\n const { unit, increment, roundingMode } = options;\n const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n instant = new TemporalInstant(ns);\n }\n const tz = GetSlot(zdt, TIME_ZONE);\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n if (showOffset !== 'never') {\n const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n result += FormatISOTimeZoneOffsetString(offsetNs);\n }\n if (showTimeZone !== 'never')\n result += `[${tz}]`;\n const calendarID = ToString(GetSlot(zdt, CALENDAR));\n result += FormatCalendarAnnotation(calendarID, showCalendar);\n return result;\n}\nexport function TestTimeZoneOffsetString(string) {\n return OFFSET.test(StringCtor(string));\n}\nexport function ParseTimeZoneOffsetString(string) {\n const match = OFFSET.exec(StringCtor(string));\n if (!match) {\n throw new RangeError(`invalid time zone offset: ${string}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n const hours = +match[2];\n const minutes = +(match[3] || 0);\n const seconds = +(match[4] || 0);\n const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) {\n if (TestTimeZoneOffsetString(timeZoneIdentifier)) {\n const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n return FormatTimeZoneOffsetString(offsetNs);\n }\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n return formatter.resolvedOptions().timeZone;\n}\nexport function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) {\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utc === null)\n throw new RangeError('Date outside of supported range');\n return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam) {\n const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n const nanoseconds = offsetNanoseconds % 1e9;\n const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n const secondString = ISODateTimePartString(seconds);\n let post = '';\n if (nanoseconds) {\n let fraction = `${nanoseconds}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n post = `:${secondString}.${fraction}`;\n }\n else if (seconds) {\n post = `:${secondString}`;\n }\n return `${sign}${hourString}:${minuteString}${post}`;\n}\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam) {\n let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand'));\n const sign = offsetNanoseconds < 0 ? '-' : '+';\n offsetNanoseconds = MathAbs(offsetNanoseconds);\n const minutes = (offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n // Note: Date.UTC() interprets one and two-digit years as being in the\n // 20th century, so don't use it\n const legacyDate = new Date();\n legacyDate.setUTCHours(hour, minute, second, millisecond);\n legacyDate.setUTCFullYear(year, month - 1, day);\n const ms = legacyDate.getTime();\n if (NumberIsNaN(ms))\n return null;\n let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX))\n return null;\n return ns;\n}\nfunction GetISOPartsFromEpoch(epochNanoseconds) {\n const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n let epochMilliseconds = JSBI.toNumber(quotient);\n let nanos = JSBI.toNumber(remainder);\n if (nanos < 0) {\n nanos += 1e6;\n epochMilliseconds -= 1;\n }\n const microsecond = MathFloor(nanos / 1e3) % 1e3;\n const nanosecond = nanos % 1e3;\n const item = new Date(epochMilliseconds);\n const year = item.getUTCFullYear();\n const month = item.getUTCMonth() + 1;\n const day = item.getUTCDate();\n const hour = item.getUTCHours();\n const minute = item.getUTCMinutes();\n const second = item.getUTCSeconds();\n const millisecond = item.getUTCMilliseconds();\n return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) {\n const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction maxJSBI(one, two) {\n return JSBI.lessThan(one, two) ? two : one;\n}\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\nexport function GetIANATimeZoneNextTransition(epochNanoseconds, id) {\n // Decide how far in the future after `epochNanoseconds` we'll look for an\n // offset change. There are two cases:\n // 1. If it's a past date (or a date in the near future) then it's possible\n // that the time zone may have newly added DST in the next few years. So\n // we'll have to look from the provided time until a few years after the\n // current system time. (Changes to DST policy are usually announced a few\n // years in the future.) Note that the first DST anywhere started in 1847,\n // so we'll start checks in 1847 instead of wasting cycles on years where\n // there will never be transitions.\n // 2. If it's a future date beyond the next few years, then we'll just assume\n // that the latest DST policy in TZDB will still be in effect. In this\n // case, we only need to look one year in the future to see if there are\n // any DST transitions. We actually only need to look 9-10 months because\n // DST has two transitions per year, but we'll use a year just to be safe.\n const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n // start there if an earlier date is supplied.\n let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n let rightNanos = leftNanos;\n let rightOffsetNs = leftOffsetNs;\n while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n if (leftOffsetNs === rightOffsetNs) {\n leftNanos = rightNanos;\n }\n }\n if (leftOffsetNs === rightOffsetNs)\n return null;\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\nexport function GetIANATimeZonePreviousTransition(epochNanoseconds, id) {\n // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n // have to look back one year to find a transition. But if it doesn't use DST,\n // then we need to look all the way back to 1847 (the earliest rule in the\n // TZDB) to see if it had other offset transitions in the past. Looping back\n // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n // also unnecessary because DST rules aren't put into the TZDB more than a few\n // years in the future because the political changes in time zones happen with\n // only a few years' warning. Therefore, if a far-future date is provided,\n // then we'll run the check in two parts:\n // 1. First, we'll look back for up to one year to see if the latest TZDB\n // rules have DST.\n // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n // current system time, and then look back to 1847. This reduces the\n // worst-case loop from 273K years to 175 years, for a ~1500x improvement\n // in worst-case perf.\n const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n let leftNanos = rightNanos;\n let leftOffsetNs = rightOffsetNs;\n while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n if (rightOffsetNs === leftOffsetNs) {\n rightNanos = leftNanos;\n }\n }\n if (rightOffsetNs === leftOffsetNs) {\n if (isFarFuture) {\n // There was no DST after looking back one year, which means that the most\n // recent TZDB rules don't have any recurring transitions. To check for\n // transitions in older rules, back up to a few years after the current\n // date and then look all the way back to 1847. Note that we move back one\n // day from the latest possible rule so that when the recursion runs it\n // won't consider the new time to be \"far future\" because the system clock\n // has advanced in the meantime.\n const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n return GetIANATimeZonePreviousTransition(newTimeToCheck, id);\n }\n return null;\n }\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime) {\n const parts = datetime.split(/[^\\w]+/);\n if (parts.length !== 7) {\n throw new RangeError(`expected 7 parts in \"${datetime}`);\n }\n const month = +parts[0];\n const day = +parts[1];\n let year = +parts[2];\n const era = parts[3].toUpperCase();\n if (era === 'B' || era === 'BC') {\n year = -year + 1;\n }\n else if (era !== 'A' && era !== 'AD') {\n throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n }\n let hour = +parts[4];\n if (hour === 24) {\n // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n hour = 0;\n }\n const minute = +parts[5];\n const second = +parts[6];\n if (!NumberIsFinite(year) ||\n !NumberIsFinite(month) ||\n !NumberIsFinite(day) ||\n !NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second)) {\n throw new RangeError(`Invalid number in \"${datetime}`);\n }\n return { year, month, day, hour, minute, second };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone, epochMilliseconds) {\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n // Using `format` instead of `formatToParts` for compatibility with older clients\n const datetime = formatter.format(new Date(epochMilliseconds));\n return parseFromEnUsFormat(datetime);\n}\nexport function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (ns === null)\n throw new RangeError('DateTime outside of supported range');\n let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n if (JSBI.lessThan(nsEarlier, NS_MIN))\n nsEarlier = ns;\n let nsLater = JSBI.add(ns, DAY_NANOS);\n if (JSBI.greaterThan(nsLater, NS_MAX))\n nsLater = ns;\n const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id);\n const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id);\n const found = earliest === latest ? [earliest] : [earliest, latest];\n return found\n .map((offsetNanoseconds) => {\n const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n if (year !== parts.year ||\n month !== parts.month ||\n day !== parts.day ||\n hour !== parts.hour ||\n minute !== parts.minute ||\n second !== parts.second ||\n millisecond !== parts.millisecond ||\n microsecond !== parts.microsecond ||\n nanosecond !== parts.nanosecond) {\n return undefined;\n }\n return epochNanoseconds;\n })\n .filter((x) => x !== undefined);\n}\nexport function LeapYear(year) {\n if (undefined === year)\n return false;\n const isDiv4 = year % 4 === 0;\n const isDiv100 = year % 100 === 0;\n const isDiv400 = year % 400 === 0;\n return isDiv4 && (!isDiv100 || isDiv400);\n}\nexport function ISODaysInMonth(year, month) {\n const DoM = {\n standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n };\n return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\nexport function DayOfWeek(year, month, day) {\n const m = month + (month < 3 ? 10 : -2);\n const Y = year - (month < 3 ? 1 : 0);\n const c = MathFloor(Y / 100);\n const y = Y - c * 100;\n const d = day;\n const pD = d;\n const pM = MathFloor(2.6 * m - 0.2);\n const pY = y + MathFloor(y / 4);\n const pC = MathFloor(c / 4) - 2 * c;\n const dow = (pD + pM + pY + pC) % 7;\n return dow + (dow <= 0 ? 7 : 0);\n}\nexport function DayOfYear(year, month, day) {\n let days = day;\n for (let m = month - 1; m > 0; m--) {\n days += ISODaysInMonth(year, m);\n }\n return days;\n}\nexport function WeekOfYear(year, month, day) {\n const doy = DayOfYear(year, month, day);\n const dow = DayOfWeek(year, month, day) || 7;\n const doj = DayOfWeek(year, 1, 1);\n const week = MathFloor((doy - dow + 10) / 7);\n if (week < 1) {\n if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n return 53;\n }\n else {\n return 52;\n }\n }\n if (week === 53) {\n if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n return 1;\n }\n }\n return week;\n}\nexport function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) {\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (prop !== 0)\n return prop < 0 ? -1 : 1;\n }\n return 0;\n}\nfunction BalanceISOYearMonth(yearParam, monthParam) {\n let year = yearParam;\n let month = monthParam;\n if (!NumberIsFinite(year) || !NumberIsFinite(month))\n throw new RangeError('infinity is out of range');\n month -= 1;\n year += MathFloor(month / 12);\n month %= 12;\n if (month < 0)\n month += 12;\n month += 1;\n return { year, month };\n}\nfunction BalanceISODate(yearParam, monthParam, dayParam) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n if (!NumberIsFinite(day))\n throw new RangeError('infinity is out of range');\n ({ year, month } = BalanceISOYearMonth(year, month));\n let daysInYear = 0;\n let testYear = month > 2 ? year : year - 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n year -= 1;\n testYear -= 1;\n day += daysInYear;\n }\n testYear += 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n year += 1;\n testYear += 1;\n day -= daysInYear;\n }\n while (day < 1) {\n ({ year, month } = BalanceISOYearMonth(year, month - 1));\n day += ISODaysInMonth(year, month);\n }\n while (day > ISODaysInMonth(year, month)) {\n day -= ISODaysInMonth(year, month);\n ({ year, month } = BalanceISOYearMonth(year, month + 1));\n }\n return { year, month, day };\n}\nfunction BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n if (!NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second) ||\n !NumberIsFinite(millisecond) ||\n !NumberIsFinite(microsecond) ||\n !NumberIsFinite(nanosecond)) {\n throw new RangeError('infinity is out of range');\n }\n microsecond += MathFloor(nanosecond / 1000);\n nanosecond = NonNegativeModulo(nanosecond, 1000);\n millisecond += MathFloor(microsecond / 1000);\n microsecond = NonNegativeModulo(microsecond, 1000);\n second += MathFloor(millisecond / 1000);\n millisecond = NonNegativeModulo(millisecond, 1000);\n minute += MathFloor(second / 60);\n second = NonNegativeModulo(second, 60);\n hour += MathFloor(minute / 60);\n minute = NonNegativeModulo(minute, 60);\n const deltaDays = MathFloor(hour / 24);\n hour = NonNegativeModulo(hour, 24);\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) {\n const days = JSBI.BigInt(daysParam);\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n if (daysParam !== 0)\n nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\nfunction NanosecondsToDays(nanosecondsParam, relativeTo) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n let dayLengthNs = 86400e9;\n if (sign === 0)\n return { days: 0, nanoseconds: ZERO, dayLengthNs };\n if (!IsTemporalZonedDateTime(relativeTo)) {\n let days;\n ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n }\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n const start = GetSlot(relativeTo, INSTANT);\n const endNs = JSBI.add(startNs, nanoseconds);\n const end = new TemporalInstant(endNs);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n // Find the difference in days only.\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate(null));\n let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n // If clock time after addition was in the middle of a skipped period, the\n // endpoint was disambiguated to a later clock time. So it's possible that\n // the resulting disambiguated result is later than endNs. If so, then back\n // up one day and try again. Repeat if necessary (some transitions are\n // > 24 hours) until either there's zero days left or the date duration is\n // back inside the period where it belongs. Note that this case only can\n // happen for positive durations because the only direction that\n // `disambiguation: 'compatible'` can change clock time is forwards.\n if (sign === 1) {\n while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) {\n --days;\n intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may do disambiguation\n }\n }\n nanoseconds = JSBI.subtract(endNs, intermediateNs);\n let isOverflow = false;\n let relativeInstant = new TemporalInstant(intermediateNs);\n do {\n // calculate length of the next day (day that contains the time remainder)\n const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO);\n if (isOverflow) {\n nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n relativeInstant = new TemporalInstant(oneDayFartherNs);\n days += sign;\n }\n } while (isOverflow);\n return { days, nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\nexport function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) {\n let days = daysParam;\n let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt;\n if (IsTemporalZonedDateTime(relativeTo)) {\n const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam);\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n }\n else {\n nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0);\n }\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n }\n else {\n days = 0;\n }\n const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n nanosecondsBigInt = abs(nanosecondsBigInt);\n microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n switch (largestUnit) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n break;\n case 'minute':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n break;\n case 'second':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n break;\n case 'millisecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n break;\n case 'microsecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n break;\n case 'nanosecond':\n break;\n default:\n throw new Error('assert not reached');\n }\n const hours = JSBI.toNumber(hoursBigInt) * sign;\n const minutes = JSBI.toNumber(minutesBigInt) * sign;\n const seconds = JSBI.toNumber(secondsBigInt) * sign;\n const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year':\n // no-op\n break;\n case 'month':\n {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance years down to months\n const dateAdd = calendar.dateAdd;\n const dateUntil = calendar.dateUntil;\n let relativeToDateOnly = relativeTo;\n while (MathAbs(years) > 0) {\n const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil);\n const oneYearMonths = GetSlot(untilResult, MONTHS);\n relativeToDateOnly = newRelativeTo;\n months += oneYearMonths;\n years -= sign;\n }\n }\n break;\n case 'week':\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance years down to days\n while (MathAbs(years) > 0) {\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n break;\n default:\n // balance years down to days\n while (MathAbs(years) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n // balance weeks down to days\n while (MathAbs(weeks) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n days += oneWeekDays;\n weeks -= sign;\n }\n break;\n }\n return { years, months, weeks, days };\n}\nexport function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n if (sign === 0)\n return { years, months, weeks, days };\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('a starting point is required for years balancing');\n // balance days up to years\n let newRelativeTo, oneYearDays;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n while (MathAbs(days) >= MathAbs(oneYearDays)) {\n days -= oneYearDays;\n years += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n }\n // balance days up to months\n let oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n // balance months up to years\n const dateAdd = calendar.dateAdd;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const dateUntil = calendar.dateUntil;\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n let oneYearMonths = GetSlot(untilResult, MONTHS);\n while (MathAbs(months) >= MathAbs(oneYearMonths)) {\n months -= oneYearMonths;\n years += sign;\n relativeTo = newRelativeTo;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n oneYearMonths = GetSlot(untilResult, MONTHS);\n }\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance days up to months\n let newRelativeTo, oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance days up to weeks\n let newRelativeTo, oneWeekDays;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n days -= oneWeekDays;\n weeks += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n break;\n }\n default:\n // no-op\n break;\n }\n return { years, months, weeks, days };\n}\nexport function CalculateOffsetShift(relativeTo, y, mon, w, d) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n const instant = GetSlot(relativeTo, INSTANT);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instantAfter = new TemporalInstant(after);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n return offsetAfter - offsetBefore;\n }\n return 0;\n}\nexport function CreateNegatedTemporalDuration(duration) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS));\n}\nexport function ConstrainToRange(value, min, max) {\n // Math.Max accepts undefined values and returns NaN. Undefined values are\n // used for optional params in the method below.\n return MathMin(max, MathMax(min, value));\n}\nfunction ConstrainISODate(year, monthParam, dayParam) {\n const month = ConstrainToRange(monthParam, 1, 12);\n const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n return { year, month, day };\n}\nfunction ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const hour = ConstrainToRange(hourParam, 0, 23);\n const minute = ConstrainToRange(minuteParam, 0, 59);\n const second = ConstrainToRange(secondParam, 0, 59);\n const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RejectToRange(value, min, max) {\n if (value < min || value > max)\n throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\nfunction RejectISODate(year, month, day) {\n RejectToRange(month, 1, 12);\n RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\nfunction RejectDateRange(year, month, day) {\n // Noon avoids trouble at edges of DateTime range (excludes midnight)\n RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\nexport function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(hour, 0, 23);\n RejectToRange(minute, 0, 59);\n RejectToRange(second, 0, 59);\n RejectToRange(millisecond, 0, 999);\n RejectToRange(microsecond, 0, 999);\n RejectToRange(nanosecond, 0, 999);\n}\nfunction RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectISODate(year, month, day);\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n // Reject any DateTime 24 hours or more outside the Instant range\n if ((year === YEAR_MIN &&\n null ==\n GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n (year === YEAR_MAX &&\n null ==\n GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) {\n throw new RangeError('DateTime outside of supported range');\n }\n}\nexport function ValidateEpochNanoseconds(epochNanoseconds) {\n if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n throw new RangeError('Instant outside of supported range');\n }\n}\nfunction RejectYearMonthRange(year, month) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n if (year === YEAR_MIN) {\n RejectToRange(month, 4, 12);\n }\n else if (year === YEAR_MAX) {\n RejectToRange(month, 1, 9);\n }\n}\nexport function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) {\n const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (!NumberIsFinite(prop))\n throw new RangeError('infinite values not allowed as duration fields');\n const propSign = MathSign(prop);\n if (propSign !== 0 && propSign !== sign)\n throw new RangeError('mixed-sign values not allowed as duration fields');\n }\n}\nexport function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) {\n switch (largestUnit) {\n case 'year':\n case 'month': {\n const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n if (sign === 0)\n return { years: 0, months: 0, weeks: 0, days: 0 };\n const start = { year: y1, month: m1, day: d1 };\n const end = { year: y2, month: m2, day: d2 };\n let years = end.year - start.year;\n let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months: 0, weeks: 0, days: 0 }\n : { years: 0, months: years * 12, weeks: 0, days: 0 };\n }\n let months = end.month - start.month;\n if (midSign !== sign) {\n years -= sign;\n months += sign * 12;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months, weeks: 0, days: 0 }\n : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n }\n if (midSign !== sign) {\n // The end date is later in the month than mid date (or earlier for\n // negative durations). Back up one month.\n months -= sign;\n if (months === -sign) {\n years -= sign;\n months = 11 * sign;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n }\n let days = 0;\n // If we get here, months and years are correct (no overflow), and `mid`\n // is within the range from `start` to `end`. To count the days between\n // `mid` and `end`, there are 3 cases:\n // 1) same month: use simple subtraction\n // 2) end is previous month from intermediate (negative duration)\n // 3) end is next month from intermediate (positive duration)\n if (mid.month === end.month) {\n // 1) same month: use simple subtraction\n days = end.day - mid.day;\n }\n else if (sign < 0) {\n // 2) end is previous month from intermediate (negative duration)\n // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n }\n else {\n // 3) end is next month from intermediate (positive duration)\n // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n }\n if (largestUnit === 'month') {\n months += years * 12;\n years = 0;\n }\n return { years, months, weeks: 0, days };\n }\n case 'week':\n case 'day': {\n let larger, smaller, sign;\n if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n smaller = { year: y1, month: m1, day: d1 };\n larger = { year: y2, month: m2, day: d2 };\n sign = 1;\n }\n else {\n smaller = { year: y2, month: m2, day: d2 };\n larger = { year: y1, month: m1, day: d1 };\n sign = -1;\n }\n let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n for (let year = smaller.year; year < larger.year; ++year) {\n days += LeapYear(year) ? 366 : 365;\n }\n let weeks = 0;\n if (largestUnit === 'week') {\n weeks = MathFloor(days / 7);\n days %= 7;\n }\n weeks *= sign;\n days *= sign;\n return { years: 0, months: 0, weeks, days };\n }\n default:\n throw new Error('assert not reached');\n }\n}\nfunction DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) {\n let hours = h2 - h1;\n let minutes = min2 - min1;\n let seconds = s2 - s1;\n let milliseconds = ms2 - ms1;\n let microseconds = µs2 - µs1;\n let nanoseconds = ns2 - ns1;\n const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n let deltaDays = 0;\n ({\n deltaDays,\n hour: hours,\n minute: minutes,\n second: seconds,\n millisecond: milliseconds,\n microsecond: microseconds,\n nanosecond: nanoseconds\n } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n if (deltaDays != 0)\n throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceInstant(ns1, ns2, increment, unit, roundingMode) {\n const diff = JSBI.subtract(ns2, ns1);\n const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(diff, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n const roundedDiff = JSBI.add(wholeDays, roundedRemainder);\n const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND));\n const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND));\n const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND));\n const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION));\n return { seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) {\n let y1 = y1Param;\n let mon1 = mon1Param;\n let d1 = d1Param;\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2);\n const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n if (dateSign === -timeSign) {\n ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const untilOptions = MergeLargestUnitOption(options, dateLargestUnit);\n // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n // Type 'SmallestUnit | undefined' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n // Type '\"hour\"' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions);\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) {\n const nsDiff = JSBI.subtract(ns2, ns1);\n if (JSBI.equal(nsDiff, ZERO)) {\n return {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n }\n // Find the difference in dates only.\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const start = new TemporalInstant(ns1);\n const end = new TemporalInstant(ns2);\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options);\n const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n // Finally, merge the date and time durations and return the merged result.\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour');\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// TODO: does it make sense to explicitly union the other and options types for each operation?\nexport function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) {\n const other = ToTemporalInstant(otherParam);\n let first, second;\n if (operation === 'until') {\n [first, second] = [instant, other];\n }\n else {\n [first, second] = [other, instant];\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ToTemporalRoundingMode(options, 'trunc');\n const MAX_DIFFERENCE_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false);\n const onens = GetSlot(first, EPOCHNANOSECONDS);\n const twons = GetSlot(second, EPOCHNANOSECONDS);\n let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode);\n let hours, minutes;\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDate(otherParam);\n const calendar = GetSlot(plainDate, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions);\n if (smallestUnit !== 'day' || roundingIncrement !== 1) {\n ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDateTime(otherParam);\n const calendar = GetSlot(plainDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options);\n const relativeTo = TemporalDateTimeToDate(plainDateTime);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalTime(otherParam);\n const options = GetOptionsObject(optionsParam);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'hour';\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalYearMonth(otherParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarID = ToString(calendar);\n const otherCalendarID = ToString(otherCalendar);\n if (calendarID !== otherCalendarID) {\n throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n if (c === 'date' && s !== 'week' && s !== 'day')\n allowed.push(s, p);\n return allowed;\n }, []);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month');\n if (smallestUnit === 'week' || smallestUnit === 'day') {\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'week' || largestUnit === 'day') {\n throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n }\n if (largestUnit === 'auto')\n largestUnit = 'year';\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const otherFields = PrepareTemporalFields(other, fieldNames, []);\n otherFields.day = 1;\n const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n thisFields.day = 1;\n // The calls to PrepareTemporalFields don't mark day as a required property,\n // and TS doesn't automatically narrow the type of the object because of the\n // assignments above, so we must \"cast\" the inputs.\n const otherDate = CalendarDateFromFields(calendar, otherFields);\n const thisDate = CalendarDateFromFields(calendar, thisFields);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions);\n if (smallestUnit !== 'month' || roundingIncrement !== 1) {\n ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalZonedDateTime(otherParam);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, \n // TODO this doesn't type-check as it includes >= day-size units\n // This is probably safe as the typing for ToSmallestTemporalUnit isn't\n // very good.\n smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n throw new RangeError(\"When calculating difference between time zones, largestUnit must be 'hours' \" +\n 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.');\n }\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n year += years;\n month += months;\n ({ year, month } = BalanceISOYearMonth(year, month));\n ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n days += 7 * weeks;\n day += days;\n ({ year, month, day } = BalanceISODate(year, month, day));\n return { year, month, day };\n}\nfunction AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n hour += hours;\n minute += minutes;\n second += seconds;\n millisecond += milliseconds;\n microsecond += microseconds;\n nanosecond += nanoseconds;\n let deltaDays = 0;\n ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond));\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) {\n const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (!relativeTo) {\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n }\n years = months = weeks = 0;\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else if (IsTemporalDate(relativeTo)) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n const dateAdd = calendar.dateAdd;\n const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const differenceOptions = ObjectCreate(null);\n differenceOptions.largestUnit = dateLargestUnit;\n ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else {\n // relativeTo is a ZonedDateTime\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate(null)));\n }\n }\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) {\n let sum = ZERO;\n sum = JSBI.add(sum, JSBI.BigInt(ns));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n const result = JSBI.add(epochNanoseconds, sum);\n ValidateEpochNanoseconds(result);\n return result;\n}\nfunction AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) {\n let days = daysParam;\n // Add the time part\n let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n days += deltaDays;\n // Delegate the date part addition to the calendar\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const datePart = CreateTemporalDate(year, month, day, calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n return {\n year: GetSlot(addedDate, ISO_YEAR),\n month: GetSlot(addedDate, ISO_MONTH),\n day: GetSlot(addedDate, ISO_DAY),\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond\n };\n}\nexport function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) {\n // If only time is to be added, then use Instant math. It's not OK to fall\n // through to the date/time code below because compatible disambiguation in\n // the PlainDateTime=>Instant conversion will change the offset of any\n // ZonedDateTime in the repeated clock time after a backwards transition.\n // When adding/subtracting time units and not dates, this disambiguation is\n // not expected and so is avoided below via a fast path for time-only\n // arithmetic.\n // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n }\n // RFC 5545 requires the date portion to be added in calendar days and the\n // time portion to be added in exact time.\n const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar);\n const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar);\n // Note that 'compatible' is used below because this disambiguation behavior\n // is required by RFC 5545.\n const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible');\n return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\nexport function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other);\n const options = GetOptionsObject(optionsParam);\n const relativeTo = ToRelativeTemporalObject(options);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n 'years',\n 'months',\n 'weeks',\n 'days'\n ]);\n const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ns);\n}\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(dateTime, CALENDAR);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'));\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) {\n let duration = ToTemporalDurationRecord(durationLike);\n if (operation === 'subtract') {\n duration = {\n years: -duration.years,\n months: -duration.months,\n weeks: -duration.weeks,\n days: -duration.days,\n hours: -duration.hours,\n minutes: -duration.minutes,\n seconds: -duration.seconds,\n milliseconds: -duration.milliseconds,\n microseconds: -duration.microseconds,\n nanoseconds: -duration.nanoseconds\n };\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1;\n // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n // and TS doesn't narrow the type as a result of the assignment above, so we\n // cast the fields input to the new type.\n const startDate = CalendarDateFromFields(calendar, fields);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const optionsCopy = ObjectAssign(ObjectCreate(null), options);\n const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options);\n const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nfunction RoundNumberToIncrement(quantity, increment, mode) {\n if (increment === 1)\n return quantity;\n let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment));\n if (JSBI.equal(remainder, ZERO))\n return quantity;\n const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n switch (mode) {\n case 'ceil':\n if (sign > 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'floor':\n if (sign < 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'trunc':\n // no change needed, because divmod is a truncation\n break;\n case 'halfExpand':\n // \"half up away from zero\"\n if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) {\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n }\n break;\n }\n return JSBI.multiply(quotient, JSBI.BigInt(increment));\n}\nexport function RoundInstant(epochNs, increment, unit, roundingMode) {\n // Note: NonNegativeModulo, but with BigInt\n let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9));\n if (JSBI.lessThan(remainder, ZERO))\n remainder = JSBI.add(remainder, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(epochNs, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n return JSBI.add(wholeDays, roundedRemainder);\n}\nexport function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n let quantity = ZERO;\n switch (unit) {\n case 'day':\n case 'hour':\n quantity = JSBI.BigInt(hour);\n // fall through\n case 'minute':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n // fall through\n case 'second':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n // fall through\n case 'millisecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n // fall through\n case 'microsecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n // fall through\n case 'nanosecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n }\n const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode);\n const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n switch (unit) {\n case 'day':\n return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n case 'hour':\n return BalanceTime(result, 0, 0, 0, 0, 0);\n case 'minute':\n return BalanceTime(hour, result, 0, 0, 0, 0);\n case 'second':\n return BalanceTime(hour, minute, result, 0, 0, 0);\n case 'millisecond':\n return BalanceTime(hour, minute, second, result, 0, 0);\n case 'microsecond':\n return BalanceTime(hour, minute, second, millisecond, result, 0);\n case 'nanosecond':\n return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n default:\n throw new Error(`Invalid unit ${unit}`);\n }\n}\nfunction DaysUntil(earlier, later) {\n return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days;\n}\nfunction MoveRelativeDate(calendar, relativeToParam, duration) {\n const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined);\n const days = DaysUntil(relativeToParam, later);\n return { relativeTo: later, days };\n}\nexport function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) {\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\nexport function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (!IsTemporalZonedDateTime(relativeTo) ||\n unit === 'year' ||\n unit === 'month' ||\n unit === 'week' ||\n unit === 'day' ||\n (unit === 'nanosecond' && increment === 1)) {\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n }\n // There's one more round of rounding possible: if relativeTo is a\n // ZonedDateTime, the time units could have rounded up into enough hours\n // to exceed the day length. If this happens, grow the date part by a\n // single day and re-run exact time rounding on the smaller remainder. DO\n // NOT RECURSE, because once the extra hours are sucked up into the date\n // duration, there's no way for another full day to come from the next\n // round of rounding. And if it were possible (e.g. contrived calendar\n // with 30-minute-long \"days\") then it'd risk an infinite loop.\n let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0);\n const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) {\n ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo));\n timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'));\n }\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n let calendar, zdtRelative;\n // A cast is used below because relativeTo will be either PlainDate or\n // undefined for the rest of this long method (after any ZDT=>PlainDate\n // conversion below), and TS isn't smart enough to know that the type has\n // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n let relativeTo = relativeToParam;\n if (relativeTo) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n zdtRelative = relativeTo;\n relativeTo = ToTemporalDate(relativeTo);\n }\n else if (!IsTemporalDate(relativeTo)) {\n throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n }\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n // First convert time units up to days, if rounding to days or higher units.\n // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n // larger. We'll cast away `undefined` when it's used lower down below.\n let dayLengthNs;\n if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n let intermediate;\n if (zdtRelative) {\n intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n }\n let deltaDays;\n let dayLength;\n ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n dayLengthNs = JSBI.BigInt(dayLength);\n days += deltaDays;\n hours = minutes = seconds = milliseconds = microseconds = 0;\n }\n let total;\n switch (unit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('A starting point is required for years rounding');\n // convert months and weeks to days by calculating difference(\n // relativeTo + years, relativeTo + { years, months, weeks })\n const yearsDuration = new TemporalDuration(years);\n const dateAdd = calendar.dateAdd;\n const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n relativeTo = yearsLater;\n days += monthsWeeksInDays;\n const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'year';\n const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years;\n years += yearsPassed;\n const oldRelativeTo = relativeTo;\n relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd);\n const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n days -= daysPassed;\n const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear);\n // Note that `nanoseconds` below (here and in similar code for months,\n // weeks, and days further below) isn't actually nanoseconds for the\n // full date range. Instead, it's a BigInt representation of total\n // days multiplied by the number of nanoseconds in the last day of\n // the duration. This lets us do days-or-larger rounding using BigInt\n // math which reduces precision loss.\n oneYearDays = MathAbs(oneYearDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n months = weeks = days = 0;\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('A starting point is required for months rounding');\n // convert weeks to days by calculating difference(relativeTo +\n // { years, months }, relativeTo + { years, months, weeks })\n const yearsMonths = new TemporalDuration(years, months);\n const dateAdd = calendar.dateAdd;\n const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n relativeTo = yearsMonthsLater;\n days += weeksInDays;\n // Months may be different lengths of days depending on the calendar,\n // convert days to months in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n months += sign;\n days -= oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n oneMonthDays = MathAbs(oneMonthDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n weeks = days = 0;\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('A starting point is required for weeks rounding');\n // Weeks may be different lengths of days depending on the calendar,\n // convert days to weeks in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n weeks += sign;\n days -= oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n oneWeekDays = MathAbs(oneWeekDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n days = 0;\n break;\n }\n case 'day': {\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = dayLengthNs;\n nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n break;\n }\n case 'hour': {\n const divisor = 3600e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n minutes = seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'minute': {\n const divisor = 60e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'second': {\n const divisor = 1e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n milliseconds = microseconds = 0;\n break;\n }\n case 'millisecond': {\n const divisor = 1e6;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n microseconds = 0;\n break;\n }\n case 'microsecond': {\n const divisor = 1e3;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n break;\n }\n case 'nanosecond': {\n total = JSBI.toNumber(nanoseconds);\n nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode);\n break;\n }\n }\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n microseconds,\n nanoseconds: JSBI.toNumber(nanoseconds),\n total\n };\n}\nexport function CompareISODate(y1, m1, d1, y2, m2, d2) {\n for (const [x, y] of [\n [y1, y2],\n [m1, m2],\n [d1, d2]\n ]) {\n if (x !== y)\n return ComparisonResult(x - y);\n }\n return 0;\n}\nfunction NonNegativeModulo(x, y) {\n let result = x % y;\n if (ObjectIs(result, -0))\n return 0;\n if (result < 0)\n result += y;\n return result;\n}\nexport function ToBigIntExternal(arg) {\n const jsbiBI = ToBigInt(arg);\n if (typeof globalThis.BigInt !== 'undefined')\n return globalThis.BigInt(jsbiBI.toString(10));\n return jsbiBI;\n}\nexport function ToBigInt(arg) {\n if (arg instanceof JSBI) {\n return arg;\n }\n let prim = arg;\n if (typeof arg === 'object') {\n const toPrimFn = arg[Symbol.toPrimitive];\n if (toPrimFn && typeof toPrimFn === 'function') {\n prim = ReflectApply(toPrimFn, arg, ['number']);\n }\n }\n switch (typeof prim) {\n case 'undefined':\n case 'object':\n case 'number':\n case 'symbol':\n default:\n throw new TypeError(`cannot convert ${typeof arg} to bigint`);\n case 'string':\n if (!prim.match(/^\\s*(?:[+-]?\\d+\\s*)?$/)) {\n throw new SyntaxError('invalid BigInt syntax');\n }\n // eslint: no-fallthrough: false\n case 'bigint':\n try {\n return JSBI.BigInt(prim.toString());\n }\n catch (e) {\n if (e instanceof Error && e.message.startsWith('Invalid integer'))\n throw new SyntaxError(e.message);\n throw e;\n }\n case 'boolean':\n if (prim) {\n return ONE;\n }\n else {\n return ZERO;\n }\n }\n}\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds = (() => {\n let ns = JSBI.BigInt(Date.now() % 1e6);\n return () => {\n const ms = JSBI.BigInt(Date.now());\n const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n ns = JSBI.remainder(ms, MILLION);\n if (JSBI.greaterThan(result, NS_MAX))\n return NS_MAX;\n if (JSBI.lessThan(result, NS_MIN))\n return NS_MIN;\n return result;\n };\n})();\nexport function SystemTimeZone() {\n const fmt = new IntlDateTimeFormat('en-us');\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone));\n}\nexport function ComparisonResult(value) {\n return value < 0 ? -1 : value > 0 ? 1 : value;\n}\nexport function GetOptionsObject(options) {\n if (options === undefined)\n return ObjectCreate(null);\n if (IsObject(options) && options !== null)\n return options;\n throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\nexport function CreateOnePropObject(propName, propValue) {\n const o = ObjectCreate(null);\n o[propName] = propValue;\n return o;\n}\nfunction GetOption(options, property, allowedValues, fallback) {\n let value = options[property];\n if (value !== undefined) {\n value = ToString(value);\n if (!allowedValues.includes(value)) {\n throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n }\n return value;\n }\n return fallback;\n}\nfunction GetNumberOption(options, property, minimum, maximum, fallback) {\n let valueRaw = options[property];\n if (valueRaw === undefined)\n return fallback;\n const value = ToNumber(valueRaw);\n if (NumberIsNaN(value) || value < minimum || value > maximum) {\n throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`);\n }\n return MathFloor(value);\n}\nexport function IsBuiltinCalendar(id) {\n return ArrayIncludes.call(BUILTIN_CALENDAR_IDS, id);\n}\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\nfunction bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) {\n // This doesn't make much sense - why do these get converted unnecessarily?\n let left = JSBI.BigInt(leftParam);\n let right = JSBI.BigInt(rightParam);\n let lstate = lstateParam;\n let rstate = rstateParam;\n while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n const mstate = getState(middle);\n if (mstate === lstate) {\n left = middle;\n lstate = mstate;\n }\n else if (mstate === rstate) {\n right = middle;\n rstate = mstate;\n }\n else {\n throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n }\n }\n return right;\n}\nconst nsPerTimeUnit = {\n hour: 3600e9,\n minute: 60e9,\n second: 1e9,\n millisecond: 1e6,\n microsecond: 1e3,\n nanosecond: 1\n};\n//# sourceMappingURL=ecmascript.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { GetSlot, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, TIME_ZONE } from './slots';\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst ZONED = Symbol('zoneddatetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst TZ_GIVEN = Symbol('timezone-id-given');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\nconst descriptor = (value) => {\n return {\n value,\n enumerable: true,\n writable: false,\n configurable: true\n };\n};\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy(obj, prop) {\n let val = obj[prop];\n if (typeof val === 'function') {\n // If we get here, `val` is an \"amender function\". It will take the user's\n // options and transform them into suitable options to be passed into the\n // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n // will vary depending on the Temporal type, so that's why we store separate\n // formatters in separate props on the polyfill's DateTimeFormat instances.\n // The efficiency happens because we don't create an (expensive) formatter\n // until the user calls toLocaleString for that Temporal type.\n val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n // TODO: can this be typed more cleanly?\n obj[prop] = val;\n }\n return val;\n}\n// Similarly, lazy-init TimeZone instances.\nfunction getResolvedTimeZoneLazy(obj) {\n let val = obj[TZ_RESOLVED];\n if (typeof val === 'string') {\n val = ES.ToTemporalTimeZone(val);\n obj[TZ_RESOLVED] = val;\n }\n return val;\n}\nfunction DateTimeFormatImpl(locale = undefined, optionsParam = {}) {\n if (!(this instanceof DateTimeFormatImpl)) {\n return new DateTimeFormatImpl(locale, optionsParam);\n }\n const hasOptions = typeof optionsParam !== 'undefined';\n const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n // TODO: remove type assertion after Temporal types land in TS lib types\n const original = new IntlDateTimeFormat(locale, options);\n const ro = original.resolvedOptions();\n // DateTimeFormat instances are very expensive to create. Therefore, they will\n // be lazily created only when needed, using the locale and options provided.\n // But it's possible for callers to mutate those inputs before lazy creation\n // happens. For this reason, we clone the inputs instead of caching the\n // original objects. To avoid the complexity of deep cloning any inputs that\n // are themselves objects (e.g. the locales array, or options property values\n // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n // coercion and cloning for us. Unfortunately, we can't just use the resolved\n // options as-is because our options-amending logic adds additional fields if\n // the user doesn't supply any unit fields like year, month, day, hour, etc.\n // Therefore, we limit the properties in the clone to properties that were\n // present in the original input.\n if (hasOptions) {\n const clonedResolved = ObjectAssign({}, ro);\n for (const prop in clonedResolved) {\n if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n delete clonedResolved[prop];\n }\n }\n this[OPTIONS] = clonedResolved;\n }\n else {\n this[OPTIONS] = options;\n }\n this[TZ_GIVEN] = options.timeZone ? options.timeZone : null;\n this[LOCALE] = ro.locale;\n this[ORIGINAL] = original;\n this[TZ_RESOLVED] = ro.timeZone;\n this[CAL_ID] = ro.calendar;\n this[DATE] = dateAmend;\n this[YM] = yearMonthAmend;\n this[MD] = monthDayAmend;\n this[TIME] = timeAmend;\n this[DATETIME] = datetimeAmend;\n this[ZONED] = zonedDateTimeAmend;\n this[INST] = instantAmend;\n return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n writable: true,\n value: 'DateTimeFormat'\n});\nDateTimeFormatImpl.supportedLocalesOf = function (locales, options) {\n return IntlDateTimeFormat.supportedLocalesOf(locales, options);\n};\nconst propertyDescriptors = {\n resolvedOptions: descriptor(resolvedOptions),\n format: descriptor(format),\n formatRange: descriptor(formatRange)\n};\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n writable: false,\n enumerable: false,\n configurable: false\n});\nexport const DateTimeFormat = DateTimeFormatImpl;\nfunction resolvedOptions() {\n return this[ORIGINAL].resolvedOptions();\n}\nfunction adjustFormatterTimeZone(formatter, timeZone) {\n if (!timeZone)\n return formatter;\n const options = formatter.resolvedOptions();\n if (options.timeZone === timeZone)\n return formatter;\n // Existing Intl isn't typed to accept Temporal-specific options and the lib\n // types for resolved options are less restrictive than the types for options.\n // For example, `weekday` is\n // `'long' | 'short' | 'narrow'` in options but `string` in resolved options.\n // TODO: investigate why, and file an issue against TS if it's a bug.\n if (options['dateStyle'] || options['timeStyle']) {\n // Unfortunately, Safari's resolvedOptions include parameters that will\n // cause errors at runtime if passed along with\n // dateStyle or timeStyle options as per\n // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components.\n // This has been fixed in newer versions of Safari:\n // https://bugs.webkit.org/show_bug.cgi?id=231041\n delete options['weekday'];\n delete options['era'];\n delete options['year'];\n delete options['month'];\n delete options['day'];\n delete options['hour'];\n delete options['minute'];\n delete options['second'];\n delete options['timeZoneName'];\n delete options['hourCycle'];\n delete options['hour12'];\n delete options['dayPeriod'];\n }\n return new IntlDateTimeFormat(options.locale, { ...options, timeZone });\n}\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.format(instant.epochMilliseconds);\n }\n return this[ORIGINAL].format(datetime, ...rest);\n}\nfunction formatToParts(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.formatToParts(instant.epochMilliseconds);\n }\n return this[ORIGINAL].formatToParts(datetime, ...rest);\n}\nfunction formatRange(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRange(a, b);\n}\nfunction formatRangeToParts(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRangeToParts(a, b);\n}\nfunction amend(optionsParam = {}, amended = {}) {\n const options = ObjectAssign({}, optionsParam);\n for (const opt of [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'weekday',\n 'dayPeriod',\n 'timeZoneName',\n 'dateStyle',\n 'timeStyle'\n ]) {\n options[opt] = opt in amended ? amended[opt] : options[opt];\n if (options[opt] === false || options[opt] === undefined)\n delete options[opt];\n }\n return options;\n}\nfunction timeAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n month: false,\n day: false,\n weekday: false,\n timeZoneName: false,\n dateStyle: false\n });\n if (!hasTimeOptions(options)) {\n options = ObjectAssign({}, options, {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction yearMonthAmend(optionsParam) {\n let options = amend(optionsParam, {\n day: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('year' in options || 'month' in options)) {\n options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n }\n return options;\n}\nfunction monthDayAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('month' in options || 'day' in options)) {\n options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n }\n return options;\n}\nfunction dateAmend(optionsParam) {\n let options = amend(optionsParam, {\n hour: false,\n minute: false,\n second: false,\n dayPeriod: false,\n timeZoneName: false,\n timeStyle: false\n });\n if (!hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n });\n }\n return options;\n}\nfunction datetimeAmend(optionsParam) {\n let options = amend(optionsParam, { timeZoneName: false });\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction zonedDateTimeAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n if (options.timeZoneName === undefined)\n options.timeZoneName = 'short';\n }\n return options;\n}\nfunction instantAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction hasDateOptions(options) {\n return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\nfunction hasTimeOptions(options) {\n return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options);\n}\nfunction isTemporalObject(obj) {\n return (ES.IsTemporalDate(obj) ||\n ES.IsTemporalTime(obj) ||\n ES.IsTemporalDateTime(obj) ||\n ES.IsTemporalZonedDateTime(obj) ||\n ES.IsTemporalYearMonth(obj) ||\n ES.IsTemporalMonthDay(obj) ||\n ES.IsTemporalInstant(obj));\n}\nfunction sameTemporalType(x, y) {\n if (!isTemporalObject(x) || !isTemporalObject(y))\n return false;\n if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y))\n return false;\n if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y))\n return false;\n if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y))\n return false;\n if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y))\n return false;\n if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y))\n return false;\n if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y))\n return false;\n if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y))\n return false;\n return true;\n}\nfunction extractOverrides(temporalObj, main) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n if (ES.IsTemporalTime(temporalObj)) {\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, TIME)\n };\n }\n if (ES.IsTemporalYearMonth(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, YM)\n };\n }\n if (ES.IsTemporalMonthDay(temporalObj)) {\n const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, MD)\n };\n }\n if (ES.IsTemporalDate(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATE)\n };\n }\n if (ES.IsTemporalDateTime(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n let datetime = temporalObj;\n if (calendar === 'iso8601') {\n datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n }\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATETIME)\n };\n }\n if (ES.IsTemporalZonedDateTime(temporalObj)) {\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const timeZone = GetSlot(temporalObj, TIME_ZONE);\n const objTimeZone = ES.ToString(timeZone);\n if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) {\n throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`);\n }\n return {\n instant: GetSlot(temporalObj, INSTANT),\n formatter: getPropLazy(main, ZONED),\n timeZone: objTimeZone\n };\n }\n if (ES.IsTemporalInstant(temporalObj)) {\n return {\n instant: temporalObj,\n formatter: getPropLazy(main, INST)\n };\n }\n return {};\n}\n//# sourceMappingURL=intl.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\nexport class Instant {\n constructor(epochNanoseconds) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const ns = ES.ToBigInt(epochNanoseconds);\n ES.ValidateEpochNanoseconds(ns);\n CreateSlots(this);\n SetSlot(this, EPOCHNANOSECONDS, ns);\n if (DEBUG) {\n const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${repr}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get epochSeconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n hour: 24,\n minute: 1440,\n second: 86400,\n millisecond: 86400e3,\n microsecond: 86400e6,\n nanosecond: 86400e9\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true);\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n return new Instant(roundedNs);\n }\n equals(otherParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalInstant(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n let timeZone = options.timeZone;\n if (timeZone !== undefined)\n timeZone = ES.ToTemporalTimeZone(timeZone);\n // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n const roundedInstant = new Instant(roundedNs);\n return ES.TemporalInstantToString(roundedInstant, timeZone, precision);\n }\n toJSON() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalInstantToString(this, undefined, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument in toZonedDateTime');\n }\n const calendarLike = item.calendar;\n if (calendarLike === undefined) {\n throw new TypeError('missing calendar property in toZonedDateTime');\n }\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const temporalTimeZoneLike = item.timeZone;\n if (temporalTimeZoneLike === undefined) {\n throw new TypeError('missing timeZone property in toZonedDateTime');\n }\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toZonedDateTimeISO(itemParam) {\n let item = itemParam;\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (ES.IsObject(item)) {\n const timeZoneProperty = item.timeZone;\n if (timeZoneProperty !== undefined) {\n item = timeZoneProperty;\n }\n }\n const timeZone = ES.ToTemporalTimeZone(item);\n const calendar = ES.GetISO8601Calendar();\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n static fromEpochSeconds(epochSecondsParam) {\n const epochSeconds = ES.ToNumber(epochSecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMilliseconds(epochMillisecondsParam) {\n const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMicroseconds(epochMicrosecondsParam) {\n const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochNanoseconds(epochNanosecondsParam) {\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static from(item) {\n if (ES.IsTemporalInstant(item)) {\n return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n }\n return ES.ToTemporalInstant(item);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalInstant(oneParam);\n const two = ES.ToTemporalInstant(twoParam);\n const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(oneNs, twoNs))\n return -1;\n if (JSBI.greaterThan(oneNs, twoNs))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n//# sourceMappingURL=instant.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport { CALENDAR_ID, ISO_YEAR, ISO_MONTH, ISO_DAY, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, HasSlot, SetSlot } from './slots';\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectEntries = Object.entries;\nconst ObjectKeys = Object.keys;\n/**\n * Implementations for each calendar. Non-ISO calendars have an extra `helper`\n * property that provides additional per-calendar logic.\n */\nconst impl = {};\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n * PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar {\n constructor(idParam) {\n // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n // exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: id is required');\n }\n const id = ES.ToString(idParam);\n if (!ES.IsBuiltinCalendar(id))\n throw new RangeError(`invalid calendar identifier ${id}`);\n CreateSlots(this);\n SetSlot(this, CALENDAR_ID, id);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${id}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n dateFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this);\n }\n yearMonthFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this);\n }\n monthDayFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this);\n }\n fields(fields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const fieldsArray = [];\n const allowed = new Set([\n 'year',\n 'month',\n 'monthCode',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n 'microsecond',\n 'nanosecond'\n ]);\n for (const name of fields) {\n if (typeof name !== 'string')\n throw new TypeError('invalid fields');\n if (!allowed.has(name))\n throw new RangeError(`invalid field name ${name}`);\n allowed.delete(name);\n ArrayPrototypePush.call(fieldsArray, name);\n }\n return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n }\n mergeFields(fields, additionalFields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields);\n }\n dateAdd(dateParam, durationParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n const duration = ES.ToTemporalDuration(durationParam);\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const { days } = ES.BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day');\n return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this);\n }\n dateUntil(oneParam, twoParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'day';\n const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n }\n year(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].year(date);\n }\n month(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (ES.IsTemporalMonthDay(date))\n throw new TypeError('use monthCode on PlainMonthDay instead');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].month(date);\n }\n monthCode(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthCode(date);\n }\n day(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].day(date);\n }\n era(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].era(date);\n }\n eraYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].eraYear(date);\n }\n dayOfWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n }\n dayOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n }\n weekOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n }\n daysInWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n }\n daysInMonth(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date);\n }\n daysInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date);\n }\n monthsInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date);\n }\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date);\n }\n toString() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR_ID);\n }\n toJSON() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalCalendar(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month, day } = fields;\n ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month } = fields;\n ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n return ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1);\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n throw new TypeError('either year or monthCode required with month');\n }\n const useYear = fields.monthCode === undefined;\n const referenceISOYear = 1972;\n fields = resolveNonLunisolarMonth(fields);\n let { month, day, year } = fields;\n ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n return ES.CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n },\n fields(fields) {\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const merged = {};\n for (const nextKey of ObjectKeys(fields)) {\n if (nextKey === 'month' || nextKey === 'monthCode')\n continue;\n merged[nextKey] = fields[nextKey];\n }\n const newKeys = ObjectKeys(additionalFields);\n for (const nextKey of newKeys) {\n merged[nextKey] = additionalFields[nextKey];\n }\n if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) {\n const { month, monthCode } = fields;\n if (month !== undefined)\n merged.month = month;\n if (monthCode !== undefined)\n merged.monthCode = monthCode;\n }\n return merged;\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n let year = GetSlot(date, ISO_YEAR);\n let month = GetSlot(date, ISO_MONTH);\n let day = GetSlot(date, ISO_DAY);\n ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n dateUntil(one, two, largestUnit) {\n return ES.DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit);\n },\n year(date) {\n return GetSlot(date, ISO_YEAR);\n },\n era() {\n return undefined;\n },\n eraYear() {\n return undefined;\n },\n month(date) {\n return GetSlot(date, ISO_MONTH);\n },\n monthCode(date) {\n return buildMonthCode(GetSlot(date, ISO_MONTH));\n },\n day(date) {\n return GetSlot(date, ISO_DAY);\n },\n dayOfWeek(date) {\n return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n dayOfYear(date) {\n return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n weekOfYear(date) {\n return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n daysInWeek() {\n return 7;\n },\n daysInMonth(date) {\n return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n },\n monthsInYear() {\n return 12;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR));\n }\n};\nfunction monthCodeNumberPart(monthCode) {\n if (!monthCode.startsWith('M')) {\n throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`);\n }\n const month = +monthCode.slice(1);\n if (isNaN(month))\n throw new RangeError(`Invalid month code: ${monthCode}`);\n return month;\n}\nfunction buildMonthCode(month, leap = false) {\n return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) {\n let { month, monthCode } = calendarDate;\n if (monthCode === undefined) {\n if (month === undefined)\n throw new TypeError('Either month or monthCode are required');\n // The ISO calendar uses the default (undefined) value because it does\n // constrain/reject after this method returns. Non-ISO calendars, however,\n // rely on this function to constrain/reject out-of-range `month` values.\n if (overflow === 'reject')\n ES.RejectToRange(month, 1, monthsPerYear);\n if (overflow === 'constrain')\n month = ES.ConstrainToRange(month, 1, monthsPerYear);\n monthCode = buildMonthCode(month);\n }\n else {\n const numberPart = monthCodeNumberPart(monthCode);\n if (month !== undefined && month !== numberPart) {\n throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n }\n if (monthCode !== buildMonthCode(numberPart)) {\n throw new RangeError(`Invalid month code: ${monthCode}`);\n }\n month = numberPart;\n if (month < 1 || month > monthsPerYear)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n return { ...calendarDate, month, monthCode };\n}\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance. No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n constructor(cacheToClone) {\n this.map = new Map();\n this.calls = 0;\n this.hits = 0;\n this.misses = 0;\n this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n if (cacheToClone !== undefined) {\n let i = 0;\n for (const entry of cacheToClone.map.entries()) {\n if (++i > OneObjectCache.MAX_CACHE_ENTRIES)\n break;\n this.map.set(...entry);\n }\n }\n }\n get(key) {\n const result = this.map.get(key);\n if (result) {\n this.hits++;\n this.report();\n }\n this.calls++;\n return result;\n }\n set(key, value) {\n this.map.set(key, value);\n this.misses++;\n this.report();\n }\n report() {\n /*\n if (this.calls === 0) return;\n const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n */\n }\n setObject(obj) {\n if (OneObjectCache.objectMap.get(obj))\n throw new RangeError('object already cached');\n OneObjectCache.objectMap.set(obj, this);\n this.report();\n }\n /**\n * Returns a WeakMap-backed cache that's used to store expensive results\n * that are associated with a particular Temporal object instance.\n *\n * @param obj - object to associate with the cache\n */\n static getCacheForObject(obj) {\n let cache = OneObjectCache.objectMap.get(obj);\n if (!cache) {\n cache = new OneObjectCache();\n OneObjectCache.objectMap.set(obj, cache);\n }\n return cache;\n }\n}\nOneObjectCache.objectMap = new WeakMap();\nOneObjectCache.MAX_CACHE_ENTRIES = 1000;\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }) {\n const yearString = ES.ISOYearString(isoYear);\n const monthString = ES.ISODateTimePartString(isoMonth);\n const dayString = ES.ISODateTimePartString(isoDay);\n return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\nfunction simpleDateDiff(one, two) {\n return {\n years: one.year - two.year,\n months: one.month - two.month,\n days: one.day - two.day\n };\n}\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nclass HelperBase {\n constructor() {\n // The short era format works for all calendars except Japanese, which will\n // override.\n this.eraLength = 'short';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = true;\n }\n getFormatter() {\n // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n // calendars that are used. Note that the nonIsoHelperBase object is spread\n // into each each calendar's implementation before any cache is created, so\n // each calendar gets its own separate cached formatter.\n if (typeof this.formatter === 'undefined') {\n this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n era: this.eraLength,\n timeZone: 'UTC'\n });\n }\n return this.formatter;\n }\n isoToCalendarDate(isoDate, cache) {\n const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n let parts, isoString;\n try {\n isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n parts = dateTimeFormat.formatToParts(new Date(isoString));\n }\n catch (e) {\n throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n }\n const result = {};\n for (let { type, value } of parts) {\n if (type === 'year')\n result.eraYear = +value;\n // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n if (type === 'relatedYear')\n result.eraYear = +value;\n if (type === 'month') {\n const matches = /^([0-9]*)(.*?)$/.exec(value);\n if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n throw new RangeError(`Unexpected month: ${value}`);\n }\n // If the month has no numeric part (should only see this for the Hebrew\n // calendar with newer FF / Chromium versions; see\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n // placeholder month index of `1` and rely on the derived class to\n // calculate the correct month index from the month name stored in\n // `monthExtra`.\n result.month = matches[1] ? +matches[1] : 1;\n if (result.month < 1) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)');\n }\n if (result.month > 13) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n // The ICU formats for the Hebrew calendar no longer support a numeric\n // month format. So we'll rely on the derived class to interpret it.\n // `monthExtra` is also used on the Chinese calendar to handle a suffix\n // \"bis\" indicating a leap month.\n if (matches[2])\n result.monthExtra = matches[2];\n }\n if (type === 'day')\n result.day = +value;\n if (this.hasEra && type === 'era' && value != null && value !== '') {\n // The convention for Temporal era values is lowercase, so following\n // that convention in this prototype. Punctuation is removed, accented\n // letters are normalized, and spaces are replaced with dashes.\n // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n // The call to normalize() and the replacement regex deals with era\n // names that contain non-ASCII characters like Japanese eras. Also\n // ignore extra content in parentheses like JPN era date ranges.\n value = value.split(' (')[0];\n result.era = value\n .normalize('NFD')\n .replace(/[^-0-9 \\p{L}]/gu, '')\n .replace(' ', '-')\n .toLowerCase();\n }\n }\n if (result.eraYear === undefined) {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n // Translate eras that may be handled differently by Temporal vs. by Intl\n // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n if (this.reviseIntlEra) {\n const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n result.era = era;\n result.eraYear = eraYear;\n }\n if (this.checkIcuBugs)\n this.checkIcuBugs(isoDate);\n const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n if (calendarDate.year === undefined)\n throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.month === undefined)\n throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.day === undefined)\n throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n cache.set(key, calendarDate);\n // Also cache the reverse mapping\n ['constrain', 'reject'].forEach((overflow) => {\n const keyReverse = JSON.stringify({\n func: 'calendarToIsoDate',\n year: calendarDate.year,\n month: calendarDate.month,\n day: calendarDate.day,\n overflow,\n id: this.id\n });\n cache.set(keyReverse, isoDate);\n });\n return calendarDate;\n }\n validateCalendarDate(calendarDate) {\n const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n // the derived class must deal with it.\n if (monthExtra !== undefined)\n throw new RangeError('Unexpected `monthExtra` value');\n if (year === undefined && eraYear === undefined)\n throw new TypeError('year or eraYear is required');\n if (month === undefined && monthCode === undefined)\n throw new TypeError('month or monthCode is required');\n if (day === undefined)\n throw new RangeError('Missing day');\n if (monthCode !== undefined) {\n if (typeof monthCode !== 'string') {\n throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n }\n if (!/^M([01]?\\d)(L?)$/.test(monthCode))\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n if (this.constantEra) {\n if (era !== undefined && era !== this.constantEra) {\n throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n }\n if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n }\n }\n }\n /**\n * Allows derived calendars to add additional fields and/or to make\n * adjustments e.g. to set the era based on the date or to revise the month\n * number in lunisolar calendars per\n * https://github.com/tc39/proposal-temporal/issues/1203.\n *\n * The base implementation fills in missing values by assuming the simplest\n * possible calendar:\n * - no eras or a constant era defined in `.constantEra`\n * - non-lunisolar calendar (no leap months)\n * */\n adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', \n // This param is only used by derived classes\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromLegacyDate = false) {\n if (this.calendarType === 'lunisolar')\n throw new RangeError('Override required for lunisolar calendars');\n let calendarDate = calendarDateParam;\n this.validateCalendarDate(calendarDate);\n // For calendars that always use the same era, set it here so that derived\n // calendars won't need to implement this method simply to set the era.\n if (this.constantEra) {\n // year and eraYear always match when there's only one possible era\n const { year, eraYear } = calendarDate;\n calendarDate = {\n ...calendarDate,\n era: this.constantEra,\n year: year !== undefined ? year : eraYear,\n eraYear: eraYear !== undefined ? eraYear : year\n };\n }\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, monthCode } = calendarDate;\n ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n return { ...calendarDate, month, monthCode };\n }\n regulateMonthDayNaive(calendarDate, overflow, cache) {\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, day } = calendarDate;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n }\n return { ...calendarDate, month, day };\n }\n calendarToIsoDate(dateParam, overflow = 'constrain', cache) {\n const originalDate = dateParam;\n // First, normalize the calendar date to ensure that (year, month, day)\n // are all present, converting monthCode and eraYear if needed.\n let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n // Fix obviously out-of-bounds values. Values that are valid generally, but\n // not in this particular year, may not be caught here for some calendars.\n // If so, these will be handled lower below.\n date = this.regulateMonthDayNaive(date, overflow, cache);\n const { year, month, day } = date;\n const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n let cached = cache.get(key);\n if (cached)\n return cached;\n // If YMD are present in the input but the input has been constrained\n // already, then cache both the original value and the constrained value.\n let keyOriginal;\n if (originalDate.year !== undefined &&\n originalDate.month !== undefined &&\n originalDate.day !== undefined &&\n (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) {\n keyOriginal = JSON.stringify({\n func: 'calendarToIsoDate',\n year: originalDate.year,\n month: originalDate.month,\n day: originalDate.day,\n overflow,\n id: this.id\n });\n cached = cache.get(keyOriginal);\n if (cached)\n return cached;\n }\n // First, try to roughly guess the result\n let isoEstimate = this.estimateIsoDate({ year, month, day });\n const calculateSameMonthResult = (diffDays) => {\n // If the estimate is in the same year & month as the target, then we can\n // calculate the result exactly and short-circuit any additional logic.\n // This optimization assumes that months are continuous. It would break if\n // a calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So\n // this optimization should be safe for all ICU calendars.\n let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n if (date.day > this.minimumMonthLength(date)) {\n // There's a chance that the calendar date is out of range. Throw or\n // constrain if so.\n let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n if (overflow === 'reject') {\n throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n }\n // Back up a day at a time until we're not hanging over the month end\n testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n }\n }\n return testIsoEstimate;\n };\n let sign = 0;\n let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n let diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n }\n else {\n sign = this.compareCalendarDates(date, roundtripEstimate);\n }\n }\n // If the initial guess is not in the same month, then then bisect the\n // distance to the target, starting with 8 days per step.\n let increment = 8;\n let maybeConstrained = false;\n while (sign) {\n isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n const oldRoundtripEstimate = roundtripEstimate;\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n const oldSign = sign;\n sign = this.compareCalendarDates(date, roundtripEstimate);\n if (sign) {\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n // Signal the loop condition that there's a match.\n sign = 0;\n // If the calendar day is larger than the minimal length for this\n // month, then it might be larger than the actual length of the month.\n // So we won't cache it as the correct calendar date for this ISO\n // date.\n maybeConstrained = date.day > this.minimumMonthLength(date);\n }\n else if (oldSign && sign !== oldSign) {\n if (increment > 1) {\n // If the estimate overshot the target, try again with a smaller increment\n // in the reverse direction.\n increment /= 2;\n }\n else {\n // Increment is 1, and neither the previous estimate nor the new\n // estimate is correct. The only way that can happen is if the\n // original date was an invalid value that will be constrained or\n // rejected here.\n if (overflow === 'reject') {\n throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n }\n else {\n // To constrain, pick the earliest value\n const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n // If current value is larger, then back up to the previous value.\n if (order > 0)\n isoEstimate = this.addDaysIso(isoEstimate, -1);\n maybeConstrained = true;\n sign = 0;\n }\n }\n }\n }\n }\n cache.set(key, isoEstimate);\n if (keyOriginal)\n cache.set(keyOriginal, isoEstimate);\n if (date.year === undefined ||\n date.month === undefined ||\n date.day === undefined ||\n date.monthCode === undefined ||\n (this.hasEra && (date.era === undefined || date.eraYear === undefined))) {\n throw new RangeError('Unexpected missing property');\n }\n if (!maybeConstrained) {\n // Also cache the reverse mapping\n const keyReverse = JSON.stringify({\n func: 'isoToCalendarDate',\n isoYear: isoEstimate.year,\n isoMonth: isoEstimate.month,\n isoDay: isoEstimate.day,\n id: this.id\n });\n cache.set(keyReverse, date);\n }\n return isoEstimate;\n }\n temporalToCalendarDate(date, cache) {\n const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n const result = this.isoToCalendarDate(isoDate, cache);\n return result;\n }\n compareCalendarDates(date1Param, date2Param) {\n // `date1` and `date2` are already records. The calls below simply validate\n // that all three required fields are present.\n const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n if (date1.year !== date2.year)\n return ES.ComparisonResult(date1.year - date2.year);\n if (date1.month !== date2.month)\n return ES.ComparisonResult(date1.month - date2.month);\n if (date1.day !== date2.day)\n return ES.ComparisonResult(date1.day - date2.day);\n return 0;\n }\n /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n regulateDate(calendarDate, overflow = 'constrain', cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n return this.isoToCalendarDate(isoDate, cache);\n }\n addDaysIso(isoDate, days) {\n const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n return added;\n }\n addDaysCalendar(calendarDate, days, cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIso = this.addDaysIso(isoDate, days);\n const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n return addedCalendar;\n }\n addMonthsCalendar(calendarDateParam, months, overflow, cache) {\n let calendarDate = calendarDateParam;\n const { day } = calendarDate;\n for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n const { month } = calendarDate;\n const oldCalendarDate = calendarDate;\n const days = months < 0\n ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n : this.daysInMonth(calendarDate, cache);\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n let addedIso = this.addDaysIso(isoDate, days);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n // Normally, we can advance one month by adding the number of days in the\n // current month. However, if we're at the end of the current month and\n // the next month has fewer days, then we rolled over to the after-next\n // month. Below we detect this condition and back up until we're back in\n // the desired month.\n if (months > 0) {\n const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n while (calendarDate.month - 1 !== month % monthsInOldYear) {\n addedIso = this.addDaysIso(addedIso, -1);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n }\n }\n if (calendarDate.day !== day) {\n // try to retain the original day-of-month, if possible\n calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n }\n }\n if (overflow === 'reject' && calendarDate.day !== day) {\n throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n }\n return calendarDate;\n }\n addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) {\n const { year, day, monthCode } = calendarDate;\n const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n const initialDays = days + weeks * 7;\n const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n return addedDays;\n }\n untilCalendar(calendarOne, calendarTwo, largestUnit, cache) {\n let days = 0;\n let weeks = 0;\n let months = 0;\n let years = 0;\n switch (largestUnit) {\n case 'day':\n days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n break;\n case 'week': {\n const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n days = totalDays % 7;\n weeks = (totalDays - days) / 7;\n break;\n }\n case 'month':\n case 'year': {\n const diffYears = calendarTwo.year - calendarOne.year;\n const diffMonths = calendarTwo.month - calendarOne.month;\n const diffDays = calendarTwo.day - calendarOne.day;\n const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n if (!sign) {\n return { years: 0, months: 0, weeks: 0, days: 0 };\n }\n if (largestUnit === 'year' && diffYears) {\n const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0);\n years = isOneFurtherInYear ? diffYears - sign : diffYears;\n }\n const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n // Now we have less than one year remaining. Add one month at a time\n // until we go over the target, then back up one month and calculate\n // remaining days and weeks.\n let current;\n let next = yearsAdded;\n do {\n months += sign;\n current = next;\n next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n if (next.day !== calendarOne.day) {\n // In case the day was constrained down, try to un-constrain it\n next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n }\n } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n months -= sign; // correct for loop above which overshoots by 1\n const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n days = remainingDays;\n break;\n }\n }\n return { years, months, weeks, days };\n }\n daysInMonth(calendarDate, cache) {\n // Add enough days to roll over to the next month. One we're in the next\n // month, we can calculate the length of the current month. NOTE: This\n // algorithm assumes that months are continuous. It would break if a\n // calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So this\n // code should be safe for all ICU calendars.\n const { day } = calendarDate;\n const max = this.maximumMonthLength(calendarDate);\n const min = this.minimumMonthLength(calendarDate);\n // easiest case: we already know the month length if min and max are the same.\n if (min === max)\n return min;\n // Add enough days to get into the next month, without skipping it\n const increment = day <= max - min ? max : min;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIsoDate = this.addDaysIso(isoDate, increment);\n const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n // Now back up to the last day of the original month\n const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n return endOfMonthCalendar.day;\n }\n daysInPreviousMonth(calendarDate, cache) {\n const { day, month, year } = calendarDate;\n // Check to see if we already know the month length, and return it if so\n const previousMonthYear = month > 1 ? year : year - 1;\n let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n previousMonthDate = { ...previousMonthDate, month: previousMonth };\n const min = this.minimumMonthLength(previousMonthDate);\n const max = this.maximumMonthLength(previousMonthDate);\n if (min === max)\n return max;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n return lastDayOfPreviousMonthCalendar.day;\n }\n startOfCalendarYear(calendarDate) {\n return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n }\n startOfCalendarMonth(calendarDate) {\n return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n }\n calendarDaysUntil(calendarOne, calendarTwo, cache) {\n const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n return this.isoDaysUntil(oneIso, twoIso);\n }\n isoDaysUntil(oneIso, twoIso) {\n const duration = ES.DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day');\n return duration.days;\n }\n monthDayFromFields(fields, overflow, cache) {\n let { year, month, monthCode, day, era, eraYear } = fields;\n if (monthCode === undefined) {\n if (year === undefined && (era === undefined || eraYear === undefined)) {\n throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required');\n }\n ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow));\n }\n let isoYear, isoMonth, isoDay;\n let closestCalendar, closestIso;\n // Look backwards starting from the calendar year of 1972-01-01 up to 100\n // calendar years to find a year that has this month and day. Normal months\n // and days will match immediately, but for leap days and leap months we may\n // have to look for a while.\n const startDateIso = { year: 1972, month: 1, day: 1 };\n const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache);\n for (let i = 0; i < 100; i++) {\n const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache);\n const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n return { month: isoMonth, day: isoDay, year: isoYear };\n }\n else if (overflow === 'constrain') {\n // non-ISO constrain algorithm tries to find the closest date in a matching month\n if (closestCalendar === undefined ||\n (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n roundTripCalendarDate.day > closestCalendar.day)) {\n closestCalendar = roundTripCalendarDate;\n closestIso = isoDate;\n }\n }\n }\n if (overflow === 'constrain' && closestIso !== undefined)\n return closestIso;\n throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n }\n}\nclass HebrewHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'hebrew';\n this.calendarType = 'lunisolar';\n this.months = {\n Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n };\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate) {\n const { year } = calendarDate;\n // FYI: In addition to adding a month in leap years, the Hebrew calendar\n // also has per-year changes to the number of days of Heshvan and Kislev.\n // Given that these can be calculated by counting the number of days in\n // those months, I assume that these DO NOT need to be exposed as\n // Hebrew-only prototype fields or methods.\n return (7 * year + 1) % 19 < 7;\n }\n monthsInYear(calendarDate) {\n return this.inLeapYear(calendarDate) ? 13 : 12;\n }\n minimumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'min');\n }\n maximumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'max');\n }\n minMaxMonthLength(calendarDate, minOrMax) {\n const { month, year } = calendarDate;\n const monthCode = this.getMonthCode(year, month);\n const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n if (monthInfo === undefined)\n throw new RangeError(`unmatched Hebrew month: ${month}`);\n const daysInMonth = monthInfo[1].days;\n return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n }\n /** Take a guess at what ISO date a particular calendar date corresponds to */\n estimateIsoDate(calendarDate) {\n const { year } = calendarDate;\n return { year: year - 3760, month: 1, day: 1 };\n }\n getMonthCode(year, month) {\n if (this.inLeapYear({ year })) {\n return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n }\n else {\n return buildMonthCode(month);\n }\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n // The incoming type is actually CalendarDate (same as args to\n // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n // reassignments below, so as an alternative to 10+ type casts, we'll lie\n // here and claim that the type has `day` and `year` filled in already.\n let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate;\n if (year === undefined && eraYear !== undefined)\n year = eraYear;\n if (eraYear === undefined && year !== undefined)\n eraYear = year;\n if (fromLegacyDate) {\n // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n // output returns the numeric equivalent of `month` as a string, meaning\n // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n // means Adar. In this case, `month` will already be correct and no action\n // is needed. However, in Node 14 and later formatToParts returns the name\n // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n // correct `month` using the string name as a key.\n if (monthExtra) {\n const monthInfo = this.months[monthExtra];\n if (!monthInfo)\n throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n }\n // Because we're getting data from legacy Date, then `month` will always be present\n monthCode = this.getMonthCode(year, month);\n const result = { year, month: month, day, era: undefined, eraYear, monthCode };\n return result;\n }\n else {\n // When called without input coming from legacy Date output, simply ensure\n // that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (month === undefined) {\n if (monthCode.endsWith('L')) {\n if (monthCode !== 'M05L') {\n throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n }\n month = 6;\n if (!this.inLeapYear({ year })) {\n if (overflow === 'reject') {\n throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n }\n else {\n // constrain to last day of previous month (Av)\n month = 5;\n day = 30;\n monthCode = 'M05';\n }\n }\n }\n else {\n month = monthCodeNumberPart(monthCode);\n // if leap month is before this one, the month index is one more than the month code\n if (this.inLeapYear({ year }) && month >= 6)\n month++;\n const largestMonth = this.monthsInYear({ year });\n if (month < 1 || month > largestMonth)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n }\n else {\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n else {\n month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n if (monthCode === undefined) {\n monthCode = this.getMonthCode(year, month);\n }\n else {\n const calculatedMonthCode = this.getMonthCode(year, month);\n if (calculatedMonthCode !== monthCode) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n }\n }\n }\n return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear };\n }\n }\n}\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nclass IslamicBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunar';\n this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n this.DAYS_PER_ISO_YEAR = 365.2425;\n this.constantEra = 'ah';\n }\n inLeapYear(calendarDate, cache) {\n // In leap years, the 12th month has 30 days. In non-leap years: 29.\n const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n return days === 30;\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n }\n}\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic';\n }\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-umalqura';\n }\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-tbla';\n }\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-civil';\n }\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-rgsa';\n }\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamicc';\n }\n}\nclass PersianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'persian';\n this.calendarType = 'solar';\n this.constantEra = 'ap';\n }\n inLeapYear(calendarDate, cache) {\n // Same logic (count days in the last month) for Persian as for Islamic,\n // even though Persian is solar and Islamic is lunar.\n return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 29;\n return month <= 6 ? 31 : 30;\n }\n maximumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 30;\n return month <= 6 ? 31 : 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: year + 621, month: 1, day: 1 };\n }\n}\nclass IndianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'indian';\n this.calendarType = 'solar';\n this.constantEra = 'saka';\n // Indian months always start at the same well-known Gregorian month and\n // day. So this conversion is easy and fast. See\n // https://en.wikipedia.org/wiki/Indian_national_calendar\n this.months = {\n 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n 2: { length: 31, month: 4, day: 21 },\n 3: { length: 31, month: 5, day: 22 },\n 4: { length: 31, month: 6, day: 22 },\n 5: { length: 31, month: 7, day: 23 },\n 6: { length: 31, month: 8, day: 23 },\n 7: { length: 30, month: 9, day: 23 },\n 8: { length: 30, month: 10, day: 23 },\n 9: { length: 30, month: 11, day: 22 },\n 10: { length: 30, month: 12, day: 22 },\n 11: { length: 30, month: 1, nextYear: true, day: 21 },\n 12: { length: 30, month: 2, nextYear: true, day: 20 }\n };\n // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n // calendar output to fail for all dates before 0001-01-01 ISO. For example,\n // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n // expected.\n this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n }\n inLeapYear(calendarDate) {\n // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n // Years are counted in the Saka era, which starts its year 0 in the year 78\n // of the Common Era. To determine leap years, add 78 to the Saka year – if\n // the result is a leap year in the Gregorian calendar, then the Saka year\n // is a leap year as well.\n return isGregorianLeapYear(calendarDate.year + 78);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n maximumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n getMonthInfo(calendarDate) {\n const { month } = calendarDate;\n let monthInfo = this.months[month];\n if (monthInfo === undefined)\n throw new RangeError(`Invalid month: ${month}`);\n if (this.inLeapYear(calendarDate) && monthInfo.leap)\n monthInfo = monthInfo.leap;\n return monthInfo;\n }\n estimateIsoDate(calendarDateParam) {\n // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n // calendar fast!\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const monthInfo = this.getMonthInfo(calendarDate);\n const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n const isoMonth = monthInfo.month;\n const isoDay = monthInfo.day;\n const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n return isoDate;\n }\n checkIcuBugs(isoDate) {\n if (this.vulnerableToBceBug && isoDate.year < 1) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n }\n}\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam) {\n let eras = erasParam;\n if (eras.length === 0) {\n throw new RangeError('Invalid era data: eras are required');\n }\n if (eras.length === 1 && eras[0].reverseOf) {\n throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n }\n if (eras.length === 1 && !eras[0].name) {\n throw new RangeError('Invalid era data: at least one named era is required');\n }\n if (eras.filter((e) => e.reverseOf != null).length > 1) {\n throw new RangeError('Invalid era data: only one era can count years backwards');\n }\n // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n // eras can never be anchors. The era without an `anchorEpoch` property is the\n // anchor.\n let anchorEra;\n eras.forEach((e) => {\n if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n if (anchorEra)\n throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n anchorEra = e;\n e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n }\n else if (!e.name) {\n throw new RangeError('If era name is blank, it must be the anchor era');\n }\n });\n // If the era name is undefined, then it's an anchor that doesn't interact\n // with eras at all. For example, Japanese `year` is always the same as ISO\n // `year`. So this \"era\" is the anchor era but isn't used for era matching.\n // Strip it from the list that's returned.\n eras = eras.filter((e) => e.name);\n eras.forEach((e) => {\n // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n // Replace the string-valued \"reverseOf\" property with the actual era object\n // that's reversed.\n const { reverseOf } = e;\n if (reverseOf) {\n const reversedEra = eras.find((era) => era.name === reverseOf);\n if (reversedEra === undefined)\n throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n e.reverseOf = reversedEra;\n e.anchorEpoch = reversedEra.anchorEpoch;\n e.isoEpoch = reversedEra.isoEpoch;\n }\n if (e.anchorEpoch.month === undefined)\n e.anchorEpoch.month = 1;\n if (e.anchorEpoch.day === undefined)\n e.anchorEpoch.day = 1;\n });\n // Ensure that the latest epoch is first in the array. This lets us try to\n // match eras in index order, with the last era getting the remaining older\n // years. Any reverse-signed era must be at the end.\n ArraySort.call(eras, (e1, e2) => {\n if (e1.reverseOf)\n return 1;\n if (e2.reverseOf)\n return -1;\n if (!e1.isoEpoch || !e2.isoEpoch)\n throw new RangeError('Invalid era data: missing ISO epoch');\n return e2.isoEpoch.year - e1.isoEpoch.year;\n });\n // If there's a reversed era, then the one before it must be the era that's\n // being reversed.\n const lastEraReversed = eras[eras.length - 1].reverseOf;\n if (lastEraReversed) {\n if (lastEraReversed !== eras[eras.length - 2])\n throw new RangeError('Invalid era data: invalid reverse-sign era');\n }\n // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n // zero-based index, with the oldest era being zero. This format is used by\n // older versions of ICU data.\n eras.forEach((e, i) => {\n e.genericName = `era${eras.length - 1 - i}`;\n });\n return { eras: eras, anchorEra: (anchorEra || eras[0]) };\n}\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n/** Base for all Gregorian-like calendars. */\nclass GregorianBaseHelper extends HelperBase {\n constructor(id, originalEras) {\n super();\n this.calendarType = 'solar';\n // Several calendars based on the Gregorian calendar use Julian dates (not\n // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n .startsWith('12');\n this.calendarIsVulnerableToJulianBug = false;\n this.id = id;\n const { eras, anchorEra } = adjustEras(originalEras);\n this.anchorEra = anchorEra;\n this.eras = eras;\n }\n inLeapYear(calendarDate) {\n // Calendars that don't override this method use the same months and leap\n // years as Gregorian. Once we know the ISO year corresponding to the\n // calendar year, we'll know if it's a leap year or not.\n const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n return isGregorianLeapYear(year);\n }\n monthsInYear( /* calendarDate */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 2)\n return this.inLeapYear(calendarDate) ? 29 : 28;\n return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n /** Fill in missing parts of the (year, era, eraYear) tuple */\n completeEraYear(calendarDate) {\n const checkField = (name, value) => {\n const currentValue = calendarDate[name];\n if (currentValue != null && currentValue != value) {\n throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n }\n };\n const eraFromYear = (year) => {\n let eraYear;\n const adjustedCalendarDate = { ...calendarDate, year };\n const matchingEra = this.eras.find((e, i) => {\n if (i === this.eras.length - 1) {\n if (e.reverseOf) {\n // This is a reverse-sign era (like BCE) which must be the oldest\n // era. Count years backwards.\n if (year > 0)\n throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n eraYear = e.anchorEpoch.year - year;\n return true;\n }\n // last era always gets all \"leftover\" (older than epoch) years,\n // so no need for a comparison like below.\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n if (comparison >= 0) {\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n return false;\n });\n if (!matchingEra)\n throw new RangeError(`Year ${year} was not matched by any era`);\n return { eraYear: eraYear, era: matchingEra.name };\n };\n let { year, eraYear, era } = calendarDate;\n if (year != null) {\n ({ eraYear, era } = eraFromYear(year));\n checkField('era', era);\n checkField('eraYear', eraYear);\n }\n else if (eraYear != null) {\n const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n if (!matchingEra)\n throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n if (eraYear < 1 && matchingEra.reverseOf) {\n throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n }\n if (matchingEra.reverseOf) {\n year = matchingEra.anchorEpoch.year - eraYear;\n }\n else {\n year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n }\n checkField('year', year);\n // We'll accept dates where the month/day is earlier than the start of\n // the era or after its end as long as it's in the same year. If that\n // happens, we'll adjust the era/eraYear pair to be the correct era for\n // the `year`.\n ({ eraYear, era } = eraFromYear(year));\n }\n else {\n throw new RangeError('Either `year` or `eraYear` and `era` are required');\n }\n return { ...calendarDate, year, eraYear, era };\n }\n adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') {\n let calendarDate = calendarDateParam;\n // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n const { month, monthCode } = calendarDate;\n if (month === undefined)\n calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) };\n this.validateCalendarDate(calendarDate);\n calendarDate = this.completeEraYear(calendarDate);\n return super.adjustCalendarDate(calendarDate, cache, overflow);\n }\n estimateIsoDate(calendarDateParam) {\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const { year, month, day } = calendarDate;\n const { anchorEra } = this;\n const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n }\n checkIcuBugs(isoDate) {\n if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n if (beforeJulianSwitch) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)');\n }\n }\n }\n}\nclass OrthodoxBaseHelper extends GregorianBaseHelper {\n constructor(id, originalEras) {\n super(id, originalEras);\n }\n inLeapYear(calendarDate) {\n // Leap years happen one year before the Julian leap year. Note that this\n // calendar is based on the Julian calendar which has a leap year every 4\n // years, unlike the Gregorian calendar which doesn't have leap years on\n // years divisible by 100 except years divisible by 400.\n //\n // Note that we're assuming that leap years in before-epoch times match\n // how leap years are defined now. This is probably not accurate but I'm\n // not sure how better to do it.\n const { year } = calendarDate;\n return (year + 1) % 4 === 0;\n }\n monthsInYear( /* calendarDate */) {\n return 13;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n if (month === 13)\n return this.inLeapYear(calendarDate) ? 6 : 5;\n return 30;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n}\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n// two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n// zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n constructor() {\n super('coptic', [\n { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n { name: 'era0', reverseOf: 'era1' }\n ]);\n }\n}\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethiopic', [\n { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n ]);\n }\n}\nclass RocHelper extends GregorianBaseHelper {\n constructor() {\n super('roc', [\n { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n { name: 'before-roc', reverseOf: 'minguo' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass BuddhistHelper extends GregorianBaseHelper {\n constructor() {\n super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass GregoryHelper extends GregorianBaseHelper {\n constructor() {\n super('gregory', [\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n }\n reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) {\n let { era, eraYear } = calendarDate;\n // Firefox 96 introduced a bug where the `'short'` format of the era\n // option mistakenly returns the one-letter (narrow) format instead. The\n // code below handles either the correct or Firefox-buggy format. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n if (era === 'bc' || era === 'b')\n era = 'bce';\n if (era === 'ad' || era === 'a')\n era = 'ce';\n return { era, eraYear };\n }\n}\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n// challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n// dates are modified, leading to considerable churn which is not good for\n// Temporal use.\n// - The earliest era (in 645 CE) may not end up being the earliest depending\n// on future historical scholarship\n// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n// that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n constructor() {\n super('japanese', [\n // The Japanese calendar `year` is just the ISO year, because (unlike other\n // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n // The last 3 Japanese eras confusingly return only one character in the\n // default \"short\" era, so need to use the long format.\n this.eraLength = 'long';\n }\n reviseIntlEra(calendarDate, isoDate) {\n const { era, eraYear } = calendarDate;\n const { year: isoYear } = isoDate;\n if (this.eras.find((e) => e.name === era))\n return { era, eraYear };\n return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear });\n }\n}\nclass ChineseBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunisolar';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate, cache) {\n const months = this.getMonthList(calendarDate.year, cache);\n return ObjectEntries(months).length === 13;\n }\n monthsInYear(calendarDate, cache) {\n return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n getMonthList(calendarYear, cache) {\n if (calendarYear === undefined) {\n throw new TypeError('Missing year');\n }\n const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n const getCalendarDate = (isoYear, daysPastFeb1) => {\n const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n const legacyDate = new Date(isoStringFeb1);\n // Now add the requested number of days, which may wrap to the next month.\n legacyDate.setUTCDate(daysPastFeb1 + 1);\n const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value;\n const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value;\n let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear');\n if (calendarYearToVerify !== undefined) {\n calendarYearToVerify = +calendarYearToVerify.value;\n }\n else {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n return { calendarMonthString, calendarDay, calendarYearToVerify };\n };\n // First, find a date close to Chinese New Year. Feb 17 will either be in\n // the first month or near the end of the last month of the previous year.\n let isoDaysDelta = 17;\n let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n // If we didn't guess the first month correctly, add (almost in some months)\n // a lunar month\n if (calendarMonthString !== '1') {\n isoDaysDelta += 29;\n ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n }\n // Now back up to near the start of the first month, but not too near that\n // off-by-one issues matter.\n isoDaysDelta -= calendarDay - 5;\n const result = {};\n let monthIndex = 1;\n let oldCalendarDay;\n let oldMonthString;\n let done = false;\n do {\n ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n if (oldCalendarDay) {\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n }\n if (calendarYearToVerify !== calendarYear) {\n done = true;\n }\n else {\n result[calendarMonthString] = { monthIndex: monthIndex++ };\n // Move to the next month. Because months are sometimes 29 days, the day of the\n // calendar month will move forward slowly but not enough to flip over to a new\n // month before the loop ends at 12-13 months.\n isoDaysDelta += 30;\n }\n oldCalendarDay = calendarDay;\n oldMonthString = calendarMonthString;\n } while (!done);\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n cache.set(key, result);\n return result;\n }\n estimateIsoDate(calendarDate) {\n const { year, month } = calendarDate;\n return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n if (fromLegacyDate) {\n // Legacy Date output returns a string that's an integer with an optional\n // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n // month. Below we'll normalize the output.\n year = eraYear;\n if (monthExtra && monthExtra !== 'bis')\n throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n const monthCode = buildMonthCode(month, monthExtra !== undefined);\n const monthString = `${month}${monthExtra || ''}`;\n const months = this.getMonthList(year, cache);\n const monthInfo = months[monthString];\n if (monthInfo === undefined)\n throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n month = monthInfo.monthIndex;\n return { year: year, month, day: day, era: undefined, eraYear, monthCode };\n }\n else {\n // When called without input coming from legacy Date output,\n // simply ensure that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (year === undefined)\n year = eraYear;\n if (eraYear === undefined)\n eraYear = year;\n if (month === undefined) {\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n let monthInfo = months[numberPart];\n month = monthInfo && monthInfo.monthIndex;\n // If this leap month isn't present in this year, constrain down to the last day of the previous month.\n if (month === undefined &&\n monthCode.endsWith('L') &&\n !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) &&\n overflow === 'constrain') {\n let withoutML = monthCode.slice(1, -1);\n if (withoutML[0] === '0')\n withoutML = withoutML.slice(1);\n monthInfo = months[withoutML];\n if (monthInfo) {\n ({ daysInMonth: day, monthIndex: month } = monthInfo);\n monthCode = buildMonthCode(withoutML);\n }\n }\n if (month === undefined) {\n throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n }\n }\n else if (monthCode === undefined) {\n const months = this.getMonthList(year, cache);\n const monthEntries = ObjectEntries(months);\n const largestMonth = monthEntries.length;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength());\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n }\n const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n if (matchingMonthEntry === undefined) {\n throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n }\n monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1);\n }\n else {\n // Both month and monthCode are present. Make sure they don't conflict.\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n const monthInfo = months[numberPart];\n if (!monthInfo)\n throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n if (month !== monthInfo.monthIndex) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n }\n }\n return {\n ...calendarDate,\n year: year,\n eraYear,\n month,\n monthCode: monthCode,\n day: day\n };\n }\n }\n}\nclass ChineseHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'chinese';\n }\n}\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'dangi';\n }\n}\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nconst nonIsoImpl = {\n // `helper` is added when this object is spread into each calendar's\n // implementation\n helper: undefined,\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n const result = ES.CreateTemporalDate(year, month, day, calendar);\n cache.setObject(result);\n return result;\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []);\n const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n const result = ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day);\n cache.setObject(result);\n return result;\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n // All built-in calendars require `day`, but some allow other fields to be\n // substituted for `month`. And for lunisolar calendars, either `monthCode`\n // or `year` must be provided because `month` is ambiguous without a year or\n // a code.\n const cache = new OneObjectCache();\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n // `year` is a reference year where this month/day exists in this calendar\n const result = ES.CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year);\n cache.setObject(result);\n return result;\n },\n fields(fieldsParam) {\n let fields = fieldsParam;\n if (ArrayIncludes.call(fields, 'year'))\n fields = [...fields, 'era', 'eraYear'];\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const fieldsCopy = { ...fields };\n const additionalFieldsCopy = { ...additionalFields };\n // era and eraYear are intentionally unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy;\n const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy;\n if (newMonth === undefined && newMonthCode === undefined) {\n original.month = month;\n original.monthCode = monthCode;\n }\n if (newYear === undefined && newEra === undefined && newEraYear === undefined) {\n // Only `year` is needed. We don't set era and eraYear because it's\n // possible to create a conflict for eras that start or end mid-year. See\n // https://github.com/tc39/proposal-temporal/issues/1784.\n original.year = year;\n }\n return { ...original, ...additionalFieldsCopy };\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n const { year, month, day } = isoAdded;\n const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendar);\n // The new object's cache starts with the cache of the old object\n const newCache = new OneObjectCache(cache);\n newCache.setObject(newTemporalObject);\n return newTemporalObject;\n },\n dateUntil(one, two, largestUnit) {\n const cacheOne = OneObjectCache.getCacheForObject(one);\n const cacheTwo = OneObjectCache.getCacheForObject(two);\n const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n return result;\n },\n year(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.year;\n },\n month(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.month;\n },\n day(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.day;\n },\n era(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.era;\n },\n eraYear(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.eraYear;\n },\n monthCode(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.monthCode;\n },\n dayOfWeek(date) {\n return impl['iso8601'].dayOfWeek(date);\n },\n dayOfYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.isoToCalendarDate(date, cache);\n const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n return diffDays + 1;\n },\n weekOfYear(date) {\n return impl['iso8601'].weekOfYear(date);\n },\n daysInWeek(date) {\n return impl['iso8601'].daysInWeek(date);\n },\n daysInMonth(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n // Easy case: if the helper knows the length without any heavy calculation.\n const max = this.helper.maximumMonthLength(calendarDate);\n const min = this.helper.minimumMonthLength(calendarDate);\n if (max === min)\n return max;\n // The harder case is where months vary every year, e.g. islamic calendars.\n // Find the answer by calculating the difference in days between the first\n // day of the current month and the first day of the next month.\n const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n return result;\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n return result;\n },\n monthsInYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.monthsInYear(calendarDate, cache);\n return result;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.inLeapYear(calendarDate, cache);\n return result;\n }\n};\nfor (const Helper of [\n HebrewHelper,\n PersianHelper,\n EthiopicHelper,\n EthioaaHelper,\n CopticHelper,\n ChineseHelper,\n DangiHelper,\n RocHelper,\n IndianHelper,\n BuddhistHelper,\n GregoryHelper,\n JapaneseHelper,\n IslamicHelper,\n IslamicUmalquraHelper,\n IslamicTblaHelper,\n IslamicCivilHelper,\n IslamicRgsaHelper,\n IslamicCcHelper\n]) {\n const helper = new Helper();\n // Clone the singleton non-ISO implementation that's the same for all\n // calendars. The `helper` property contains per-calendar logic.\n impl[helper.id] = { ...nonIsoImpl, helper };\n}\n//# sourceMappingURL=calendar.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDate {\n constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalDateSlots. This check\n // exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get year() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateFromFields(calendar, fields, options);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n }\n add(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.ToTemporalDuration(temporalDurationLike);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n subtract(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDate(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalDateToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n }\n toPlainDateTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n let timeZone, temporalTime;\n if (ES.IsObject(item)) {\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n // The cast below is needed because it's possible here for\n // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`,\n // not a TimeZoneProtocol.\n // TODO: should we check for that shape to improve on the (bad) error\n // message that the caller will get from ToTemporalTimeZone?\n timeZone = ES.ToTemporalTimeZone(item);\n }\n else {\n timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n temporalTime = item.plainTime;\n }\n }\n else {\n timeZone = ES.ToTemporalTimeZone(item);\n }\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0;\n if (temporalTime !== undefined) {\n temporalTime = ES.ToTemporalTime(temporalTime);\n hour = GetSlot(temporalTime, ISO_HOUR);\n minute = GetSlot(temporalTime, ISO_MINUTE);\n second = GetSlot(temporalTime, ISO_SECOND);\n millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n }\n const dt = ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDate(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDate(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n//# sourceMappingURL=plaindate.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDateTime {\n constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const hour = ES.ToIntegerThrowOnInfinity(hourParam);\n const minute = ES.ToIntegerThrowOnInfinity(minuteParam);\n const second = ES.ToIntegerThrowOnInfinity(secondParam);\n const millisecond = ES.ToIntegerThrowOnInfinity(millisecondParam);\n const microsecond = ES.ToIntegerThrowOnInfinity(microsecondParam);\n const nanosecond = ES.ToIntegerThrowOnInfinity(nanosecondParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get year() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get hour() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike);\n const options = ES.GetOptionsObject(optionsParam);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const props = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-time-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n let year = GetSlot(this, ISO_YEAR);\n let month = GetSlot(this, ISO_MONTH);\n let day = GetSlot(this, ISO_DAY);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDateTime(otherParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const showCalendar = ES.ToShowCalendarOption(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n }\n toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation);\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n toPlainDate() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n toPlainTime() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(this);\n }\n getISOFields() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDateTime(oneParam);\n const two = ES.ToTemporalDateTime(twoParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n//# sourceMappingURL=plaindatetime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class Duration {\n constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) {\n const years = ES.ToIntegerWithoutRounding(yearsParam);\n const months = ES.ToIntegerWithoutRounding(monthsParam);\n const weeks = ES.ToIntegerWithoutRounding(weeksParam);\n const days = ES.ToIntegerWithoutRounding(daysParam);\n const hours = ES.ToIntegerWithoutRounding(hoursParam);\n const minutes = ES.ToIntegerWithoutRounding(minutesParam);\n const seconds = ES.ToIntegerWithoutRounding(secondsParam);\n const milliseconds = ES.ToIntegerWithoutRounding(millisecondsParam);\n const microseconds = ES.ToIntegerWithoutRounding(microsecondsParam);\n const nanoseconds = ES.ToIntegerWithoutRounding(nanosecondsParam);\n ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n CreateSlots(this);\n SetSlot(this, YEARS, years);\n SetSlot(this, MONTHS, months);\n SetSlot(this, WEEKS, weeks);\n SetSlot(this, DAYS, days);\n SetSlot(this, HOURS, hours);\n SetSlot(this, MINUTES, minutes);\n SetSlot(this, SECONDS, seconds);\n SetSlot(this, MILLISECONDS, milliseconds);\n SetSlot(this, MICROSECONDS, microseconds);\n SetSlot(this, NANOSECONDS, nanoseconds);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get years() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, YEARS);\n }\n get months() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MONTHS);\n }\n get weeks() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, WEEKS);\n }\n get days() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, DAYS);\n }\n get hours() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, HOURS);\n }\n get minutes() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MINUTES);\n }\n get seconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, SECONDS);\n }\n get milliseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MILLISECONDS);\n }\n get microseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MICROSECONDS);\n }\n get nanoseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, NANOSECONDS);\n }\n get sign() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS));\n }\n get blank() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return (ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0);\n }\n with(durationLike) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const props = ES.PrepareTemporalFields(durationLike, \n // NOTE: Field order here is important.\n [\n 'days',\n 'hours',\n 'microseconds',\n 'milliseconds',\n 'minutes',\n 'months',\n 'nanoseconds',\n 'seconds',\n 'weeks',\n 'years'\n ], 'partial');\n if (!props) {\n throw new TypeError('invalid duration-like');\n }\n const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props;\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n negated() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.CreateNegatedTemporalDuration(this);\n }\n abs() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS)));\n }\n add(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n }\n subtract(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n let defaultLargestUnit = ES.DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n let smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined);\n let smallestUnitPresent = true;\n if (!smallestUnit) {\n smallestUnitPresent = false;\n smallestUnit = 'nanosecond';\n }\n defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']);\n let largestUnitPresent = true;\n if (!largestUnit) {\n largestUnitPresent = false;\n largestUnit = defaultLargestUnit;\n }\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (!smallestUnitPresent && !largestUnitPresent) {\n throw new RangeError('at least one of smallestUnit or largestUnit is required');\n }\n if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const roundingIncrement = ES.ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let relativeTo = ES.ToRelativeTemporalObject(options);\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n relativeTo = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo));\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n total(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n if (optionsParam === undefined)\n throw new TypeError('options argument is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('unit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n // Convert larger units down to days\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n let intermediate;\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate));\n // Finally, truncate to the correct unit and calculate remainder\n const { total } = ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo);\n return total;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n if (precision === 'minute')\n throw new RangeError('smallestUnit must not be \"minute\"');\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDurationToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') {\n return new Intl.DurationFormat(locales, options).format(this);\n }\n console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n return ES.TemporalDurationToString(this);\n }\n valueOf() {\n throw new TypeError('use compare() to compare Temporal.Duration');\n }\n static from(item) {\n if (ES.IsTemporalDuration(item)) {\n return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS));\n }\n return ES.ToTemporalDuration(item);\n }\n static compare(oneParam, twoParam, optionsParam = undefined) {\n const one = ES.ToTemporalDuration(oneParam);\n const two = ES.ToTemporalDuration(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n const y1 = GetSlot(one, YEARS);\n const mon1 = GetSlot(one, MONTHS);\n const w1 = GetSlot(one, WEEKS);\n let d1 = GetSlot(one, DAYS);\n const h1 = GetSlot(one, HOURS);\n const min1 = GetSlot(one, MINUTES);\n const s1 = GetSlot(one, SECONDS);\n const ms1 = GetSlot(one, MILLISECONDS);\n const µs1 = GetSlot(one, MICROSECONDS);\n let ns1 = GetSlot(one, NANOSECONDS);\n const y2 = GetSlot(two, YEARS);\n const mon2 = GetSlot(two, MONTHS);\n const w2 = GetSlot(two, WEEKS);\n let d2 = GetSlot(two, DAYS);\n const h2 = GetSlot(two, HOURS);\n const min2 = GetSlot(two, MINUTES);\n const s2 = GetSlot(two, SECONDS);\n const ms2 = GetSlot(two, MILLISECONDS);\n const µs2 = GetSlot(two, MICROSECONDS);\n let ns2 = GetSlot(two, NANOSECONDS);\n const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n }\n const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n//# sourceMappingURL=duration.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainMonthDay {\n constructor(isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar(), referenceISOYearParam = 1972) {\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISOYear = ES.ToIntegerThrowOnInfinity(referenceISOYearParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoMonth and isoDay are required');\n }\n ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n }\n get monthCode() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n with(temporalMonthDayLike, optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalMonthDayLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid month-day-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarMonthDayFromFields(calendar, fields, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalMonthDay(otherParam);\n for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalMonthDayToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalMonthDayToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['year']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalMonthDay(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR));\n }\n return ES.ToTemporalMonthDay(item, options);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n//# sourceMappingURL=plainmonthday.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nconst instant = () => {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.GetISO8601Calendar();\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return zonedDateTime(ES.GetISO8601Calendar(), temporalTimeZoneLike);\n};\nconst plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZone = () => {\n return ES.SystemTimeZone();\n};\nexport const Now = {\n instant,\n plainDateTime,\n plainDateTimeISO,\n plainDate,\n plainDateISO,\n plainTimeISO,\n timeZone,\n zonedDateTime,\n zonedDateTimeISO,\n [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n value: 'Temporal.Now',\n writable: false,\n enumerable: false,\n configurable: true\n});\n//# sourceMappingURL=now.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectAssign = Object.assign;\nfunction TemporalTimeToString(time, precision, options = undefined) {\n let hour = GetSlot(time, ISO_HOUR);\n let minute = GetSlot(time, ISO_MINUTE);\n let second = GetSlot(time, ISO_SECOND);\n let millisecond = GetSlot(time, ISO_MILLISECOND);\n let microsecond = GetSlot(time, ISO_MICROSECOND);\n let nanosecond = GetSlot(time, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const hourString = ES.ISODateTimePartString(hour);\n const minuteString = ES.ISODateTimePartString(minute);\n const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n return `${hourString}:${minuteString}${seconds}`;\n}\nexport class PlainTime {\n constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) {\n const isoHour = ES.ToIntegerThrowOnInfinity(isoHourParam);\n const isoMinute = ES.ToIntegerThrowOnInfinity(isoMinuteParam);\n const isoSecond = ES.ToIntegerThrowOnInfinity(isoSecondParam);\n const isoMillisecond = ES.ToIntegerThrowOnInfinity(isoMillisecondParam);\n const isoMicrosecond = ES.ToIntegerThrowOnInfinity(isoMicrosecondParam);\n const isoNanosecond = ES.ToIntegerThrowOnInfinity(isoNanosecondParam);\n ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n CreateSlots(this);\n SetSlot(this, ISO_HOUR, isoHour);\n SetSlot(this, ISO_MINUTE, isoMinute);\n SetSlot(this, ISO_SECOND, isoSecond);\n SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n SetSlot(this, CALENDAR, ES.GetISO8601Calendar());\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get calendar() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n // PlainTime's calendar isn't settable, so can't be a userland calendar\n return GetSlot(this, CALENDAR);\n }\n get hour() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n with(temporalTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalTimeLike);\n const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const fields = ES.ToTemporalTimeRecord(this);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n equals(otherParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalTime(otherParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return true;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return TemporalTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n }\n toPlainDateTime(temporalDateParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument');\n }\n const dateLike = item.plainDate;\n if (dateLike === undefined) {\n throw new TypeError('missing date property');\n }\n const temporalDate = ES.ToTemporalDate(dateLike);\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n throw new TypeError('missing timeZone property');\n }\n const timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n getISOFields() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n if (ES.IsTemporalTime(item)) {\n return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n return ES.ToTemporalTime(item, overflow);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalTime(oneParam);\n const two = ES.ToTemporalTime(twoParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n//# sourceMappingURL=plaintime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { TIMEZONE_ID, EPOCHNANOSECONDS, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class TimeZone {\n constructor(timeZoneIdentifierParam) {\n // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n // This check exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: identifier is required');\n }\n const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n CreateSlots(this);\n SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n getOffsetNanosecondsFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n return ES.ParseTimeZoneOffsetString(id);\n }\n return ES.GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id);\n }\n getOffsetStringFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n return ES.BuiltinTimeZoneGetOffsetStringFor(this, instant);\n }\n getPlainDateTimeFor(instantParam, calendarParam = ES.GetISO8601Calendar()) {\n const instant = ES.ToTemporalInstant(instantParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar);\n }\n getInstantFor(dateTimeParam, optionsParam = undefined) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n return ES.BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation);\n }\n getPossibleInstantsFor(dateTimeParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n const epochNs = ES.GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n const offsetNs = ES.ParseTimeZoneOffsetString(id);\n return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n }\n const possibleEpochNs = ES.GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n return possibleEpochNs.map((ns) => new Instant(ns));\n }\n getNextTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZoneNextTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n getPreviousTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZonePreviousTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n toString() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(GetSlot(this, TIMEZONE_ID));\n }\n toJSON() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalTimeZone(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\n//# sourceMappingURL=timezone.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainYearMonth {\n constructor(isoYearParam, isoMonthParam, calendarParam = ES.GetISO8601Calendar(), referenceISODayParam = 1) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISODay = ES.ToIntegerThrowOnInfinity(referenceISODayParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoYear and isoMonth are required');\n }\n ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n }\n get year() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalYearMonthLike, optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalYearMonthLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid year-month-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarYearMonthFromFields(calendar, fields, options);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalYearMonth(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalYearMonthToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalYearMonthToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['day']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalYearMonth(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY));\n }\n return ES.ToTemporalYearMonth(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalYearMonth(oneParam);\n const two = ES.ToTemporalYearMonth(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n//# sourceMappingURL=plainyearmonth.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { CALENDAR, EPOCHNANOSECONDS, ISO_HOUR, INSTANT, ISO_DAY, ISO_MONTH, ISO_YEAR, ISO_MICROSECOND, ISO_MILLISECOND, ISO_MINUTE, ISO_NANOSECOND, ISO_SECOND, TIME_ZONE, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO } from './ecmascript';\nexport class ZonedDateTime {\n constructor(epochNanosecondsParam, timeZoneParam, calendarParam = ES.GetISO8601Calendar()) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n // ToTemporalTimeZone(undefined) will end up calling TimeZone.from(\"undefined\"), which\n // could succeed.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get timeZone() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, TIME_ZONE);\n }\n get year() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get month() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthCode() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n }\n get day() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hour() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n }\n get eraYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get epochSeconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n }\n get dayOfWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get dayOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get weekOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hoursInDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const year = GetSlot(dt, ISO_YEAR);\n const month = GetSlot(dt, ISO_MONTH);\n const day = GetSlot(dt, ISO_DAY);\n const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n const timeZone = GetSlot(this, TIME_ZONE);\n const todayNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n const tomorrowNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12;\n }\n get daysInWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthsInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get inLeapYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get offset() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n get offsetNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n with(temporalZonedDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalZonedDateTimeLike)) {\n throw new TypeError('invalid zoned-date-time-like');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike);\n // TODO: Reorder according to spec.\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const offset = ES.ToTemporalOffset(options, 'prefer');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldsWithOffset = ES.ArrayPush(fieldNames, 'offset');\n const props = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial');\n const fieldsWithTimeZoneAndOffset = ES.ArrayPush(fieldsWithOffset, 'timeZone');\n let fields = ES.PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const thisDt = dateTime(this);\n const hour = GetSlot(thisDt, ISO_HOUR);\n const minute = GetSlot(thisDt, ISO_MINUTE);\n const second = GetSlot(thisDt, ISO_SECOND);\n const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n const thisDt = dateTime(this);\n const year = GetSlot(thisDt, ISO_YEAR);\n const month = GetSlot(thisDt, ISO_MONTH);\n const day = GetSlot(thisDt, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withTimeZone(timeZoneParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n // first, round the underlying DateTime fields\n const dt = dateTime(this);\n let year = GetSlot(dt, ISO_YEAR);\n let month = GetSlot(dt, ISO_MONTH);\n let day = GetSlot(dt, ISO_DAY);\n let hour = GetSlot(dt, ISO_HOUR);\n let minute = GetSlot(dt, ISO_MINUTE);\n let second = GetSlot(dt, ISO_SECOND);\n let millisecond = GetSlot(dt, ISO_MILLISECOND);\n let microsecond = GetSlot(dt, ISO_MICROSECOND);\n let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n const instantStart = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n if (JSBI.equal(dayLengthNs, ZERO)) {\n throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days');\n }\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, \n // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n // (which can hold up to 104 days in nanoseconds)\n JSBI.toNumber(dayLengthNs)));\n // Now reset all DateTime fields but leave the TimeZone. The offset will\n // also be retained if the new date/time values are still OK with the old\n // offset. Otherwise the offset will be changed to be compatible with the\n // new date/time values. If DST disambiguation is required, the `compatible`\n // disambiguation algorithm will be used.\n const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalZonedDateTime(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)))\n return false;\n if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE)))\n return false;\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const showCalendar = ES.ToShowCalendarOption(options);\n const showTimeZone = ES.ToShowTimeZoneNameOption(options);\n const showOffset = ES.ToShowOffsetOption(options);\n return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n unit,\n increment,\n roundingMode\n });\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n toJSON() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalZonedDateTimeToString(this, 'auto');\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n }\n startOfDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toInstant() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n }\n toPlainDate() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(dateTime(this));\n }\n toPlainTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(dateTime(this));\n }\n toPlainDateTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return dateTime(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const tz = GetSlot(this, TIME_ZONE);\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(dt, ISO_DAY),\n isoHour: GetSlot(dt, ISO_HOUR),\n isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n isoMinute: GetSlot(dt, ISO_MINUTE),\n isoMonth: GetSlot(dt, ISO_MONTH),\n isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n isoSecond: GetSlot(dt, ISO_SECOND),\n isoYear: GetSlot(dt, ISO_YEAR),\n offset: ES.BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n timeZone: tz\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalZonedDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n ES.ToTemporalDisambiguation(options);\n ES.ToTemporalOffset(options, 'reject');\n return ES.CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalZonedDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalZonedDateTime(oneParam);\n const two = ES.ToTemporalZonedDateTime(twoParam);\n const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return -1;\n if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\nfunction dateTime(zdt) {\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n//# sourceMappingURL=zoneddatetime.js.map","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n Temporal.Instant,\n Temporal.Calendar,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.Duration,\n Temporal.PlainMonthDay,\n // Temporal.Now, // plain object (not a constructor), so no `prototype`\n Temporal.PlainTime,\n Temporal.TimeZone,\n Temporal.PlainYearMonth,\n Temporal.ZonedDateTime\n];\nfor (const type of types) {\n const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype');\n if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n descriptor.configurable = false;\n descriptor.enumerable = false;\n descriptor.writable = false;\n Object.defineProperty(type, 'prototype', descriptor);\n }\n}\nexport { Temporal, Intl, toTemporalInstant };\n//# sourceMappingURL=index.js.map","import { Instant } from './instant';\nimport JSBI from 'jsbi';\nimport * as ES from './ecmascript';\nimport { MILLION } from './ecmascript';\nexport function toTemporalInstant() {\n // Observable access to valueOf is not correct here, but unavoidable\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n return new Instant(ES.ToBigInt(epochNanoseconds));\n}\n//# sourceMappingURL=legacydate.js.map"],"names":["INTRINSICS","MakeIntrinsicClass","Class","name","Object","defineProperty","prototype","Symbol","toStringTag","value","writable","enumerable","configurable","prop","getOwnPropertyNames","desc","getOwnPropertyDescriptor","DefineIntrinsic","key","undefined","Error","GetIntrinsic","intrinsic","EPOCHNANOSECONDS","TIMEZONE_ID","ISO_YEAR","ISO_MONTH","ISO_DAY","ISO_HOUR","ISO_MINUTE","ISO_SECOND","ISO_MILLISECOND","ISO_MICROSECOND","ISO_NANOSECOND","CALENDAR","INSTANT","TIME_ZONE","YEARS","MONTHS","WEEKS","DAYS","HOURS","MINUTES","SECONDS","MILLISECONDS","MICROSECONDS","NANOSECONDS","CALENDAR_ID","slots","WeakMap","CreateSlots","container","set","create","GetSlots","get","HasSlot","ids","myslots","reduce","all","id","GetSlot","TypeError","SetSlot","tzComponent","timeZoneID","RegExp","source","calComponent","calendarID","yearpart","monthpart","daypart","datesplit","timesplit","offset","zonesplit","calendar","zoneddatetime","time","yearmonth","monthday","fraction","durationTime","duration","ArrayIncludes","Array","includes","ArrayPrototypePush","push","IntlDateTimeFormat","globalThis","Intl","DateTimeFormat","MathMin","Math","min","MathMax","max","MathAbs","abs","MathFloor","floor","MathSign","sign","MathTrunc","trunc","NumberIsNaN","Number","isNaN","NumberIsFinite","isFinite","NumberCtor","StringCtor","String","NumberMaxSafeInteger","MAX_SAFE_INTEGER","ObjectAssign","assign","ObjectCreate","ObjectGetOwnPropertyDescriptor","ObjectIs","is","ReflectApply","Reflect","apply","ZERO","JSBI","BigInt","ONE","SIXTY","THOUSAND","MILLION","BILLION","NEGATIVE_ONE","DAY_NANOS","multiply","NS_MIN","NS_MAX","BEFORE_FIRST_OFFSET_TRANSITION","ABOUT_TEN_YEARS_NANOS","ABOUT_ONE_YEAR_NANOS","TWO_WEEKS_NANOS","BUILTIN_CALENDAR_IDS","IsInteger","IsObject","ToNumber","ToInteger","num","integer","ToString","ToIntegerThrowOnInfinity","RangeError","ToPositiveInteger","valueParam","property","ToIntegerWithoutRounding","divmod","x","y","quotient","divide","remainder","lessThan","ArrayPush","arr","newItem","BUILTIN_CASTS","Map","BUILTIN_DEFAULTS","SINGULAR_PLURAL_UNITS","SINGULAR_FOR","map","e","PLURAL_FOR","p","s","UNITS_DESCENDING","DURATION_FIELDS","from","keys","sort","IntlDateTimeFormatEnUsCache","getIntlDateTimeFormatEnUsForTimeZone","timeZoneIdentifier","instance","timeZone","hour12","era","year","month","day","hour","minute","second","IsTemporalInstant","item","IsTemporalTimeZone","IsTemporalCalendar","IsTemporalDuration","IsTemporalDate","IsTemporalTime","IsTemporalDateTime","IsTemporalYearMonth","IsTemporalMonthDay","IsTemporalZonedDateTime","RejectObjectWithCalendarOrTimeZone","ParseTemporalTimeZone","stringIdent","ianaName","z","ParseTemporalTimeZoneString","canonicalIdent","GetCanonicalTimeZoneIdentifier","toString","result","ParseISODateTime","FormatCalendarAnnotation","showCalendar","isoString","match","PARSE.zoneddatetime","exec","yearString","slice","hasTime","millisecond","microsecond","nanosecond","offsetSign","offsetHours","offsetMinutes","offsetSeconds","offsetFraction","endsWith","RejectDateTime","ParseTemporalYearMonthString","PARSE.yearmonth","referenceISODay","ParseTemporalMonthDayString","PARSE.monthday","referenceISOYear","ParseTemporalDurationString","PARSE.duration","every","element","years","months","weeks","days","hours","fHours","minutes","fMinutes","seconds","fSeconds","milliseconds","microseconds","nanoseconds","length","DurationHandleFractions","fHoursParam","minutesParam","fMinutesParam","secondsParam","millisecondsParam","microsecondsParam","nanosecondsParam","forEach","val","mins","secs","mils","fMilliseconds","mics","fMicroseconds","RejectDuration","ParseTemporalInstant","ParseTemporalInstantString","offsetNs","ParseTimeZoneOffsetString","BalanceISODateTime","epochNs","GetEpochFromISOParts","RegulateISODate","yearParam","monthParam","dayParam","overflow","RejectISODate","ConstrainISODate","RegulateTime","hourParam","minuteParam","secondParam","millisecondParam","microsecondParam","nanosecondParam","RejectTime","ConstrainTime","ConstrainToRange","ToTemporalDurationRecord","partial","ToTemporalPartialDurationRecord","temporalDurationLike","any","ToTemporalOverflow","options","GetOption","ToTemporalDisambiguation","ToTemporalRoundingMode","fallback","NegateTemporalRoundingMode","roundingMode","ToTemporalOffset","ToShowCalendarOption","ToTemporalRoundingIncrement","dividend","inclusive","maximum","Infinity","increment","GetNumberOption","minimum","valueRaw","ToTemporalDateTimeRoundingIncrement","smallestUnit","week","ToSecondsStringPrecision","GetTemporalUnit","ALLOWED_UNITS","allowed","c","join","precision","unit","digits","fractionalSecondDigits","stringDigits","REQUIRED","unitGroup","requiredOrDefault","extraValues","allowedSingular","singular","category","defaultVal","allowedValues","plural","retval","has","ToRelativeTemporalObject","relativeTo","offsetBehaviour","matchMinutes","TemporalDateTimeToDate","GetTemporalCalendarWithISODefault","fields","PrepareTemporalFields","CalendarFields","dateOptions","InterpretTemporalDateTimeFields","GetISO8601Calendar","ToTemporalCalendar","ToTemporalTimeZone","CreateTemporalZonedDateTime","InterpretISODateTimeOffset","CreateTemporalDate","DefaultTemporalLargestUnit","v","LargerOfTwoTemporalUnits","unit1","unit2","indexOf","MergeLargestUnitOption","optionsParam","largestUnit","bag","requiredFields","emptySourceErrorMessage","call","eraYear","ToTemporalTimeRecord","completeness","field","valueDesc","ToTemporalDate","itemParam","BuiltinTimeZoneGetPlainDateTimeFor","CalendarDateFromFields","ParseTemporalDateString","date","ToTemporalDateTime","CreateTemporalDateTime","ParseTemporalDateTimeString","ToTemporalDuration","ToTemporalInstant","ns","ToTemporalMonthDay","calendarAbsent","maybeStringCalendar","monthCode","CalendarMonthDayFromFields","CreateTemporalMonthDay","ToTemporalTime","ParseTemporalTimeString","PARSE.time","test","ToTemporalYearMonth","CalendarYearMonthFromFields","CreateTemporalYearMonth","disambiguation","offsetOpt","matchMinute","dt","BuiltinTimeZoneGetInstantFor","subtract","possibleInstants","GetPossibleInstantsFor","candidate","candidateOffset","GetOffsetNanosecondsFor","roundedCandidateOffset","toNumber","RoundNumberToIncrement","offsetStr","FormatTimeZoneOffsetString","timeZoneString","DisambiguatePossibleInstants","ToTemporalZonedDateTime","ParseTemporalZonedDateTimeString","CreateTemporalDateSlots","isoYear","isoMonth","isoDay","RejectDateRange","TemporalPlainDate","CreateTemporalDateTimeSlots","h","ms","RejectDateTimeRange","TemporalPlainDateTime","CreateTemporalMonthDaySlots","TemporalPlainMonthDay","CreateTemporalYearMonthSlots","RejectYearMonthRange","RejectToRange","TemporalPlainYearMonth","CreateTemporalZonedDateTimeSlots","epochNanoseconds","ValidateEpochNanoseconds","instant","TemporalZonedDateTime","fieldNamesParam","fieldNames","CalendarMergeFields","additionalFields","calMergeFields","mergeFields","CalendarDateAdd","dateAddParam","dateAdd","CalendarDateUntil","otherDate","dateUntilParam","dateUntil","CalendarYear","dateLike","CalendarMonth","CalendarMonthCode","CalendarDay","CalendarEra","CalendarEraYear","CalendarDayOfWeek","dayOfWeek","CalendarDayOfYear","dayOfYear","CalendarWeekOfYear","weekOfYear","CalendarDaysInWeek","daysInWeek","CalendarDaysInMonth","daysInMonth","CalendarDaysInYear","daysInYear","CalendarMonthsInYear","monthsInYear","CalendarInLeapYear","inLeapYear","calendarLikeParam","calendarLike","identifier","TemporalCalendar","IsBuiltinCalendar","CalendarEquals","one","two","ConsolidateCalendars","sOne","sTwo","dateFromFields","yearMonthFromFields","monthDayFromFields","temporalTimeZoneLikeParam","temporalTimeZoneLike","TimeZoneEquals","dateTime","TemporalDateTimeToTime","getOffsetNanosecondsFor","BuiltinTimeZoneGetOffsetStringFor","GetISOPartsFromEpoch","Instant","numInstants","utcns","dayBefore","dayAfter","add","offsetBefore","PlainDateTime","earlier","AddDateTime","later","possible","getPossibleInstantsFor","ISOYearString","ISODateTimePartString","part","FormatSecondsStringPart","fractionNumber","padStart","TemporalInstantToString","outputTimeZone","FormatISOTimeZoneOffsetString","TemporalDurationToString","formatNumber","DurationSign","RoundDuration","dateParts","timeParts","secondParts","nsBigInt","msBigInt","secondsBigInt","total","TotalDurationNanoseconds","decimalPart","unshift","equal","TemporalDateToString","TemporalDateTimeToString","RoundISODateTime","TemporalMonthDayToString","monthDay","resultString","calendarString","TemporalYearMonthToString","yearMonth","TemporalZonedDateTimeToString","zdt","showTimeZone","showOffset","RoundInstant","tz","TestTimeZoneOffsetString","string","OFFSET","resolvedOptions","GetIANATimeZoneOffsetNanoseconds","GetIANATimeZoneDateTimeParts","utc","offsetNanosecondsParam","offsetNanoseconds","hourString","minuteString","secondString","post","legacyDate","Date","setUTCHours","setUTCFullYear","getTime","greaterThan","epochMilliseconds","nanos","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","GetFormatterParts","formatter","parseFromEnUsFormat","datetime","parts","split","toUpperCase","format","maxJSBI","afterLatestPossibleTzdbRuleChange","SystemUTCEpochNanoSeconds","GetIANATimeZonePreviousTransition","afterLatestRule","isFarFuture","lowercap","rightNanos","rightOffsetNs","leftNanos","leftOffsetNs","bisect","LeapYear","ISODaysInMonth","standard","leapyear","DayOfWeek","m","Y","dow","DayOfYear","mon","w","d","BalanceISOYearMonth","BalanceISODate","testYear","deltaDays","BalanceTime","NonNegativeModulo","daysParam","hoursParam","offsetShift","NanosecondsToDays","TemporalInstant","dayLengthNs","startNs","start","endNs","end","dtStart","dtEnd","DifferenceISODateTime","intermediateNs","AddZonedDateTime","isOverflow","relativeInstant","oneDayFartherNs","relativeNs","BalanceDuration","nanosecondsBigInt","microsecondsBigInt","millisecondsBigInt","minutesBigInt","hoursBigInt","UnbalanceDurationRelative","yearsParam","monthsParam","weeksParam","relativeToParam","TemporalDuration","oneYear","oneMonth","oneWeek","relativeToDateOnly","newRelativeTo","untilOptions","oneYearMonths","oneYearDays","MoveRelativeDate","oneMonthDays","oneWeekDays","CalculateOffsetShift","after","CreateNegatedTemporalDuration","propSign","DifferenceISODate","y1","m1","d1","y2","m2","d2","CompareISODate","mid","AddISODate","midSign","larger","smaller","DifferenceTime","h1","min1","s1","ms1","ns1","h2","min2","s2","ms2","ns2","DifferenceInstant","diff","wholeDays","roundedRemainder","nsPerTimeUnit","roundedDiff","y1Param","mon1Param","d1Param","mon2","mon1","timeSign","date1","date2","DifferenceZonedDateTime","nsDiff","timeRemainderNs","intermediate","DifferenceTemporalInstant","operation","otherParam","other","first","GetOptionsObject","defaultLargestUnit","roundingIncrement","onens","twons","DifferenceTemporalPlainDate","plainDate","otherCalendar","calendarId","otherCalendarId","DifferenceTemporalPlainDateTime","plainDateTime","DifferenceTemporalPlainTime","plainTime","DifferenceTemporalPlainYearMonth","otherCalendarID","otherFields","thisFields","thisDate","DifferenceTemporalZonedDateTime","zonedDateTime","AdjustRoundedDurationDays","AddTime","AddDuration","w1","w2","dateDuration1","dateDuration2","dateLargestUnit","differenceOptions","AddInstant","sum","addedDate","dtIntermediate","AddDurationToOrSubtractDurationFromDuration","AddDurationToOrSubtractDurationFromInstant","durationLike","ToLimitedTemporalDuration","disallowedProperties","record","AddDurationToOrSubtractDurationFromPlainDateTime","AddDurationToOrSubtractDurationFromPlainTime","temporalTime","AddDurationToOrSubtractDurationFromPlainYearMonth","startDate","durationToAdd","optionsCopy","AddDurationToOrSubtractDurationFromZonedDateTime","quantity","mode","RoundTime","nsPerUnit","rounded","DaysUntil","MoveRelativeZonedDateTime","direction","dayStart","dayEnd","greaterThanOrEqual","zdtRelative","dayLength","yearsDuration","yearsLater","yearsMonthsWeeksLater","daysLater","yearsPassed","oldRelativeTo","divisor","yearsMonths","yearsMonthsLater","allNanoseconds","ComparisonResult","ToBigIntExternal","arg","jsbiBI","ToBigInt","prim","toPrimFn","toPrimitive","SyntaxError","message","startsWith","now","CreateOnePropObject","propName","propValue","o","PARSE.offset","getState","leftParam","rightParam","lstateParam","rstateParam","left","right","lstate","rstate","middle","mstate","DATE","YM","MD","TIME","DATETIME","ZONED","INST","ORIGINAL","TZ_RESOLVED","TZ_GIVEN","CAL_ID","LOCALE","OPTIONS","descriptor","ObjectHasOwnProperty","hasOwnProperty","getPropLazy","obj","getResolvedTimeZoneLazy","ES.ToTemporalTimeZone","DateTimeFormatImpl","locale","this","hasOptions","original","ro","clonedResolved","dateAmend","yearMonthAmend","monthDayAmend","timeAmend","datetimeAmend","zonedDateTimeAmend","instantAmend","supportedLocalesOf","locales","propertyDescriptors","rest","extractOverrides","adjustFormatterTimeZone","formatRange","a","b","isTemporalObject","sameTemporalType","aa","aformatter","atz","bb","bformatter","btz","formatToParts","formatRangeToParts","amend","amended","opt","weekday","timeZoneName","dateStyle","hasTimeOptions","dayPeriod","timeStyle","hasDateOptions","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","temporalObj","main","DateTime","ES.BuiltinTimeZoneGetInstantFor","ES.ToString","objTimeZone","constructor","arguments","ES.ToBigInt","ES.ValidateEpochNanoseconds","epochSeconds","epochMicroseconds","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","until","ES.DifferenceTemporalInstant","since","round","ES.CreateOnePropObject","ES.GetOptionsObject","ES.GetTemporalUnit","ES.REQUIRED","ES.ToTemporalRoundingMode","ES.ToTemporalRoundingIncrement","roundedNs","ES.RoundInstant","equals","ES.ToTemporalInstant","ES.ToSecondsStringPrecision","ES.TemporalInstantToString","toJSON","toLocaleString","valueOf","toZonedDateTime","ES.IsObject","ES.ToTemporalCalendar","ES.CreateTemporalZonedDateTime","toZonedDateTimeISO","timeZoneProperty","ES.GetISO8601Calendar","fromEpochSeconds","epochSecondsParam","ES.ToNumber","fromEpochMilliseconds","epochMillisecondsParam","fromEpochMicroseconds","epochMicrosecondsParam","fromEpochNanoseconds","epochNanosecondsParam","compare","oneParam","twoParam","oneNs","twoNs","ArraySort","ObjectEntries","entries","ObjectKeys","impl","Calendar","idParam","ES.IsBuiltinCalendar","ES.IsTemporalCalendar","fieldsArray","Set","delete","dateParam","durationParam","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","monthCodeNumberPart","buildMonthCode","leap","resolveNonLunisolarMonth","calendarDate","monthsPerYear","ES.RejectToRange","ES.ConstrainToRange","numberPart","fieldsParam","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","RegulateISOYearMonth","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","useYear","ES.CreateTemporalMonthDay","merged","nextKey","newKeys","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","WeekOfYear","doy","doj","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","OneObjectCache","cacheToClone","calls","hits","misses","performance","i","entry","MAX_CACHE_ENTRIES","report","setObject","objectMap","getCacheForObject","cache","toUtcIsoDateString","ES.ISOYearString","ES.ISODateTimePartString","simpleDateDiff","HelperBase","eraLength","hasEra","getFormatter","isoToCalendarDate","isoDate","JSON","stringify","func","cached","dateTimeFormat","type","matches","monthExtra","normalize","replace","toLowerCase","reviseIntlEra","checkIcuBugs","adjustCalendarDate","keyReverse","validateCalendarDate","constantEra","calendarDateParam","fromLegacyDate","calendarType","largestMonth","regulateMonthDayNaive","maximumMonthLength","calendarToIsoDate","originalDate","keyOriginal","isoEstimate","estimateIsoDate","calculateSameMonthResult","diffDays","testIsoEstimate","addDaysIso","minimumMonthLength","testCalendarDate","roundtripEstimate","diffTotalDaysEstimate","compareCalendarDates","maybeConstrained","oldRoundtripEstimate","oldSign","temporalToCalendarDate","date1Param","date2Param","ES.ComparisonResult","regulateDate","addDaysCalendar","addedIso","addMonthsCalendar","absMonths","oldCalendarDate","daysInPreviousMonth","monthsInOldYear","addCalendar","addedYears","addedMonths","initialDays","untilCalendar","calendarOne","calendarTwo","calendarDaysUntil","totalDays","diffYears","diffMonths","current","next","addedIsoDate","addedCalendarDate","endOfMonthIso","previousMonthDate","previousMonth","lastDayOfPreviousMonthIso","startOfCalendarYear","startOfCalendarMonth","oneIso","twoIso","isoDaysUntil","closestCalendar","closestIso","calendarYear","roundTripCalendarDate","HebrewHelper","super","Tishri","regular","Heshvan","Kislev","Tevet","Shevat","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul","minMaxMonthLength","minOrMax","getMonthCode","monthInfo","find","IslamicBaseHelper","DAYS_PER_ISLAMIC_YEAR","DAYS_PER_ISO_YEAR","IslamicHelper","IslamicUmalquraHelper","IslamicTblaHelper","IslamicCivilHelper","IslamicRgsaHelper","IslamicCcHelper","PersianHelper","IndianHelper","nextYear","vulnerableToBceBug","toLocaleDateString","isGregorianLeapYear","getMonthInfo","GregorianBaseHelper","originalEras","v8IsVulnerableToJulianBug","calendarIsVulnerableToJulianBug","eras","anchorEra","adjustEras","erasParam","reverseOf","filter","isAnchor","anchorEpoch","hasYearZero","reversedEra","isoEpoch","e1","e2","lastEraReversed","genericName","completeEraYear","checkField","currentValue","eraFromYear","adjustedCalendarDate","matchingEra","ES.CompareISODate","OrthodoxBaseHelper","EthioaaHelper","CopticHelper","EthiopicHelper","RocHelper","BuddhistHelper","GregoryHelper","JapaneseHelper","ChineseBaseHelper","getMonthList","getCalendarDate","daysPastFeb1","isoStringFeb1","setUTCDate","newYearGuess","calendarMonthString","tv","calendarDay","calendarYearToVerify","isoDaysDelta","oldCalendarDay","oldMonthString","monthIndex","done","monthString","withoutML","monthEntries","matchingMonthEntry","ChineseHelper","DangiHelper","nonIsoImpl","helper","fieldsCopy","additionalFieldsCopy","newMonth","newMonthCode","newYear","newEra","newEraYear","added","isoAdded","newTemporalObject","cacheOne","cacheTwo","startOfYear","startOfMonthCalendar","startOfNextMonthCalendar","startOfYearCalendar","startOfNextYearCalendar","Helper","PlainDate","isoYearParam","isoMonthParam","isoDayParam","calendarParam","ES.ToIntegerThrowOnInfinity","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","with","temporalDateLike","ES.RejectObjectWithCalendarOrTimeZone","ES.CalendarFields","props","ES.CalendarMergeFields","ES.CalendarDateFromFields","withCalendar","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","slot","ES.CalendarEquals","ES.TemporalDateToString","ES.ToShowCalendarOption","toPlainDateTime","temporalTimeParam","ES.CreateTemporalDateTime","ES.ToTemporalTime","timeZoneLike","toPlainYearMonth","ES.CalendarYearMonthFromFields","toPlainMonthDay","ES.CalendarMonthDayFromFields","getISOFields","ES.CreateTemporalDateTimeSlots","temporalDateTimeLike","ES.InterpretTemporalDateTimeFields","withPlainTime","withPlainDate","temporalDateParam","temporalDate","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","toPlainDate","ES.TemporalDateTimeToDate","toPlainTime","ES.TemporalDateTimeToTime","isoHour","isoMicrosecond","isoMillisecond","isoMinute","isoNanosecond","isoSecond","val1","val2","Duration","ES.ToIntegerWithoutRounding","ES.RejectDuration","ES.IsTemporalDuration","ES.DurationSign","blank","negated","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","smallestUnitPresent","ES.LargerOfTwoTemporalUnits","largestUnitPresent","ES.ToTemporalDateTimeRoundingIncrement","ES.ToRelativeTemporalObject","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","BalanceDurationRelative","untilResult","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.TemporalDurationToString","DurationFormat","console","warn","shift1","ES.CalculateOffsetShift","shift2","totalNs1","ES.TotalDurationNanoseconds","totalNs2","PlainMonthDay","referenceISOYearParam","ES.CreateTemporalMonthDaySlots","temporalMonthDayLike","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","receiverFieldNames","inputFieldNames","mergedFields","ES.SystemUTCEpochNanoSeconds","tZ","ES.BuiltinTimeZoneGetPlainDateTimeFor","plainDateTimeISO","SystemTimeZone","fmt","ES.SystemTimeZone","Now","plainDateISO","plainTimeISO","zonedDateTimeISO","TemporalTimeToString","ES.RoundTime","ES.FormatSecondsStringPart","PlainTime","isoHourParam","isoMinuteParam","isoSecondParam","isoMillisecondParam","isoMicrosecondParam","isoNanosecondParam","ES.RejectTime","temporalTimeLike","partialTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","TimeZone","timeZoneIdentifierParam","ES.GetCanonicalTimeZoneIdentifier","ES.IsTemporalTimeZone","instantParam","ES.TestTimeZoneOffsetString","ES.ParseTimeZoneOffsetString","ES.GetIANATimeZoneOffsetNanoseconds","getOffsetStringFor","ES.BuiltinTimeZoneGetOffsetStringFor","getPlainDateTimeFor","getInstantFor","dateTimeParam","ES.GetEpochFromISOParts","GetIANATimeZoneEpochValue","nsEarlier","nsLater","earliest","latest","ES.GetIANATimeZoneEpochValue","getNextTransition","startingPointParam","startingPoint","GetIANATimeZoneNextTransition","oneYearLater","uppercap","ES.GetIANATimeZoneNextTransition","getPreviousTransition","ES.GetIANATimeZonePreviousTransition","PlainYearMonth","referenceISODayParam","ES.CreateTemporalYearMonthSlots","temporalYearMonthLike","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ZonedDateTime","timeZoneParam","ES.CreateTemporalZonedDateTimeSlots","hoursInDay","today","tomorrowFields","tomorrow","todayNs","tomorrowNs","ES.GetOffsetNanosecondsFor","temporalZonedDateTimeLike","ES.ToTemporalOffset","fieldsWithOffset","ES.ArrayPush","fieldsWithTimeZoneAndOffset","ES.InterpretISODateTimeOffset","thisDt","withTimeZone","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","instantStart","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.TemporalZonedDateTimeToString","ToShowTimeZoneNameOption","ES.ToShowTimeZoneNameOption","ToShowOffsetOption","ES.ToShowOffsetOption","startOfDay","toInstant","types","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.PlainTime","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime","toTemporalInstant"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"index.cjs","sources":["../tsc-out/intrinsicclass.js","../tsc-out/slots.js","../tsc-out/regex.js","../tsc-out/ecmascript.js","../tsc-out/intl.js","../tsc-out/instant.js","../tsc-out/calendar.js","../tsc-out/plaindate.js","../tsc-out/plaindatetime.js","../tsc-out/duration.js","../tsc-out/plainmonthday.js","../tsc-out/now.js","../tsc-out/plaintime.js","../tsc-out/timezone.js","../tsc-out/plainyearmonth.js","../tsc-out/zoneddatetime.js","../tsc-out/legacydate.js","../tsc-out/index.js"],"sourcesContent":["import { DEBUG } from './debug';\nconst INTRINSICS = {};\nconst customUtilInspectFormatters = {\n ['Temporal.Duration'](depth, options) {\n const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n if (depth < 1)\n return descr;\n const entries = [];\n for (const prop of [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n 'microseconds',\n 'nanoseconds'\n ]) {\n if (this[prop] !== 0)\n entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`);\n }\n return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n }\n};\nfunction defaultUtilInspectFormatter(depth, options) {\n return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\nexport function MakeIntrinsicClass(Class, name) {\n Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n value: name,\n writable: false,\n enumerable: false,\n configurable: true\n });\n if (DEBUG) {\n Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n for (const prop of Object.getOwnPropertyNames(Class)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class, prop, desc);\n }\n for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class.prototype, prop, desc);\n }\n DefineIntrinsic(name, Class);\n DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\nexport function DefineIntrinsic(name, value) {\n const key = `%${name}%`;\n if (INTRINSICS[key] !== undefined)\n throw new Error(`intrinsic ${name} already exists`);\n INTRINSICS[key] = value;\n}\nexport function GetIntrinsic(intrinsic) {\n return INTRINSICS[intrinsic];\n}\n//# sourceMappingURL=intrinsicclass.js.map","// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\nconst slots = new WeakMap();\nexport function CreateSlots(container) {\n slots.set(container, Object.create(null));\n}\nfunction GetSlots(container) {\n return slots.get(container);\n}\nexport function HasSlot(container, ...ids) {\n if (!container || 'object' !== typeof container)\n return false;\n const myslots = GetSlots(container);\n return !!myslots && ids.reduce((all, id) => all && id in myslots, true);\n}\nexport function GetSlot(container, id) {\n const value = GetSlots(container)[id];\n if (value === undefined)\n throw new TypeError(`Missing internal slot ${id}`);\n return value;\n}\nexport function SetSlot(container, id, value) {\n GetSlots(container)[id] = value;\n}\n//# sourceMappingURL=slots.js.map","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nconst timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\\\d{1,2}|${offsetNoCapture.source})`);\nconst calComponent = /[A-Za-z0-9]{3,8}/;\nconst calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`);\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\\\[(${timeZoneID.source})\\\\])?`);\nconst calendar = new RegExp(`\\\\[u-ca=(${calendarID.source})\\\\]`);\nexport const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i');\nexport const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i');\n// The short forms of YearMonth and MonthDay are only for the ISO calendar.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\nexport const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`);\nexport const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`);\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n//# sourceMappingURL=regex.js.map","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectAssign = Object.assign;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ObjectIs = Object.is;\nconst ReflectApply = Reflect.apply;\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { CreateSlots, GetSlot, HasSlot, SetSlot, EPOCHNANOSECONDS, TIMEZONE_ID, CALENDAR_ID, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, DATE_BRAND, YEAR_MONTH_BRAND, MONTH_DAY_BRAND, TIME_ZONE, CALENDAR, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS } from './slots';\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst DAY_SECONDS = 86400;\nconst DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\nconst BUILTIN_CALENDAR_IDS = [\n 'iso8601',\n 'hebrew',\n 'islamic',\n 'islamic-umalqura',\n 'islamic-tbla',\n 'islamic-civil',\n 'islamic-rgsa',\n 'islamicc',\n 'persian',\n 'ethiopic',\n 'ethioaa',\n 'coptic',\n 'chinese',\n 'dangi',\n 'roc',\n 'indian',\n 'buddhist',\n 'japanese',\n 'gregory'\n];\nfunction IsInteger(value) {\n if (typeof value !== 'number' || !NumberIsFinite(value))\n return false;\n const abs = MathAbs(value);\n return MathFloor(abs) === abs;\n}\nexport function IsObject(value) {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\nexport function ToNumber(value) {\n if (typeof value === 'bigint')\n throw new TypeError('Cannot convert BigInt to number');\n return NumberCtor(value);\n}\nfunction ToInteger(value) {\n const num = ToNumber(value);\n if (NumberIsNaN(num))\n return 0;\n const integer = MathTrunc(num);\n if (num === 0)\n return 0;\n return integer;\n}\nexport function ToString(value) {\n if (typeof value === 'symbol') {\n throw new TypeError('Cannot convert a Symbol value to a String');\n }\n return StringCtor(value);\n}\nexport function ToIntegerThrowOnInfinity(value) {\n const integer = ToInteger(value);\n if (!NumberIsFinite(integer)) {\n throw new RangeError('infinity is out of range');\n }\n return integer;\n}\nfunction ToPositiveInteger(valueParam, property) {\n const value = ToInteger(valueParam);\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (value < 1) {\n if (property !== undefined) {\n throw new RangeError(`property '${property}' cannot be a a number less than one`);\n }\n throw new RangeError('Cannot convert a number less than one to a positive integer');\n }\n return value;\n}\nexport function ToIntegerWithoutRounding(valueParam) {\n const value = ToNumber(valueParam);\n if (NumberIsNaN(value))\n return 0;\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (!IsInteger(value)) {\n throw new RangeError(`unsupported fractional value ${value}`);\n }\n return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0\n}\nfunction divmod(x, y) {\n const quotient = JSBI.divide(x, y);\n const remainder = JSBI.remainder(x, y);\n return { quotient, remainder };\n}\nfunction abs(x) {\n if (JSBI.lessThan(x, ZERO))\n return JSBI.multiply(x, NEGATIVE_ONE);\n return x;\n}\nexport function ArrayPush(arr, ...newItem) {\n ArrayPrototypePush.apply(arr, newItem);\n return arr;\n}\nconst BUILTIN_CASTS = new Map([\n ['year', ToIntegerThrowOnInfinity],\n ['month', ToPositiveInteger],\n ['monthCode', ToString],\n ['day', ToPositiveInteger],\n ['hour', ToIntegerThrowOnInfinity],\n ['minute', ToIntegerThrowOnInfinity],\n ['second', ToIntegerThrowOnInfinity],\n ['millisecond', ToIntegerThrowOnInfinity],\n ['microsecond', ToIntegerThrowOnInfinity],\n ['nanosecond', ToIntegerThrowOnInfinity],\n ['years', ToIntegerWithoutRounding],\n ['months', ToIntegerWithoutRounding],\n ['weeks', ToIntegerWithoutRounding],\n ['days', ToIntegerWithoutRounding],\n ['hours', ToIntegerWithoutRounding],\n ['minutes', ToIntegerWithoutRounding],\n ['seconds', ToIntegerWithoutRounding],\n ['milliseconds', ToIntegerWithoutRounding],\n ['microseconds', ToIntegerWithoutRounding],\n ['nanoseconds', ToIntegerWithoutRounding],\n ['era', ToString],\n ['eraYear', ToInteger],\n ['offset', ToString]\n]);\nconst BUILTIN_DEFAULTS = new Map([\n ['hour', 0],\n ['minute', 0],\n ['second', 0],\n ['millisecond', 0],\n ['microsecond', 0],\n ['nanosecond', 0]\n]);\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n ['years', 'year', 'date'],\n ['months', 'month', 'date'],\n ['weeks', 'week', 'date'],\n ['days', 'day', 'date'],\n ['hours', 'hour', 'time'],\n ['minutes', 'minute', 'time'],\n ['seconds', 'second', 'time'],\n ['milliseconds', 'millisecond', 'time'],\n ['microseconds', 'microsecond', 'time'],\n ['nanoseconds', 'nanosecond', 'time']\n];\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]]));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\nimport * as PARSE from './regex';\nconst IntlDateTimeFormatEnUsCache = new Map();\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) {\n let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n if (instance === undefined) {\n instance = new IntlDateTimeFormat('en-us', {\n timeZone: StringCtor(timeZoneIdentifier),\n hour12: false,\n era: 'short',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n }\n return instance;\n}\nexport function IsTemporalInstant(item) {\n return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\nexport function IsTemporalTimeZone(item) {\n return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item) {\n return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item) {\n return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item) {\n return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item) {\n return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY));\n}\nexport function IsTemporalDateTime(item) {\n return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND);\n}\nexport function IsTemporalYearMonth(item) {\n return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item) {\n return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item) {\n return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectObjectWithCalendarOrTimeZone(item) {\n if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n throw new TypeError('with() does not support a calendar or timeZone property');\n }\n if (item.calendar !== undefined) {\n throw new TypeError('with() does not support a calendar property');\n }\n if (item.timeZone !== undefined) {\n throw new TypeError('with() does not support a timeZone property');\n }\n}\nfunction ParseTemporalTimeZone(stringIdent) {\n let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n if (ianaName)\n return ianaName;\n if (z)\n return 'UTC';\n return offset; // if !ianaName && !z then offset must be present\n}\nfunction FormatCalendarAnnotation(id, showCalendar) {\n if (showCalendar === 'never')\n return '';\n if (showCalendar === 'auto' && id === 'iso8601')\n return '';\n return `[u-ca=${id}]`;\n}\nfunction ParseISODateTime(isoString) {\n // ZDT is the superset of fields for every other Temporal type\n const match = PARSE.zoneddatetime.exec(isoString);\n if (!match)\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n const year = ToInteger(yearString);\n const month = ToInteger(match[2] || match[4]);\n const day = ToInteger(match[3] || match[5]);\n const hour = ToInteger(match[6]);\n const hasTime = match[6] !== undefined;\n const minute = ToInteger(match[7] || match[10]);\n let second = ToInteger(match[8] || match[11]);\n if (second === 60)\n second = 59;\n const fraction = (match[9] || match[12]) + '000000000';\n const millisecond = ToInteger(fraction.slice(0, 3));\n const microsecond = ToInteger(fraction.slice(3, 6));\n const nanosecond = ToInteger(fraction.slice(6, 9));\n let offset;\n let z = false;\n if (match[13]) {\n offset = undefined;\n z = true;\n }\n else if (match[14] && match[15]) {\n const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n const offsetHours = match[15] || '00';\n const offsetMinutes = match[16] || '00';\n const offsetSeconds = match[17] || '00';\n let offsetFraction = match[18] || '0';\n offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n if (+offsetFraction) {\n while (offsetFraction.endsWith('0'))\n offsetFraction = offsetFraction.slice(0, -1);\n offset += `:${offsetSeconds}.${offsetFraction}`;\n }\n else if (+offsetSeconds) {\n offset += `:${offsetSeconds}`;\n }\n if (offset === '-00:00')\n offset = '+00:00';\n }\n let ianaName = match[19];\n if (ianaName) {\n try {\n // Canonicalize name if it is an IANA link name or is capitalized wrong\n ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString();\n }\n catch {\n // Not an IANA name, may be a custom ID, pass through unchanged\n }\n }\n const calendar = match[20];\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n return {\n year,\n month,\n day,\n hasTime,\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond,\n ianaName,\n offset,\n z,\n calendar\n };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.z && !result.offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.ianaName)\n throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString) {\n const match = PARSE.time.exec(isoString);\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (match) {\n hour = ToInteger(match[1]);\n minute = ToInteger(match[2] || match[5]);\n second = ToInteger(match[3] || match[6]);\n if (second === 60)\n second = 59;\n const fraction = (match[4] || match[7]) + '000000000';\n millisecond = ToInteger(fraction.slice(0, 3));\n microsecond = ToInteger(fraction.slice(3, 6));\n nanosecond = ToInteger(fraction.slice(6, 9));\n calendar = match[15];\n }\n else {\n let z, hasTime;\n ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseISODateTime(isoString));\n if (!hasTime)\n throw new RangeError(`time is missing in string: ${isoString}`);\n if (z)\n throw new RangeError('Z designator not supported for PlainTime');\n }\n // if it's a date-time string, OK\n if (/[tT ][0-9][0-9]/.test(isoString)) {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n // slow but non-grammar-dependent way to ensure that time-only strings that\n // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to\n // assertion in spec text\n try {\n const { month, day } = ParseTemporalMonthDayString(isoString);\n RejectISODate(1972, month, day);\n }\n catch {\n try {\n const { year, month } = ParseTemporalYearMonthString(isoString);\n RejectISODate(year, month, 1);\n }\n catch {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n }\n throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString) {\n const match = PARSE.yearmonth.exec(isoString);\n let year, month, calendar, referenceISODay;\n if (match) {\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n year = ToInteger(yearString);\n month = ToInteger(match[2]);\n calendar = match[3];\n }\n else {\n let z;\n ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainYearMonth');\n }\n return { year, month, calendar, referenceISODay };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString) {\n const match = PARSE.monthday.exec(isoString);\n let month, day, calendar, referenceISOYear;\n if (match) {\n month = ToInteger(match[1]);\n day = ToInteger(match[2]);\n }\n else {\n let z;\n ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainMonthDay');\n }\n return { month, day, calendar, referenceISOYear };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent) {\n try {\n let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent);\n if (canonicalIdent)\n return { ianaName: canonicalIdent.toString() };\n }\n catch {\n // fall through\n }\n try {\n // Try parsing ISO string instead\n const result = ParseISODateTime(stringIdent);\n if (result.z || result.offset || result.ianaName) {\n return result;\n }\n }\n catch {\n // fall through\n }\n throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString) {\n const match = PARSE.duration.exec(isoString);\n if (!match)\n throw new RangeError(`invalid duration: ${isoString}`);\n if (match.slice(2).every((element) => element === undefined)) {\n throw new RangeError(`invalid duration: ${isoString}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n const years = ToInteger(match[2]) * sign;\n const months = ToInteger(match[3]) * sign;\n const weeks = ToInteger(match[4]) * sign;\n const days = ToInteger(match[5]) * sign;\n const hours = ToInteger(match[6]) * sign;\n let fHours = match[7];\n let minutes = ToInteger(match[8]) * sign;\n let fMinutes = match[9];\n let seconds = ToInteger(match[10]) * sign;\n const fSeconds = match[11] + '000000000';\n let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign;\n let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign;\n let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign;\n fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0;\n fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0;\n ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds));\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString) {\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString);\n if (!z && !offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n // At least one of z or offset is defined, but TS doesn't seem to understand\n // that we only use offset if z is not defined (and thus offset must be defined).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs));\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n return epochNs;\n}\nexport function RegulateISODate(yearParam, monthParam, dayParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, day);\n break;\n case 'constrain':\n ({ year, month, day } = ConstrainISODate(year, month, day));\n break;\n }\n return { year, month, day };\n}\nexport function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n switch (overflow) {\n case 'reject':\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n break;\n case 'constrain':\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond));\n break;\n }\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RegulateISOYearMonth(yearParam, monthParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n const referenceISODay = 1;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, referenceISODay);\n break;\n case 'constrain':\n ({ year, month } = ConstrainISODate(year, month));\n break;\n }\n return { year, month };\n}\nfunction DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) {\n let fHours = fHoursParam;\n let minutes = minutesParam;\n let fMinutes = fMinutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (fHours !== 0) {\n [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const mins = fHours * 60;\n minutes = MathTrunc(mins);\n fMinutes = mins % 1;\n }\n if (fMinutes !== 0) {\n [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const secs = fMinutes * 60;\n seconds = MathTrunc(secs);\n const fSeconds = secs % 1;\n if (fSeconds !== 0) {\n const mils = fSeconds * 1000;\n milliseconds = MathTrunc(mils);\n const fMilliseconds = mils % 1;\n if (fMilliseconds !== 0) {\n const mics = fMilliseconds * 1000;\n microseconds = MathTrunc(mics);\n const fMicroseconds = mics % 1;\n if (fMicroseconds !== 0) {\n const nans = fMicroseconds * 1000;\n nanoseconds = MathTrunc(nans);\n }\n }\n }\n }\n return { minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalDurationRecord(item) {\n if (!IsObject(item)) {\n return ParseTemporalDurationString(ToString(item));\n }\n if (IsTemporalDuration(item)) {\n return {\n years: GetSlot(item, YEARS),\n months: GetSlot(item, MONTHS),\n weeks: GetSlot(item, WEEKS),\n days: GetSlot(item, DAYS),\n hours: GetSlot(item, HOURS),\n minutes: GetSlot(item, MINUTES),\n seconds: GetSlot(item, SECONDS),\n milliseconds: GetSlot(item, MILLISECONDS),\n microseconds: GetSlot(item, MICROSECONDS),\n nanoseconds: GetSlot(item, NANOSECONDS)\n };\n }\n const result = {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n let partial = ToTemporalPartialDurationRecord(item);\n for (const property of DURATION_FIELDS) {\n const value = partial[property];\n if (value !== undefined) {\n result[property] = value;\n }\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalPartialDurationRecord(temporalDurationLike) {\n if (!IsObject(temporalDurationLike)) {\n throw new TypeError('invalid duration-like');\n }\n const result = {\n years: undefined,\n months: undefined,\n weeks: undefined,\n days: undefined,\n hours: undefined,\n minutes: undefined,\n seconds: undefined,\n milliseconds: undefined,\n microseconds: undefined,\n nanoseconds: undefined\n };\n let any = false;\n for (const property of DURATION_FIELDS) {\n const value = temporalDurationLike[property];\n if (value !== undefined) {\n any = true;\n result[property] = ToIntegerWithoutRounding(value);\n }\n }\n if (!any) {\n throw new TypeError('invalid duration-like');\n }\n return result;\n}\nfunction ToLimitedTemporalDuration(item, disallowedProperties) {\n let record = ToTemporalDurationRecord(item);\n for (const property of disallowedProperties) {\n if (record[property] !== 0) {\n throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);\n }\n }\n return record;\n}\nexport function ToTemporalOverflow(options) {\n if (options === undefined)\n return 'constrain';\n return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\nexport function ToTemporalDisambiguation(options) {\n if (options === undefined)\n return 'compatible';\n return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\nexport function ToTemporalRoundingMode(options, fallback) {\n return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback);\n}\nfunction NegateTemporalRoundingMode(roundingMode) {\n switch (roundingMode) {\n case 'ceil':\n return 'floor';\n case 'floor':\n return 'ceil';\n default:\n return roundingMode;\n }\n}\nexport function ToTemporalOffset(options, fallback) {\n if (options === undefined)\n return fallback;\n return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\nexport function ToShowCalendarOption(options) {\n return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto');\n}\nexport function ToShowTimeZoneNameOption(options) {\n return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto');\n}\nexport function ToShowOffsetOption(options) {\n return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\nexport function ToTemporalRoundingIncrement(options, dividend, inclusive) {\n let maximum = Infinity;\n if (dividend !== undefined)\n maximum = dividend;\n if (!inclusive && dividend !== undefined)\n maximum = dividend > 1 ? dividend - 1 : 1;\n const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1);\n if (dividend !== undefined && dividend % increment !== 0) {\n throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n }\n return increment;\n}\nexport function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) {\n const maximumIncrements = {\n year: undefined,\n month: undefined,\n week: undefined,\n day: undefined,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n}\nexport function ToSecondsStringPrecision(options) {\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n if (smallestUnit === 'hour') {\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains.\n // Maybe this is fixed in later TS versions?\n if (c === 'time' && s !== 'hour') {\n allowed.push(s, p);\n }\n return allowed;\n }, []);\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n switch (smallestUnit) {\n case 'minute':\n return { precision: 'minute', unit: 'minute', increment: 1 };\n case 'second':\n return { precision: 0, unit: 'second', increment: 1 };\n case 'millisecond':\n return { precision: 3, unit: 'millisecond', increment: 1 };\n case 'microsecond':\n return { precision: 6, unit: 'microsecond', increment: 1 };\n case 'nanosecond':\n return { precision: 9, unit: 'nanosecond', increment: 1 };\n default: // fall through if option not given\n }\n let digits = options.fractionalSecondDigits;\n if (digits === undefined)\n digits = 'auto';\n if (typeof digits !== 'number') {\n const stringDigits = ToString(digits);\n if (stringDigits === 'auto')\n return { precision: 'auto', unit: 'nanosecond', increment: 1 };\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`);\n }\n if (NumberIsNaN(digits) || digits < 0 || digits > 9) {\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n const precision = MathFloor(digits);\n switch (precision) {\n case 0:\n return { precision, unit: 'second', increment: 1 };\n case 1:\n case 2:\n case 3:\n return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n case 4:\n case 5:\n case 6:\n return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n case 7:\n case 8:\n case 9:\n return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n default:\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n}\nexport const REQUIRED = Symbol('~required~');\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) {\n const allowedSingular = [];\n for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n if (unitGroup === 'datetime' || unitGroup === category) {\n allowedSingular.push(singular);\n }\n }\n allowedSingular.push(...extraValues);\n let defaultVal = requiredOrDefault;\n if (defaultVal === REQUIRED) {\n defaultVal = undefined;\n }\n else if (defaultVal !== undefined) {\n allowedSingular.push(defaultVal);\n }\n const allowedValues = [\n ...allowedSingular\n ];\n for (const singular of allowedSingular) {\n const plural = PLURAL_FOR.get(singular);\n if (plural !== undefined)\n allowedValues.push(plural);\n }\n let retval = GetOption(options, key, allowedValues, defaultVal);\n if (retval === undefined && requiredOrDefault === REQUIRED) {\n throw new RangeError(`${key} is required`);\n }\n // Coerce any plural units into their singular form\n if (SINGULAR_FOR.has(retval)) {\n // We just has-checked this, but tsc doesn't understand that.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(retval);\n }\n return retval;\n}\nexport function ToRelativeTemporalObject(options) {\n const relativeTo = options.relativeTo;\n if (relativeTo === undefined)\n return relativeTo;\n let offsetBehaviour = 'option';\n let matchMinutes = false;\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n if (IsObject(relativeTo)) {\n if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo))\n return relativeTo;\n if (IsTemporalDateTime(relativeTo))\n return TemporalDateTimeToDate(relativeTo);\n calendar = GetTemporalCalendarWithISODefault(relativeTo);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n const dateOptions = ObjectCreate(null);\n dateOptions.overflow = 'constrain';\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions));\n // The `offset` and `timeZone` properties only exist on ZonedDateTime (or\n // ZonedDateTimeLike-property bags). The assertions below are used to avoid\n // TS errors while not diverging runtime code from proposal-temporal.\n offset = relativeTo.offset;\n if (offset === undefined)\n offsetBehaviour = 'wall';\n timeZone = relativeTo.timeZone;\n }\n else {\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n ParseISODateTime(ToString(relativeTo)));\n if (ianaName)\n timeZone = ianaName;\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinutes = true;\n }\n if (timeZone !== undefined) {\n timeZone = ToTemporalTimeZone(timeZone);\n let offsetNs = 0;\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(ToString(offset));\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n }\n return CreateTemporalDate(year, month, day, calendar);\n}\nexport function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n for (const [prop, v] of [\n ['years', years],\n ['months', months],\n ['weeks', weeks],\n ['days', days],\n ['hours', hours],\n ['minutes', minutes],\n ['seconds', seconds],\n ['milliseconds', milliseconds],\n ['microseconds', microseconds],\n ['nanoseconds', nanoseconds]\n ]) {\n if (v !== 0) {\n // All the above keys are definitely in SINGULAR_FOR\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(prop);\n }\n }\n return 'nanosecond';\n}\nexport function LargerOfTwoTemporalUnits(unit1, unit2) {\n if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2))\n return unit2;\n return unit1;\n}\nfunction MergeLargestUnitOption(optionsParam, largestUnit) {\n let options = optionsParam;\n if (options === undefined)\n options = ObjectCreate(null);\n return ObjectAssign(ObjectCreate(null), options, { largestUnit });\n}\nexport function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) {\n const result = ObjectCreate(null);\n let any = false;\n for (const property of fields) {\n let value = bag[property];\n if (value !== undefined) {\n any = true;\n if (BUILTIN_CASTS.has(property)) {\n // We just has-checked this map access, so there will definitely be a\n // value.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n value = BUILTIN_CASTS.get(property)(value);\n }\n result[property] = value;\n }\n else if (requiredFields !== 'partial') {\n // TODO: using .call in this way is not correctly type-checked by tsc.\n // We might need a type-safe Call wrapper?\n if (ArrayIncludes.call(requiredFields, property)) {\n throw new TypeError(`required property '${property}' missing or undefined`);\n }\n value = BUILTIN_DEFAULTS.get(property);\n result[property] = value;\n }\n }\n if (requiredFields === 'partial' && !any) {\n throw new TypeError(emptySourceErrorMessage);\n }\n if ((result.era === undefined) !== (result.eraYear === undefined)) {\n throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n }\n return result;\n}\nexport function ToTemporalTimeRecord(bag, completeness = 'complete') {\n // NOTE: Field order here is important.\n const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n const result = {};\n for (const field of fields) {\n const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n if (valueDesc !== undefined) {\n result[field] = valueDesc.value;\n }\n else if (completeness === 'complete') {\n result[field] = 0;\n }\n }\n return result;\n}\nexport function ToTemporalDate(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalDate(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarDateFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n if (z)\n throw new RangeError('Z designator not supported for PlainDate');\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n return new TemporalPlainDate(year, month, day, calendar); // include validation\n}\nexport function InterpretTemporalDateTimeFields(calendar, fields, options) {\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n const overflow = ToTemporalOverflow(options);\n const date = CalendarDateFromFields(calendar, fields, options);\n const year = GetSlot(date, ISO_YEAR);\n const month = GetSlot(date, ISO_MONTH);\n const day = GetSlot(date, ISO_DAY);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function ToTemporalDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalDateTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDate(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseTemporalDateTimeString(ToString(item)));\n if (z)\n throw new RangeError('Z designator not supported for PlainDateTime');\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n }\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function ToTemporalDuration(item) {\n if (IsTemporalDuration(item))\n return item;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function ToTemporalInstant(item) {\n if (IsTemporalInstant(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n }\n const ns = ParseTemporalInstant(ToString(item));\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(ns);\n}\nexport function ToTemporalMonthDay(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalMonthDay(item))\n return item;\n let calendar, calendarAbsent;\n if (HasSlot(item, CALENDAR)) {\n calendar = GetSlot(item, CALENDAR);\n calendarAbsent = false;\n }\n else {\n let maybeStringCalendar = item.calendar;\n calendarAbsent = maybeStringCalendar === undefined;\n if (maybeStringCalendar === undefined)\n maybeStringCalendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(maybeStringCalendar);\n }\n // HasSlot above adjusts the type of 'item' to include\n // TypesWithCalendarUnits, which causes type-inference failures below.\n // This is probably indicative of problems with HasSlot's typing.\n item = item;\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n // Callers who omit the calendar are not writing calendar-independent\n // code. In that case, `monthCode`/`year` can be omitted; `month` and\n // `day` are sufficient. Add a `year` to satisfy calendar validation.\n if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n fields.year = 1972;\n }\n return CalendarMonthDayFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item));\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISOYear === undefined) {\n RejectISODate(1972, month, day);\n return CreateTemporalMonthDay(month, day, calendar);\n }\n const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n return CalendarMonthDayFromFields(calendar, result);\n}\nexport function ToTemporalTime(itemParam, overflow = 'constrain') {\n let item = itemParam;\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n if (ToString(calendar) !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n }\n else {\n ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item)));\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar !== undefined && calendar !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n }\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function ToTemporalYearMonth(item, options) {\n if (IsObject(item)) {\n if (IsTemporalYearMonth(item))\n return item;\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item));\n // TODO: replace with ternary?\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISODay === undefined) {\n RejectISODate(year, month, 1);\n return CreateTemporalYearMonth(year, month, calendar);\n }\n const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n return CalendarYearMonthFromFields(calendar, result);\n}\nexport function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n // Simple case: ISO string without a TZ offset (or caller wants to ignore\n // the offset), so just convert DateTime to Instant in the given time zone\n const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n }\n // The caller wants the offset to always win ('use') OR the caller is OK\n // with the offset winning ('prefer' or 'reject') as long as it's valid\n // for this timezone and date/time.\n if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n // Calculate the instant for the input's date/time and offset\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('ZonedDateTime outside of supported range');\n return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n }\n // \"prefer\" or \"reject\"\n const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n for (const candidate of possibleInstants) {\n const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand'));\n if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n return GetSlot(candidate, EPOCHNANOSECONDS);\n }\n }\n // the user-provided offset doesn't match any instants for this time\n // zone and date/time.\n if (offsetOpt === 'reject') {\n const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n // toString (which is invoked by Node when using template literals directly).\n // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n }\n // fall through: offsetOpt === 'prefer', but the offset doesn't match\n // so fall back to use the time zone instead.\n const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n}\nexport function ToTemporalZonedDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar;\n let matchMinute = false;\n let offsetBehaviour = 'option';\n if (IsObject(item)) {\n if (IsTemporalZonedDateTime(item))\n return item;\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset');\n const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n timeZone = ToTemporalTimeZone(fields.timeZone);\n offset = fields.offset;\n if (offset === undefined) {\n offsetBehaviour = 'wall';\n }\n else {\n offset = ToString(offset);\n }\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n ParseTemporalZonedDateTimeString(ToString(item)));\n if (!ianaName)\n throw new RangeError('time zone ID required in brackets');\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n timeZone = new TemporalTimeZone(ianaName);\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinute = true; // ISO strings may specify offset with less precision\n }\n let offsetNs = 0;\n // The code above guarantees that if offsetBehaviour === 'option', then\n // `offset` is not undefined.\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(offset);\n const disambiguation = ToTemporalDisambiguation(options);\n const offsetOpt = ToTemporalOffset(options, 'reject');\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nexport function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) {\n RejectISODate(isoYear, isoMonth, isoDay);\n RejectDateRange(isoYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, DATE_BRAND, true);\n if (DEBUG) {\n ObjectDefineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) {\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n const result = ObjectCreate(TemporalPlainDate.prototype);\n CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n return result;\n}\nexport function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) {\n RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_HOUR, h);\n SetSlot(result, ISO_MINUTE, min);\n SetSlot(result, ISO_SECOND, s);\n SetSlot(result, ISO_MILLISECOND, ms);\n SetSlot(result, ISO_MICROSECOND, µs);\n SetSlot(result, ISO_NANOSECOND, ns);\n SetSlot(result, CALENDAR, calendar);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) {\n const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const result = ObjectCreate(TemporalPlainDateTime.prototype);\n CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n return result;\n}\nexport function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) {\n RejectISODate(referenceISOYear, isoMonth, isoDay);\n RejectDateRange(referenceISOYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_YEAR, referenceISOYear);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, MONTH_DAY_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) {\n const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n return result;\n}\nexport function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) {\n RejectISODate(isoYear, isoMonth, referenceISODay);\n RejectYearMonthRange(isoYear, isoMonth);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, referenceISODay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, YEAR_MONTH_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) {\n const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n return result;\n}\nexport function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) {\n ValidateEpochNanoseconds(epochNanoseconds);\n CreateSlots(result);\n SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n SetSlot(result, TIME_ZONE, timeZone);\n SetSlot(result, CALENDAR, calendar);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n SetSlot(result, INSTANT, instant);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) {\n const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n const result = ObjectCreate(TemporalZonedDateTime.prototype);\n CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n return result;\n}\nexport function GetISO8601Calendar() {\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n return new TemporalCalendar('iso8601');\n}\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields(calendar, fieldNamesParam) {\n let fieldNames = fieldNamesParam;\n if (calendar.fields) {\n fieldNames = calendar.fields(fieldNames);\n }\n const result = [];\n for (const name of fieldNames) {\n if (typeof name !== 'string')\n throw new TypeError('bad return from calendar.fields()');\n ArrayPrototypePush.call(result, name);\n }\n return result;\n}\nexport function CalendarMergeFields(calendar, fields, additionalFields) {\n const calMergeFields = calendar.mergeFields;\n if (!calMergeFields) {\n return { ...fields, ...additionalFields };\n }\n const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]);\n if (!IsObject(result))\n throw new TypeError('bad return from calendar.mergeFields()');\n return result;\n}\nexport function CalendarDateAdd(calendar, date, duration, options, dateAddParam) {\n let dateAdd = dateAddParam;\n if (dateAdd === undefined) {\n dateAdd = calendar.dateAdd;\n }\n const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nfunction CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) {\n let dateUntil = dateUntilParam;\n if (dateUntil === undefined) {\n dateUntil = calendar.dateUntil;\n }\n const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n if (!IsTemporalDuration(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYear(calendar, dateLike) {\n const result = calendar.year(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar year result must be an integer');\n }\n return ToIntegerThrowOnInfinity(result);\n}\nexport function CalendarMonth(calendar, dateLike) {\n const result = calendar.month(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar month result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarMonthCode(calendar, dateLike) {\n const result = calendar.monthCode(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar monthCode result must be a string');\n }\n return ToString(result);\n}\nexport function CalendarDay(calendar, dateLike) {\n const result = calendar.day(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar day result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarEra(calendar, dateLike) {\n let result = calendar.era(dateLike);\n if (result !== undefined) {\n result = ToString(result);\n }\n return result;\n}\nexport function CalendarEraYear(calendar, dateLike) {\n let result = calendar.eraYear(dateLike);\n if (result !== undefined) {\n result = ToIntegerThrowOnInfinity(result);\n }\n return result;\n}\nexport function CalendarDayOfWeek(calendar, dateLike) {\n return calendar.dayOfWeek(dateLike);\n}\nexport function CalendarDayOfYear(calendar, dateLike) {\n return calendar.dayOfYear(dateLike);\n}\nexport function CalendarWeekOfYear(calendar, dateLike) {\n return calendar.weekOfYear(dateLike);\n}\nexport function CalendarDaysInWeek(calendar, dateLike) {\n return calendar.daysInWeek(dateLike);\n}\nexport function CalendarDaysInMonth(calendar, dateLike) {\n return calendar.daysInMonth(dateLike);\n}\nexport function CalendarDaysInYear(calendar, dateLike) {\n return calendar.daysInYear(dateLike);\n}\nexport function CalendarMonthsInYear(calendar, dateLike) {\n return calendar.monthsInYear(dateLike);\n}\nexport function CalendarInLeapYear(calendar, dateLike) {\n return calendar.inLeapYear(dateLike);\n}\nexport function ToTemporalCalendar(calendarLikeParam) {\n let calendarLike = calendarLikeParam;\n if (IsObject(calendarLike)) {\n if (HasSlot(calendarLike, CALENDAR))\n return GetSlot(calendarLike, CALENDAR);\n if (!('calendar' in calendarLike))\n return calendarLike;\n calendarLike = calendarLike.calendar;\n if (IsObject(calendarLike) && !('calendar' in calendarLike))\n return calendarLike;\n }\n const identifier = ToString(calendarLike);\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n if (IsBuiltinCalendar(identifier))\n return new TemporalCalendar(identifier);\n let calendar;\n try {\n ({ calendar } = ParseISODateTime(identifier));\n }\n catch {\n throw new RangeError(`Invalid calendar: ${identifier}`);\n }\n if (!calendar)\n calendar = 'iso8601';\n return new TemporalCalendar(calendar);\n}\nfunction GetTemporalCalendarWithISODefault(item) {\n if (HasSlot(item, CALENDAR))\n return GetSlot(item, CALENDAR);\n const { calendar } = item;\n if (calendar === undefined)\n return GetISO8601Calendar();\n return ToTemporalCalendar(calendar);\n}\nexport function CalendarEquals(one, two) {\n if (one === two)\n return true;\n const cal1 = ToString(one);\n const cal2 = ToString(two);\n return cal1 === cal2;\n}\nexport function ConsolidateCalendars(one, two) {\n if (one === two)\n return two;\n const sOne = ToString(one);\n const sTwo = ToString(two);\n if (sOne === sTwo || sOne === 'iso8601') {\n return two;\n }\n else if (sTwo === 'iso8601') {\n return one;\n }\n else {\n throw new RangeError('irreconcilable calendars');\n }\n}\nexport function CalendarDateFromFields(calendar, fields, options) {\n const result = calendar.dateFromFields(fields, options);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYearMonthFromFields(calendar, fields, options) {\n const result = calendar.yearMonthFromFields(fields, options);\n if (!IsTemporalYearMonth(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarMonthDayFromFields(calendar, fields, options) {\n const result = calendar.monthDayFromFields(fields, options);\n if (!IsTemporalMonthDay(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function ToTemporalTimeZone(temporalTimeZoneLikeParam) {\n let temporalTimeZoneLike = temporalTimeZoneLikeParam;\n if (IsObject(temporalTimeZoneLike)) {\n if (IsTemporalZonedDateTime(temporalTimeZoneLike))\n return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n if (!('timeZone' in temporalTimeZoneLike))\n return temporalTimeZoneLike;\n temporalTimeZoneLike = temporalTimeZoneLike.timeZone;\n if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) {\n return temporalTimeZoneLike;\n }\n }\n const identifier = ToString(temporalTimeZoneLike);\n const timeZone = ParseTemporalTimeZone(identifier);\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(timeZone);\n}\nexport function TimeZoneEquals(one, two) {\n if (one === two)\n return true;\n const tz1 = ToString(one);\n const tz2 = ToString(two);\n return tz1 === tz2;\n}\nexport function TemporalDateTimeToDate(dateTime) {\n return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR));\n}\nexport function TemporalDateTimeToTime(dateTime) {\n const Time = GetIntrinsic('%Temporal.PlainTime%');\n return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n}\nexport function GetOffsetNanosecondsFor(timeZone, instant) {\n let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor;\n if (typeof getOffsetNanosecondsFor !== 'function') {\n throw new TypeError('getOffsetNanosecondsFor not callable');\n }\n const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]);\n if (typeof offsetNs !== 'number') {\n throw new TypeError('bad return from getOffsetNanosecondsFor');\n }\n if (!IsInteger(offsetNs) || MathAbs(offsetNs) > 86400e9) {\n throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n }\n return offsetNs;\n}\nexport function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) {\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n return FormatTimeZoneOffsetString(offsetNs);\n}\nexport function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) {\n const ns = GetSlot(instant, EPOCHNANOSECONDS);\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs));\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) {\n const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\nfunction DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const numInstants = possibleInstants.length;\n if (numInstants === 1)\n return possibleInstants[0];\n if (numInstants) {\n switch (disambiguation) {\n case 'compatible':\n // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n case 'earlier':\n return possibleInstants[0];\n case 'later':\n return possibleInstants[numInstants - 1];\n case 'reject': {\n throw new RangeError('multiple instants found');\n }\n }\n }\n const year = GetSlot(dateTime, ISO_YEAR);\n const month = GetSlot(dateTime, ISO_MONTH);\n const day = GetSlot(dateTime, ISO_DAY);\n const hour = GetSlot(dateTime, ISO_HOUR);\n const minute = GetSlot(dateTime, ISO_MINUTE);\n const second = GetSlot(dateTime, ISO_SECOND);\n const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utcns === null)\n throw new RangeError('DateTime outside of supported range');\n const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n const nanoseconds = offsetAfter - offsetBefore;\n switch (disambiguation) {\n case 'earlier': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined);\n const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar);\n return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n }\n case 'compatible':\n // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n case 'later': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined);\n const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar);\n const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n return possible[possible.length - 1];\n }\n case 'reject': {\n throw new RangeError('no such instant found');\n }\n }\n}\nfunction GetPossibleInstantsFor(timeZone, dateTime) {\n const possibleInstants = timeZone.getPossibleInstantsFor(dateTime);\n const result = [];\n for (const instant of possibleInstants) {\n if (!IsTemporalInstant(instant)) {\n throw new TypeError('bad return from getPossibleInstantsFor');\n }\n ArrayPrototypePush.call(result, instant);\n }\n return result;\n}\nexport function ISOYearString(year) {\n let yearString;\n if (year < 0 || year > 9999) {\n const sign = year < 0 ? '-' : '+';\n const yearNumber = MathAbs(year);\n yearString = sign + `000000${yearNumber}`.slice(-6);\n }\n else {\n yearString = `0000${year}`.slice(-4);\n }\n return yearString;\n}\nexport function ISODateTimePartString(part) {\n return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) {\n if (precision === 'minute')\n return '';\n const secs = `:${ISODateTimePartString(second)}`;\n let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n let fraction;\n if (precision === 'auto') {\n if (fractionNumber === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n }\n else {\n if (precision === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n }\n return `${secs}.${fraction}`;\n}\nexport function TemporalInstantToString(instant, timeZone, precision) {\n let outputTimeZone = timeZone;\n if (outputTimeZone === undefined) {\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n outputTimeZone = new TemporalTimeZone('UTC');\n }\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let timeZoneString = 'Z';\n if (timeZone !== undefined) {\n const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n }\n return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\nexport function TemporalDurationToString(duration, precision = 'auto', options = undefined) {\n function formatNumber(num) {\n if (num <= NumberMaxSafeInteger)\n return num.toString(10);\n return JSBI.BigInt(num).toString(10);\n }\n const years = GetSlot(duration, YEARS);\n const months = GetSlot(duration, MONTHS);\n const weeks = GetSlot(duration, WEEKS);\n const days = GetSlot(duration, DAYS);\n const hours = GetSlot(duration, HOURS);\n const minutes = GetSlot(duration, MINUTES);\n let seconds = GetSlot(duration, SECONDS);\n let ms = GetSlot(duration, MILLISECONDS);\n let µs = GetSlot(duration, MICROSECONDS);\n let ns = GetSlot(duration, NANOSECONDS);\n const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({\n seconds,\n milliseconds: ms,\n microseconds: µs,\n nanoseconds: ns\n } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n }\n const dateParts = [];\n if (years)\n dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n if (months)\n dateParts.push(`${formatNumber(MathAbs(months))}M`);\n if (weeks)\n dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n if (days)\n dateParts.push(`${formatNumber(MathAbs(days))}D`);\n const timeParts = [];\n if (hours)\n timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n if (minutes)\n timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n const secondParts = [];\n let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n let nsBigInt, µsBigInt, msBigInt, secondsBigInt;\n ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n const fraction = MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n let decimalPart;\n if (precision === 'auto') {\n if (fraction !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0');\n while (decimalPart[decimalPart.length - 1] === '0') {\n decimalPart = decimalPart.slice(0, -1);\n }\n }\n }\n else if (precision !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n }\n if (decimalPart)\n secondParts.unshift('.', decimalPart);\n if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n secondParts.unshift(abs(secondsBigInt).toString());\n }\n if (secondParts.length)\n timeParts.push(`${secondParts.join('')}S`);\n if (timeParts.length)\n timeParts.unshift('T');\n if (!dateParts.length && !timeParts.length)\n return 'PT0S';\n return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\nexport function TemporalDateToString(date, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(date, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n const calendarID = ToString(GetSlot(date, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${year}-${month}-${day}${calendar}`;\n}\nexport function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) {\n let year = GetSlot(dateTime, ISO_YEAR);\n let month = GetSlot(dateTime, ISO_MONTH);\n let day = GetSlot(dateTime, ISO_DAY);\n let hour = GetSlot(dateTime, ISO_HOUR);\n let minute = GetSlot(dateTime, ISO_MINUTE);\n let second = GetSlot(dateTime, ISO_SECOND);\n let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const yearString = ISOYearString(year);\n const monthString = ISODateTimePartString(month);\n const dayString = ISODateTimePartString(day);\n const hourString = ISODateTimePartString(hour);\n const minuteString = ISODateTimePartString(minute);\n const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n const calendarID = ToString(GetSlot(dateTime, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\nexport function TemporalMonthDayToString(monthDay, showCalendar = 'auto') {\n const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n let resultString = `${month}-${day}`;\n const calendar = GetSlot(monthDay, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n resultString = `${year}-${resultString}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n let resultString = `${year}-${month}`;\n const calendar = GetSlot(yearMonth, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n resultString += `-${day}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) {\n let instant = GetSlot(zdt, INSTANT);\n if (options) {\n const { unit, increment, roundingMode } = options;\n const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n instant = new TemporalInstant(ns);\n }\n const tz = GetSlot(zdt, TIME_ZONE);\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n if (showOffset !== 'never') {\n const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n result += FormatISOTimeZoneOffsetString(offsetNs);\n }\n if (showTimeZone !== 'never')\n result += `[${tz}]`;\n const calendarID = ToString(GetSlot(zdt, CALENDAR));\n result += FormatCalendarAnnotation(calendarID, showCalendar);\n return result;\n}\nexport function TestTimeZoneOffsetString(string) {\n return OFFSET.test(StringCtor(string));\n}\nexport function ParseTimeZoneOffsetString(string) {\n const match = OFFSET.exec(StringCtor(string));\n if (!match) {\n throw new RangeError(`invalid time zone offset: ${string}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n const hours = +match[2];\n const minutes = +(match[3] || 0);\n const seconds = +(match[4] || 0);\n const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) {\n if (TestTimeZoneOffsetString(timeZoneIdentifier)) {\n const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n return FormatTimeZoneOffsetString(offsetNs);\n }\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n return formatter.resolvedOptions().timeZone;\n}\nexport function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) {\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utc === null)\n throw new RangeError('Date outside of supported range');\n return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam) {\n const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n const nanoseconds = offsetNanoseconds % 1e9;\n const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n const secondString = ISODateTimePartString(seconds);\n let post = '';\n if (nanoseconds) {\n let fraction = `${nanoseconds}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n post = `:${secondString}.${fraction}`;\n }\n else if (seconds) {\n post = `:${secondString}`;\n }\n return `${sign}${hourString}:${minuteString}${post}`;\n}\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam) {\n let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand'));\n const sign = offsetNanoseconds < 0 ? '-' : '+';\n offsetNanoseconds = MathAbs(offsetNanoseconds);\n const minutes = (offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n // Note: Date.UTC() interprets one and two-digit years as being in the\n // 20th century, so don't use it\n const legacyDate = new Date();\n legacyDate.setUTCHours(hour, minute, second, millisecond);\n legacyDate.setUTCFullYear(year, month - 1, day);\n const ms = legacyDate.getTime();\n if (NumberIsNaN(ms))\n return null;\n let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX))\n return null;\n return ns;\n}\nfunction GetISOPartsFromEpoch(epochNanoseconds) {\n const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n let epochMilliseconds = JSBI.toNumber(quotient);\n let nanos = JSBI.toNumber(remainder);\n if (nanos < 0) {\n nanos += 1e6;\n epochMilliseconds -= 1;\n }\n const microsecond = MathFloor(nanos / 1e3) % 1e3;\n const nanosecond = nanos % 1e3;\n const item = new Date(epochMilliseconds);\n const year = item.getUTCFullYear();\n const month = item.getUTCMonth() + 1;\n const day = item.getUTCDate();\n const hour = item.getUTCHours();\n const minute = item.getUTCMinutes();\n const second = item.getUTCSeconds();\n const millisecond = item.getUTCMilliseconds();\n return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) {\n const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction maxJSBI(one, two) {\n return JSBI.lessThan(one, two) ? two : one;\n}\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\nexport function GetIANATimeZoneNextTransition(epochNanoseconds, id) {\n // Decide how far in the future after `epochNanoseconds` we'll look for an\n // offset change. There are two cases:\n // 1. If it's a past date (or a date in the near future) then it's possible\n // that the time zone may have newly added DST in the next few years. So\n // we'll have to look from the provided time until a few years after the\n // current system time. (Changes to DST policy are usually announced a few\n // years in the future.) Note that the first DST anywhere started in 1847,\n // so we'll start checks in 1847 instead of wasting cycles on years where\n // there will never be transitions.\n // 2. If it's a future date beyond the next few years, then we'll just assume\n // that the latest DST policy in TZDB will still be in effect. In this\n // case, we only need to look one year in the future to see if there are\n // any DST transitions. We actually only need to look 9-10 months because\n // DST has two transitions per year, but we'll use a year just to be safe.\n const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n // start there if an earlier date is supplied.\n let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n let rightNanos = leftNanos;\n let rightOffsetNs = leftOffsetNs;\n while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n if (leftOffsetNs === rightOffsetNs) {\n leftNanos = rightNanos;\n }\n }\n if (leftOffsetNs === rightOffsetNs)\n return null;\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\nexport function GetIANATimeZonePreviousTransition(epochNanoseconds, id) {\n // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n // have to look back one year to find a transition. But if it doesn't use DST,\n // then we need to look all the way back to 1847 (the earliest rule in the\n // TZDB) to see if it had other offset transitions in the past. Looping back\n // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n // also unnecessary because DST rules aren't put into the TZDB more than a few\n // years in the future because the political changes in time zones happen with\n // only a few years' warning. Therefore, if a far-future date is provided,\n // then we'll run the check in two parts:\n // 1. First, we'll look back for up to one year to see if the latest TZDB\n // rules have DST.\n // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n // current system time, and then look back to 1847. This reduces the\n // worst-case loop from 273K years to 175 years, for a ~1500x improvement\n // in worst-case perf.\n const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n let leftNanos = rightNanos;\n let leftOffsetNs = rightOffsetNs;\n while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n if (rightOffsetNs === leftOffsetNs) {\n rightNanos = leftNanos;\n }\n }\n if (rightOffsetNs === leftOffsetNs) {\n if (isFarFuture) {\n // There was no DST after looking back one year, which means that the most\n // recent TZDB rules don't have any recurring transitions. To check for\n // transitions in older rules, back up to a few years after the current\n // date and then look all the way back to 1847. Note that we move back one\n // day from the latest possible rule so that when the recursion runs it\n // won't consider the new time to be \"far future\" because the system clock\n // has advanced in the meantime.\n const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n return GetIANATimeZonePreviousTransition(newTimeToCheck, id);\n }\n return null;\n }\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime) {\n const parts = datetime.split(/[^\\w]+/);\n if (parts.length !== 7) {\n throw new RangeError(`expected 7 parts in \"${datetime}`);\n }\n const month = +parts[0];\n const day = +parts[1];\n let year = +parts[2];\n const era = parts[3].toUpperCase();\n if (era === 'B' || era === 'BC') {\n year = -year + 1;\n }\n else if (era !== 'A' && era !== 'AD') {\n throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n }\n let hour = +parts[4];\n if (hour === 24) {\n // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n hour = 0;\n }\n const minute = +parts[5];\n const second = +parts[6];\n if (!NumberIsFinite(year) ||\n !NumberIsFinite(month) ||\n !NumberIsFinite(day) ||\n !NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second)) {\n throw new RangeError(`Invalid number in \"${datetime}`);\n }\n return { year, month, day, hour, minute, second };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone, epochMilliseconds) {\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n // Using `format` instead of `formatToParts` for compatibility with older clients\n const datetime = formatter.format(new Date(epochMilliseconds));\n return parseFromEnUsFormat(datetime);\n}\nexport function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (ns === null)\n throw new RangeError('DateTime outside of supported range');\n let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n if (JSBI.lessThan(nsEarlier, NS_MIN))\n nsEarlier = ns;\n let nsLater = JSBI.add(ns, DAY_NANOS);\n if (JSBI.greaterThan(nsLater, NS_MAX))\n nsLater = ns;\n const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id);\n const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id);\n const found = earliest === latest ? [earliest] : [earliest, latest];\n return found\n .map((offsetNanoseconds) => {\n const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n if (year !== parts.year ||\n month !== parts.month ||\n day !== parts.day ||\n hour !== parts.hour ||\n minute !== parts.minute ||\n second !== parts.second ||\n millisecond !== parts.millisecond ||\n microsecond !== parts.microsecond ||\n nanosecond !== parts.nanosecond) {\n return undefined;\n }\n return epochNanoseconds;\n })\n .filter((x) => x !== undefined);\n}\nexport function LeapYear(year) {\n if (undefined === year)\n return false;\n const isDiv4 = year % 4 === 0;\n const isDiv100 = year % 100 === 0;\n const isDiv400 = year % 400 === 0;\n return isDiv4 && (!isDiv100 || isDiv400);\n}\nexport function ISODaysInMonth(year, month) {\n const DoM = {\n standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n };\n return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\nexport function DayOfWeek(year, month, day) {\n const m = month + (month < 3 ? 10 : -2);\n const Y = year - (month < 3 ? 1 : 0);\n const c = MathFloor(Y / 100);\n const y = Y - c * 100;\n const d = day;\n const pD = d;\n const pM = MathFloor(2.6 * m - 0.2);\n const pY = y + MathFloor(y / 4);\n const pC = MathFloor(c / 4) - 2 * c;\n const dow = (pD + pM + pY + pC) % 7;\n return dow + (dow <= 0 ? 7 : 0);\n}\nexport function DayOfYear(year, month, day) {\n let days = day;\n for (let m = month - 1; m > 0; m--) {\n days += ISODaysInMonth(year, m);\n }\n return days;\n}\nexport function WeekOfYear(year, month, day) {\n const doy = DayOfYear(year, month, day);\n const dow = DayOfWeek(year, month, day) || 7;\n const doj = DayOfWeek(year, 1, 1);\n const week = MathFloor((doy - dow + 10) / 7);\n if (week < 1) {\n if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n return 53;\n }\n else {\n return 52;\n }\n }\n if (week === 53) {\n if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n return 1;\n }\n }\n return week;\n}\nexport function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) {\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (prop !== 0)\n return prop < 0 ? -1 : 1;\n }\n return 0;\n}\nfunction BalanceISOYearMonth(yearParam, monthParam) {\n let year = yearParam;\n let month = monthParam;\n if (!NumberIsFinite(year) || !NumberIsFinite(month))\n throw new RangeError('infinity is out of range');\n month -= 1;\n year += MathFloor(month / 12);\n month %= 12;\n if (month < 0)\n month += 12;\n month += 1;\n return { year, month };\n}\nfunction BalanceISODate(yearParam, monthParam, dayParam) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n if (!NumberIsFinite(day))\n throw new RangeError('infinity is out of range');\n ({ year, month } = BalanceISOYearMonth(year, month));\n let daysInYear = 0;\n let testYear = month > 2 ? year : year - 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n year -= 1;\n testYear -= 1;\n day += daysInYear;\n }\n testYear += 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n year += 1;\n testYear += 1;\n day -= daysInYear;\n }\n while (day < 1) {\n ({ year, month } = BalanceISOYearMonth(year, month - 1));\n day += ISODaysInMonth(year, month);\n }\n while (day > ISODaysInMonth(year, month)) {\n day -= ISODaysInMonth(year, month);\n ({ year, month } = BalanceISOYearMonth(year, month + 1));\n }\n return { year, month, day };\n}\nfunction BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n if (!NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second) ||\n !NumberIsFinite(millisecond) ||\n !NumberIsFinite(microsecond) ||\n !NumberIsFinite(nanosecond)) {\n throw new RangeError('infinity is out of range');\n }\n microsecond += MathFloor(nanosecond / 1000);\n nanosecond = NonNegativeModulo(nanosecond, 1000);\n millisecond += MathFloor(microsecond / 1000);\n microsecond = NonNegativeModulo(microsecond, 1000);\n second += MathFloor(millisecond / 1000);\n millisecond = NonNegativeModulo(millisecond, 1000);\n minute += MathFloor(second / 60);\n second = NonNegativeModulo(second, 60);\n hour += MathFloor(minute / 60);\n minute = NonNegativeModulo(minute, 60);\n const deltaDays = MathFloor(hour / 24);\n hour = NonNegativeModulo(hour, 24);\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) {\n const days = JSBI.BigInt(daysParam);\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n if (daysParam !== 0)\n nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\nfunction NanosecondsToDays(nanosecondsParam, relativeTo) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n let dayLengthNs = 86400e9;\n if (sign === 0)\n return { days: 0, nanoseconds: ZERO, dayLengthNs };\n if (!IsTemporalZonedDateTime(relativeTo)) {\n let days;\n ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n }\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n const start = GetSlot(relativeTo, INSTANT);\n const endNs = JSBI.add(startNs, nanoseconds);\n const end = new TemporalInstant(endNs);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n // Find the difference in days only.\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate(null));\n let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n // If clock time after addition was in the middle of a skipped period, the\n // endpoint was disambiguated to a later clock time. So it's possible that\n // the resulting disambiguated result is later than endNs. If so, then back\n // up one day and try again. Repeat if necessary (some transitions are\n // > 24 hours) until either there's zero days left or the date duration is\n // back inside the period where it belongs. Note that this case only can\n // happen for positive durations because the only direction that\n // `disambiguation: 'compatible'` can change clock time is forwards.\n if (sign === 1) {\n while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) {\n --days;\n intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may do disambiguation\n }\n }\n nanoseconds = JSBI.subtract(endNs, intermediateNs);\n let isOverflow = false;\n let relativeInstant = new TemporalInstant(intermediateNs);\n do {\n // calculate length of the next day (day that contains the time remainder)\n const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO);\n if (isOverflow) {\n nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n relativeInstant = new TemporalInstant(oneDayFartherNs);\n days += sign;\n }\n } while (isOverflow);\n return { days, nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\nexport function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) {\n let days = daysParam;\n let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt;\n if (IsTemporalZonedDateTime(relativeTo)) {\n const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam);\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n }\n else {\n nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0);\n }\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n }\n else {\n days = 0;\n }\n const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n nanosecondsBigInt = abs(nanosecondsBigInt);\n microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n switch (largestUnit) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n break;\n case 'minute':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n break;\n case 'second':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n break;\n case 'millisecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n break;\n case 'microsecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n break;\n case 'nanosecond':\n break;\n default:\n throw new Error('assert not reached');\n }\n const hours = JSBI.toNumber(hoursBigInt) * sign;\n const minutes = JSBI.toNumber(minutesBigInt) * sign;\n const seconds = JSBI.toNumber(secondsBigInt) * sign;\n const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year':\n // no-op\n break;\n case 'month':\n {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance years down to months\n const dateAdd = calendar.dateAdd;\n const dateUntil = calendar.dateUntil;\n let relativeToDateOnly = relativeTo;\n while (MathAbs(years) > 0) {\n const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil);\n const oneYearMonths = GetSlot(untilResult, MONTHS);\n relativeToDateOnly = newRelativeTo;\n months += oneYearMonths;\n years -= sign;\n }\n }\n break;\n case 'week':\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance years down to days\n while (MathAbs(years) > 0) {\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n break;\n default:\n // balance years down to days\n while (MathAbs(years) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n // balance weeks down to days\n while (MathAbs(weeks) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n days += oneWeekDays;\n weeks -= sign;\n }\n break;\n }\n return { years, months, weeks, days };\n}\nexport function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n if (sign === 0)\n return { years, months, weeks, days };\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('a starting point is required for years balancing');\n // balance days up to years\n let newRelativeTo, oneYearDays;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n while (MathAbs(days) >= MathAbs(oneYearDays)) {\n days -= oneYearDays;\n years += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n }\n // balance days up to months\n let oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n // balance months up to years\n const dateAdd = calendar.dateAdd;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const dateUntil = calendar.dateUntil;\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n let oneYearMonths = GetSlot(untilResult, MONTHS);\n while (MathAbs(months) >= MathAbs(oneYearMonths)) {\n months -= oneYearMonths;\n years += sign;\n relativeTo = newRelativeTo;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n oneYearMonths = GetSlot(untilResult, MONTHS);\n }\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance days up to months\n let newRelativeTo, oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance days up to weeks\n let newRelativeTo, oneWeekDays;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n days -= oneWeekDays;\n weeks += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n break;\n }\n default:\n // no-op\n break;\n }\n return { years, months, weeks, days };\n}\nexport function CalculateOffsetShift(relativeTo, y, mon, w, d) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n const instant = GetSlot(relativeTo, INSTANT);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instantAfter = new TemporalInstant(after);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n return offsetAfter - offsetBefore;\n }\n return 0;\n}\nexport function CreateNegatedTemporalDuration(duration) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS));\n}\nexport function ConstrainToRange(value, min, max) {\n // Math.Max accepts undefined values and returns NaN. Undefined values are\n // used for optional params in the method below.\n return MathMin(max, MathMax(min, value));\n}\nfunction ConstrainISODate(year, monthParam, dayParam) {\n const month = ConstrainToRange(monthParam, 1, 12);\n const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n return { year, month, day };\n}\nfunction ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const hour = ConstrainToRange(hourParam, 0, 23);\n const minute = ConstrainToRange(minuteParam, 0, 59);\n const second = ConstrainToRange(secondParam, 0, 59);\n const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RejectToRange(value, min, max) {\n if (value < min || value > max)\n throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\nfunction RejectISODate(year, month, day) {\n RejectToRange(month, 1, 12);\n RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\nfunction RejectDateRange(year, month, day) {\n // Noon avoids trouble at edges of DateTime range (excludes midnight)\n RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\nexport function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(hour, 0, 23);\n RejectToRange(minute, 0, 59);\n RejectToRange(second, 0, 59);\n RejectToRange(millisecond, 0, 999);\n RejectToRange(microsecond, 0, 999);\n RejectToRange(nanosecond, 0, 999);\n}\nfunction RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectISODate(year, month, day);\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n // Reject any DateTime 24 hours or more outside the Instant range\n if ((year === YEAR_MIN &&\n null ==\n GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n (year === YEAR_MAX &&\n null ==\n GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) {\n throw new RangeError('DateTime outside of supported range');\n }\n}\nexport function ValidateEpochNanoseconds(epochNanoseconds) {\n if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n throw new RangeError('Instant outside of supported range');\n }\n}\nfunction RejectYearMonthRange(year, month) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n if (year === YEAR_MIN) {\n RejectToRange(month, 4, 12);\n }\n else if (year === YEAR_MAX) {\n RejectToRange(month, 1, 9);\n }\n}\nexport function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) {\n const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (!NumberIsFinite(prop))\n throw new RangeError('infinite values not allowed as duration fields');\n const propSign = MathSign(prop);\n if (propSign !== 0 && propSign !== sign)\n throw new RangeError('mixed-sign values not allowed as duration fields');\n }\n}\nexport function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) {\n switch (largestUnit) {\n case 'year':\n case 'month': {\n const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n if (sign === 0)\n return { years: 0, months: 0, weeks: 0, days: 0 };\n const start = { year: y1, month: m1, day: d1 };\n const end = { year: y2, month: m2, day: d2 };\n let years = end.year - start.year;\n let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months: 0, weeks: 0, days: 0 }\n : { years: 0, months: years * 12, weeks: 0, days: 0 };\n }\n let months = end.month - start.month;\n if (midSign !== sign) {\n years -= sign;\n months += sign * 12;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months, weeks: 0, days: 0 }\n : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n }\n if (midSign !== sign) {\n // The end date is later in the month than mid date (or earlier for\n // negative durations). Back up one month.\n months -= sign;\n if (months === -sign) {\n years -= sign;\n months = 11 * sign;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n }\n let days = 0;\n // If we get here, months and years are correct (no overflow), and `mid`\n // is within the range from `start` to `end`. To count the days between\n // `mid` and `end`, there are 3 cases:\n // 1) same month: use simple subtraction\n // 2) end is previous month from intermediate (negative duration)\n // 3) end is next month from intermediate (positive duration)\n if (mid.month === end.month) {\n // 1) same month: use simple subtraction\n days = end.day - mid.day;\n }\n else if (sign < 0) {\n // 2) end is previous month from intermediate (negative duration)\n // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n }\n else {\n // 3) end is next month from intermediate (positive duration)\n // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n }\n if (largestUnit === 'month') {\n months += years * 12;\n years = 0;\n }\n return { years, months, weeks: 0, days };\n }\n case 'week':\n case 'day': {\n let larger, smaller, sign;\n if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n smaller = { year: y1, month: m1, day: d1 };\n larger = { year: y2, month: m2, day: d2 };\n sign = 1;\n }\n else {\n smaller = { year: y2, month: m2, day: d2 };\n larger = { year: y1, month: m1, day: d1 };\n sign = -1;\n }\n let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n for (let year = smaller.year; year < larger.year; ++year) {\n days += LeapYear(year) ? 366 : 365;\n }\n let weeks = 0;\n if (largestUnit === 'week') {\n weeks = MathFloor(days / 7);\n days %= 7;\n }\n weeks *= sign;\n days *= sign;\n return { years: 0, months: 0, weeks, days };\n }\n default:\n throw new Error('assert not reached');\n }\n}\nfunction DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) {\n let hours = h2 - h1;\n let minutes = min2 - min1;\n let seconds = s2 - s1;\n let milliseconds = ms2 - ms1;\n let microseconds = µs2 - µs1;\n let nanoseconds = ns2 - ns1;\n const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n let deltaDays = 0;\n ({\n deltaDays,\n hour: hours,\n minute: minutes,\n second: seconds,\n millisecond: milliseconds,\n microsecond: microseconds,\n nanosecond: nanoseconds\n } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n if (deltaDays != 0)\n throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceInstant(ns1, ns2, increment, unit, roundingMode) {\n const diff = JSBI.subtract(ns2, ns1);\n const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(diff, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n const roundedDiff = JSBI.add(wholeDays, roundedRemainder);\n const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND));\n const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND));\n const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND));\n const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION));\n return { seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) {\n let y1 = y1Param;\n let mon1 = mon1Param;\n let d1 = d1Param;\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2);\n const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n if (dateSign === -timeSign) {\n ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const untilOptions = MergeLargestUnitOption(options, dateLargestUnit);\n // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n // Type 'SmallestUnit | undefined' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n // Type '\"hour\"' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions);\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) {\n const nsDiff = JSBI.subtract(ns2, ns1);\n if (JSBI.equal(nsDiff, ZERO)) {\n return {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n }\n // Find the difference in dates only.\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const start = new TemporalInstant(ns1);\n const end = new TemporalInstant(ns2);\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options);\n const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n // Finally, merge the date and time durations and return the merged result.\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour');\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// TODO: does it make sense to explicitly union the other and options types for each operation?\nexport function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) {\n const other = ToTemporalInstant(otherParam);\n let first, second;\n if (operation === 'until') {\n [first, second] = [instant, other];\n }\n else {\n [first, second] = [other, instant];\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ToTemporalRoundingMode(options, 'trunc');\n const MAX_DIFFERENCE_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false);\n const onens = GetSlot(first, EPOCHNANOSECONDS);\n const twons = GetSlot(second, EPOCHNANOSECONDS);\n let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode);\n let hours, minutes;\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDate(otherParam);\n const calendar = GetSlot(plainDate, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions);\n if (smallestUnit !== 'day' || roundingIncrement !== 1) {\n ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDateTime(otherParam);\n const calendar = GetSlot(plainDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options);\n const relativeTo = TemporalDateTimeToDate(plainDateTime);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalTime(otherParam);\n const options = GetOptionsObject(optionsParam);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'hour';\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalYearMonth(otherParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarID = ToString(calendar);\n const otherCalendarID = ToString(otherCalendar);\n if (calendarID !== otherCalendarID) {\n throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n if (c === 'date' && s !== 'week' && s !== 'day')\n allowed.push(s, p);\n return allowed;\n }, []);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month');\n if (smallestUnit === 'week' || smallestUnit === 'day') {\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'week' || largestUnit === 'day') {\n throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n }\n if (largestUnit === 'auto')\n largestUnit = 'year';\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const otherFields = PrepareTemporalFields(other, fieldNames, []);\n otherFields.day = 1;\n const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n thisFields.day = 1;\n // The calls to PrepareTemporalFields don't mark day as a required property,\n // and TS doesn't automatically narrow the type of the object because of the\n // assignments above, so we must \"cast\" the inputs.\n const otherDate = CalendarDateFromFields(calendar, otherFields);\n const thisDate = CalendarDateFromFields(calendar, thisFields);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions);\n if (smallestUnit !== 'month' || roundingIncrement !== 1) {\n ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalZonedDateTime(otherParam);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, \n // TODO this doesn't type-check as it includes >= day-size units\n // This is probably safe as the typing for ToSmallestTemporalUnit isn't\n // very good.\n smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n throw new RangeError(\"When calculating difference between time zones, largestUnit must be 'hours' \" +\n 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.');\n }\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n year += years;\n month += months;\n ({ year, month } = BalanceISOYearMonth(year, month));\n ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n days += 7 * weeks;\n day += days;\n ({ year, month, day } = BalanceISODate(year, month, day));\n return { year, month, day };\n}\nfunction AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n hour += hours;\n minute += minutes;\n second += seconds;\n millisecond += milliseconds;\n microsecond += microseconds;\n nanosecond += nanoseconds;\n let deltaDays = 0;\n ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond));\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) {\n const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (!relativeTo) {\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n }\n years = months = weeks = 0;\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else if (IsTemporalDate(relativeTo)) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n const dateAdd = calendar.dateAdd;\n const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const differenceOptions = ObjectCreate(null);\n differenceOptions.largestUnit = dateLargestUnit;\n ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else {\n // relativeTo is a ZonedDateTime\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate(null)));\n }\n }\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) {\n let sum = ZERO;\n sum = JSBI.add(sum, JSBI.BigInt(ns));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n const result = JSBI.add(epochNanoseconds, sum);\n ValidateEpochNanoseconds(result);\n return result;\n}\nfunction AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) {\n let days = daysParam;\n // Add the time part\n let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n days += deltaDays;\n // Delegate the date part addition to the calendar\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const datePart = CreateTemporalDate(year, month, day, calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n return {\n year: GetSlot(addedDate, ISO_YEAR),\n month: GetSlot(addedDate, ISO_MONTH),\n day: GetSlot(addedDate, ISO_DAY),\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond\n };\n}\nexport function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) {\n // If only time is to be added, then use Instant math. It's not OK to fall\n // through to the date/time code below because compatible disambiguation in\n // the PlainDateTime=>Instant conversion will change the offset of any\n // ZonedDateTime in the repeated clock time after a backwards transition.\n // When adding/subtracting time units and not dates, this disambiguation is\n // not expected and so is avoided below via a fast path for time-only\n // arithmetic.\n // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n }\n // RFC 5545 requires the date portion to be added in calendar days and the\n // time portion to be added in exact time.\n const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar);\n const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar);\n // Note that 'compatible' is used below because this disambiguation behavior\n // is required by RFC 5545.\n const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible');\n return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\nexport function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other);\n const options = GetOptionsObject(optionsParam);\n const relativeTo = ToRelativeTemporalObject(options);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n 'years',\n 'months',\n 'weeks',\n 'days'\n ]);\n const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ns);\n}\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(dateTime, CALENDAR);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'));\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) {\n let duration = ToTemporalDurationRecord(durationLike);\n if (operation === 'subtract') {\n duration = {\n years: -duration.years,\n months: -duration.months,\n weeks: -duration.weeks,\n days: -duration.days,\n hours: -duration.hours,\n minutes: -duration.minutes,\n seconds: -duration.seconds,\n milliseconds: -duration.milliseconds,\n microseconds: -duration.microseconds,\n nanoseconds: -duration.nanoseconds\n };\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1;\n // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n // and TS doesn't narrow the type as a result of the assignment above, so we\n // cast the fields input to the new type.\n const startDate = CalendarDateFromFields(calendar, fields);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const optionsCopy = ObjectAssign(ObjectCreate(null), options);\n const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options);\n const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nfunction RoundNumberToIncrement(quantity, increment, mode) {\n if (increment === 1)\n return quantity;\n let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment));\n if (JSBI.equal(remainder, ZERO))\n return quantity;\n const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n switch (mode) {\n case 'ceil':\n if (sign > 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'floor':\n if (sign < 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'trunc':\n // no change needed, because divmod is a truncation\n break;\n case 'halfExpand':\n // \"half up away from zero\"\n if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) {\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n }\n break;\n }\n return JSBI.multiply(quotient, JSBI.BigInt(increment));\n}\nexport function RoundInstant(epochNs, increment, unit, roundingMode) {\n // Note: NonNegativeModulo, but with BigInt\n let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9));\n if (JSBI.lessThan(remainder, ZERO))\n remainder = JSBI.add(remainder, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(epochNs, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n return JSBI.add(wholeDays, roundedRemainder);\n}\nexport function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n let quantity = ZERO;\n switch (unit) {\n case 'day':\n case 'hour':\n quantity = JSBI.BigInt(hour);\n // fall through\n case 'minute':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n // fall through\n case 'second':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n // fall through\n case 'millisecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n // fall through\n case 'microsecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n // fall through\n case 'nanosecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n }\n const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode);\n const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n switch (unit) {\n case 'day':\n return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n case 'hour':\n return BalanceTime(result, 0, 0, 0, 0, 0);\n case 'minute':\n return BalanceTime(hour, result, 0, 0, 0, 0);\n case 'second':\n return BalanceTime(hour, minute, result, 0, 0, 0);\n case 'millisecond':\n return BalanceTime(hour, minute, second, result, 0, 0);\n case 'microsecond':\n return BalanceTime(hour, minute, second, millisecond, result, 0);\n case 'nanosecond':\n return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n default:\n throw new Error(`Invalid unit ${unit}`);\n }\n}\nfunction DaysUntil(earlier, later) {\n return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days;\n}\nfunction MoveRelativeDate(calendar, relativeToParam, duration) {\n const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined);\n const days = DaysUntil(relativeToParam, later);\n return { relativeTo: later, days };\n}\nexport function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) {\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\nexport function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (!IsTemporalZonedDateTime(relativeTo) ||\n unit === 'year' ||\n unit === 'month' ||\n unit === 'week' ||\n unit === 'day' ||\n (unit === 'nanosecond' && increment === 1)) {\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n }\n // There's one more round of rounding possible: if relativeTo is a\n // ZonedDateTime, the time units could have rounded up into enough hours\n // to exceed the day length. If this happens, grow the date part by a\n // single day and re-run exact time rounding on the smaller remainder. DO\n // NOT RECURSE, because once the extra hours are sucked up into the date\n // duration, there's no way for another full day to come from the next\n // round of rounding. And if it were possible (e.g. contrived calendar\n // with 30-minute-long \"days\") then it'd risk an infinite loop.\n let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0);\n const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) {\n ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo));\n timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'));\n }\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n let calendar, zdtRelative;\n // A cast is used below because relativeTo will be either PlainDate or\n // undefined for the rest of this long method (after any ZDT=>PlainDate\n // conversion below), and TS isn't smart enough to know that the type has\n // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n let relativeTo = relativeToParam;\n if (relativeTo) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n zdtRelative = relativeTo;\n relativeTo = ToTemporalDate(relativeTo);\n }\n else if (!IsTemporalDate(relativeTo)) {\n throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n }\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n // First convert time units up to days, if rounding to days or higher units.\n // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n // larger. We'll cast away `undefined` when it's used lower down below.\n let dayLengthNs;\n if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n let intermediate;\n if (zdtRelative) {\n intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n }\n let deltaDays;\n let dayLength;\n ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n dayLengthNs = JSBI.BigInt(dayLength);\n days += deltaDays;\n hours = minutes = seconds = milliseconds = microseconds = 0;\n }\n let total;\n switch (unit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('A starting point is required for years rounding');\n // convert months and weeks to days by calculating difference(\n // relativeTo + years, relativeTo + { years, months, weeks })\n const yearsDuration = new TemporalDuration(years);\n const dateAdd = calendar.dateAdd;\n const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n relativeTo = yearsLater;\n days += monthsWeeksInDays;\n const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'year';\n const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years;\n years += yearsPassed;\n const oldRelativeTo = relativeTo;\n relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd);\n const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n days -= daysPassed;\n const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear);\n // Note that `nanoseconds` below (here and in similar code for months,\n // weeks, and days further below) isn't actually nanoseconds for the\n // full date range. Instead, it's a BigInt representation of total\n // days multiplied by the number of nanoseconds in the last day of\n // the duration. This lets us do days-or-larger rounding using BigInt\n // math which reduces precision loss.\n oneYearDays = MathAbs(oneYearDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n months = weeks = days = 0;\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('A starting point is required for months rounding');\n // convert weeks to days by calculating difference(relativeTo +\n // { years, months }, relativeTo + { years, months, weeks })\n const yearsMonths = new TemporalDuration(years, months);\n const dateAdd = calendar.dateAdd;\n const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n relativeTo = yearsMonthsLater;\n days += weeksInDays;\n // Months may be different lengths of days depending on the calendar,\n // convert days to months in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n months += sign;\n days -= oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n oneMonthDays = MathAbs(oneMonthDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n weeks = days = 0;\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('A starting point is required for weeks rounding');\n // Weeks may be different lengths of days depending on the calendar,\n // convert days to weeks in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n weeks += sign;\n days -= oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n oneWeekDays = MathAbs(oneWeekDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n days = 0;\n break;\n }\n case 'day': {\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = dayLengthNs;\n nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n break;\n }\n case 'hour': {\n const divisor = 3600e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n minutes = seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'minute': {\n const divisor = 60e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'second': {\n const divisor = 1e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n milliseconds = microseconds = 0;\n break;\n }\n case 'millisecond': {\n const divisor = 1e6;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n microseconds = 0;\n break;\n }\n case 'microsecond': {\n const divisor = 1e3;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n break;\n }\n case 'nanosecond': {\n total = JSBI.toNumber(nanoseconds);\n nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode);\n break;\n }\n }\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n microseconds,\n nanoseconds: JSBI.toNumber(nanoseconds),\n total\n };\n}\nexport function CompareISODate(y1, m1, d1, y2, m2, d2) {\n for (const [x, y] of [\n [y1, y2],\n [m1, m2],\n [d1, d2]\n ]) {\n if (x !== y)\n return ComparisonResult(x - y);\n }\n return 0;\n}\nfunction NonNegativeModulo(x, y) {\n let result = x % y;\n if (ObjectIs(result, -0))\n return 0;\n if (result < 0)\n result += y;\n return result;\n}\nexport function ToBigIntExternal(arg) {\n const jsbiBI = ToBigInt(arg);\n if (typeof globalThis.BigInt !== 'undefined')\n return globalThis.BigInt(jsbiBI.toString(10));\n return jsbiBI;\n}\nexport function ToBigInt(arg) {\n if (arg instanceof JSBI) {\n return arg;\n }\n let prim = arg;\n if (typeof arg === 'object') {\n const toPrimFn = arg[Symbol.toPrimitive];\n if (toPrimFn && typeof toPrimFn === 'function') {\n prim = ReflectApply(toPrimFn, arg, ['number']);\n }\n }\n switch (typeof prim) {\n case 'undefined':\n case 'object':\n case 'number':\n case 'symbol':\n default:\n throw new TypeError(`cannot convert ${typeof arg} to bigint`);\n case 'string':\n if (!prim.match(/^\\s*(?:[+-]?\\d+\\s*)?$/)) {\n throw new SyntaxError('invalid BigInt syntax');\n }\n // eslint: no-fallthrough: false\n case 'bigint':\n try {\n return JSBI.BigInt(prim.toString());\n }\n catch (e) {\n if (e instanceof Error && e.message.startsWith('Invalid integer'))\n throw new SyntaxError(e.message);\n throw e;\n }\n case 'boolean':\n if (prim) {\n return ONE;\n }\n else {\n return ZERO;\n }\n }\n}\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds = (() => {\n let ns = JSBI.BigInt(Date.now() % 1e6);\n return () => {\n const ms = JSBI.BigInt(Date.now());\n const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n ns = JSBI.remainder(ms, MILLION);\n if (JSBI.greaterThan(result, NS_MAX))\n return NS_MAX;\n if (JSBI.lessThan(result, NS_MIN))\n return NS_MIN;\n return result;\n };\n})();\nexport function SystemTimeZone() {\n const fmt = new IntlDateTimeFormat('en-us');\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone));\n}\nexport function ComparisonResult(value) {\n return value < 0 ? -1 : value > 0 ? 1 : value;\n}\nexport function GetOptionsObject(options) {\n if (options === undefined)\n return ObjectCreate(null);\n if (IsObject(options) && options !== null)\n return options;\n throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\nexport function CreateOnePropObject(propName, propValue) {\n const o = ObjectCreate(null);\n o[propName] = propValue;\n return o;\n}\nfunction GetOption(options, property, allowedValues, fallback) {\n let value = options[property];\n if (value !== undefined) {\n value = ToString(value);\n if (!allowedValues.includes(value)) {\n throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n }\n return value;\n }\n return fallback;\n}\nfunction GetNumberOption(options, property, minimum, maximum, fallback) {\n let valueRaw = options[property];\n if (valueRaw === undefined)\n return fallback;\n const value = ToNumber(valueRaw);\n if (NumberIsNaN(value) || value < minimum || value > maximum) {\n throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`);\n }\n return MathFloor(value);\n}\nexport function IsBuiltinCalendar(id) {\n return ArrayIncludes.call(BUILTIN_CALENDAR_IDS, id);\n}\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\nfunction bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) {\n // This doesn't make much sense - why do these get converted unnecessarily?\n let left = JSBI.BigInt(leftParam);\n let right = JSBI.BigInt(rightParam);\n let lstate = lstateParam;\n let rstate = rstateParam;\n while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n const mstate = getState(middle);\n if (mstate === lstate) {\n left = middle;\n lstate = mstate;\n }\n else if (mstate === rstate) {\n right = middle;\n rstate = mstate;\n }\n else {\n throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n }\n }\n return right;\n}\nconst nsPerTimeUnit = {\n hour: 3600e9,\n minute: 60e9,\n second: 1e9,\n millisecond: 1e6,\n microsecond: 1e3,\n nanosecond: 1\n};\n//# sourceMappingURL=ecmascript.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { GetSlot, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, TIME_ZONE } from './slots';\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst ZONED = Symbol('zoneddatetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst TZ_GIVEN = Symbol('timezone-id-given');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\nconst descriptor = (value) => {\n return {\n value,\n enumerable: true,\n writable: false,\n configurable: true\n };\n};\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy(obj, prop) {\n let val = obj[prop];\n if (typeof val === 'function') {\n // If we get here, `val` is an \"amender function\". It will take the user's\n // options and transform them into suitable options to be passed into the\n // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n // will vary depending on the Temporal type, so that's why we store separate\n // formatters in separate props on the polyfill's DateTimeFormat instances.\n // The efficiency happens because we don't create an (expensive) formatter\n // until the user calls toLocaleString for that Temporal type.\n val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n // TODO: can this be typed more cleanly?\n obj[prop] = val;\n }\n return val;\n}\n// Similarly, lazy-init TimeZone instances.\nfunction getResolvedTimeZoneLazy(obj) {\n let val = obj[TZ_RESOLVED];\n if (typeof val === 'string') {\n val = ES.ToTemporalTimeZone(val);\n obj[TZ_RESOLVED] = val;\n }\n return val;\n}\nfunction DateTimeFormatImpl(locale = undefined, optionsParam = {}) {\n if (!(this instanceof DateTimeFormatImpl)) {\n return new DateTimeFormatImpl(locale, optionsParam);\n }\n const hasOptions = typeof optionsParam !== 'undefined';\n const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n // TODO: remove type assertion after Temporal types land in TS lib types\n const original = new IntlDateTimeFormat(locale, options);\n const ro = original.resolvedOptions();\n // DateTimeFormat instances are very expensive to create. Therefore, they will\n // be lazily created only when needed, using the locale and options provided.\n // But it's possible for callers to mutate those inputs before lazy creation\n // happens. For this reason, we clone the inputs instead of caching the\n // original objects. To avoid the complexity of deep cloning any inputs that\n // are themselves objects (e.g. the locales array, or options property values\n // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n // coercion and cloning for us. Unfortunately, we can't just use the resolved\n // options as-is because our options-amending logic adds additional fields if\n // the user doesn't supply any unit fields like year, month, day, hour, etc.\n // Therefore, we limit the properties in the clone to properties that were\n // present in the original input.\n if (hasOptions) {\n const clonedResolved = ObjectAssign({}, ro);\n for (const prop in clonedResolved) {\n if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n delete clonedResolved[prop];\n }\n }\n this[OPTIONS] = clonedResolved;\n }\n else {\n this[OPTIONS] = options;\n }\n this[TZ_GIVEN] = options.timeZone ? options.timeZone : null;\n this[LOCALE] = ro.locale;\n this[ORIGINAL] = original;\n this[TZ_RESOLVED] = ro.timeZone;\n this[CAL_ID] = ro.calendar;\n this[DATE] = dateAmend;\n this[YM] = yearMonthAmend;\n this[MD] = monthDayAmend;\n this[TIME] = timeAmend;\n this[DATETIME] = datetimeAmend;\n this[ZONED] = zonedDateTimeAmend;\n this[INST] = instantAmend;\n return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n writable: true,\n value: 'DateTimeFormat'\n});\nDateTimeFormatImpl.supportedLocalesOf = function (locales, options) {\n return IntlDateTimeFormat.supportedLocalesOf(locales, options);\n};\nconst propertyDescriptors = {\n resolvedOptions: descriptor(resolvedOptions),\n format: descriptor(format),\n formatRange: descriptor(formatRange)\n};\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n writable: false,\n enumerable: false,\n configurable: false\n});\nexport const DateTimeFormat = DateTimeFormatImpl;\nfunction resolvedOptions() {\n return this[ORIGINAL].resolvedOptions();\n}\nfunction adjustFormatterTimeZone(formatter, timeZone) {\n if (!timeZone)\n return formatter;\n const options = formatter.resolvedOptions();\n if (options.timeZone === timeZone)\n return formatter;\n // Existing Intl isn't typed to accept Temporal-specific options and the lib\n // types for resolved options are less restrictive than the types for options.\n // For example, `weekday` is\n // `'long' | 'short' | 'narrow'` in options but `string` in resolved options.\n // TODO: investigate why, and file an issue against TS if it's a bug.\n if (options['dateStyle'] || options['timeStyle']) {\n // Unfortunately, Safari's resolvedOptions include parameters that will\n // cause errors at runtime if passed along with\n // dateStyle or timeStyle options as per\n // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components.\n // This has been fixed in newer versions of Safari:\n // https://bugs.webkit.org/show_bug.cgi?id=231041\n delete options['weekday'];\n delete options['era'];\n delete options['year'];\n delete options['month'];\n delete options['day'];\n delete options['hour'];\n delete options['minute'];\n delete options['second'];\n delete options['timeZoneName'];\n delete options['hourCycle'];\n delete options['hour12'];\n delete options['dayPeriod'];\n }\n return new IntlDateTimeFormat(options.locale, { ...options, timeZone });\n}\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.format(instant.epochMilliseconds);\n }\n return this[ORIGINAL].format(datetime, ...rest);\n}\nfunction formatToParts(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.formatToParts(instant.epochMilliseconds);\n }\n return this[ORIGINAL].formatToParts(datetime, ...rest);\n}\nfunction formatRange(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRange(a, b);\n}\nfunction formatRangeToParts(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRangeToParts(a, b);\n}\nfunction amend(optionsParam = {}, amended = {}) {\n const options = ObjectAssign({}, optionsParam);\n for (const opt of [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'weekday',\n 'dayPeriod',\n 'timeZoneName',\n 'dateStyle',\n 'timeStyle'\n ]) {\n options[opt] = opt in amended ? amended[opt] : options[opt];\n if (options[opt] === false || options[opt] === undefined)\n delete options[opt];\n }\n return options;\n}\nfunction timeAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n month: false,\n day: false,\n weekday: false,\n timeZoneName: false,\n dateStyle: false\n });\n if (!hasTimeOptions(options)) {\n options = ObjectAssign({}, options, {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction yearMonthAmend(optionsParam) {\n let options = amend(optionsParam, {\n day: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('year' in options || 'month' in options)) {\n options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n }\n return options;\n}\nfunction monthDayAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('month' in options || 'day' in options)) {\n options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n }\n return options;\n}\nfunction dateAmend(optionsParam) {\n let options = amend(optionsParam, {\n hour: false,\n minute: false,\n second: false,\n dayPeriod: false,\n timeZoneName: false,\n timeStyle: false\n });\n if (!hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n });\n }\n return options;\n}\nfunction datetimeAmend(optionsParam) {\n let options = amend(optionsParam, { timeZoneName: false });\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction zonedDateTimeAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n if (options.timeZoneName === undefined)\n options.timeZoneName = 'short';\n }\n return options;\n}\nfunction instantAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction hasDateOptions(options) {\n return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\nfunction hasTimeOptions(options) {\n return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options);\n}\nfunction isTemporalObject(obj) {\n return (ES.IsTemporalDate(obj) ||\n ES.IsTemporalTime(obj) ||\n ES.IsTemporalDateTime(obj) ||\n ES.IsTemporalZonedDateTime(obj) ||\n ES.IsTemporalYearMonth(obj) ||\n ES.IsTemporalMonthDay(obj) ||\n ES.IsTemporalInstant(obj));\n}\nfunction sameTemporalType(x, y) {\n if (!isTemporalObject(x) || !isTemporalObject(y))\n return false;\n if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y))\n return false;\n if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y))\n return false;\n if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y))\n return false;\n if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y))\n return false;\n if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y))\n return false;\n if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y))\n return false;\n if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y))\n return false;\n return true;\n}\nfunction extractOverrides(temporalObj, main) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n if (ES.IsTemporalTime(temporalObj)) {\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, TIME)\n };\n }\n if (ES.IsTemporalYearMonth(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, YM)\n };\n }\n if (ES.IsTemporalMonthDay(temporalObj)) {\n const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, MD)\n };\n }\n if (ES.IsTemporalDate(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATE)\n };\n }\n if (ES.IsTemporalDateTime(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n let datetime = temporalObj;\n if (calendar === 'iso8601') {\n datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n }\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATETIME)\n };\n }\n if (ES.IsTemporalZonedDateTime(temporalObj)) {\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const timeZone = GetSlot(temporalObj, TIME_ZONE);\n const objTimeZone = ES.ToString(timeZone);\n if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) {\n throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`);\n }\n return {\n instant: GetSlot(temporalObj, INSTANT),\n formatter: getPropLazy(main, ZONED),\n timeZone: objTimeZone\n };\n }\n if (ES.IsTemporalInstant(temporalObj)) {\n return {\n instant: temporalObj,\n formatter: getPropLazy(main, INST)\n };\n }\n return {};\n}\n//# sourceMappingURL=intl.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\nexport class Instant {\n constructor(epochNanoseconds) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const ns = ES.ToBigInt(epochNanoseconds);\n ES.ValidateEpochNanoseconds(ns);\n CreateSlots(this);\n SetSlot(this, EPOCHNANOSECONDS, ns);\n if (DEBUG) {\n const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${repr}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get epochSeconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n hour: 24,\n minute: 1440,\n second: 86400,\n millisecond: 86400e3,\n microsecond: 86400e6,\n nanosecond: 86400e9\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true);\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n return new Instant(roundedNs);\n }\n equals(otherParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalInstant(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n let timeZone = options.timeZone;\n if (timeZone !== undefined)\n timeZone = ES.ToTemporalTimeZone(timeZone);\n // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n const roundedInstant = new Instant(roundedNs);\n return ES.TemporalInstantToString(roundedInstant, timeZone, precision);\n }\n toJSON() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalInstantToString(this, undefined, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument in toZonedDateTime');\n }\n const calendarLike = item.calendar;\n if (calendarLike === undefined) {\n throw new TypeError('missing calendar property in toZonedDateTime');\n }\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const temporalTimeZoneLike = item.timeZone;\n if (temporalTimeZoneLike === undefined) {\n throw new TypeError('missing timeZone property in toZonedDateTime');\n }\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toZonedDateTimeISO(itemParam) {\n let item = itemParam;\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (ES.IsObject(item)) {\n const timeZoneProperty = item.timeZone;\n if (timeZoneProperty !== undefined) {\n item = timeZoneProperty;\n }\n }\n const timeZone = ES.ToTemporalTimeZone(item);\n const calendar = ES.GetISO8601Calendar();\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n static fromEpochSeconds(epochSecondsParam) {\n const epochSeconds = ES.ToNumber(epochSecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMilliseconds(epochMillisecondsParam) {\n const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMicroseconds(epochMicrosecondsParam) {\n const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochNanoseconds(epochNanosecondsParam) {\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static from(item) {\n if (ES.IsTemporalInstant(item)) {\n return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n }\n return ES.ToTemporalInstant(item);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalInstant(oneParam);\n const two = ES.ToTemporalInstant(twoParam);\n const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(oneNs, twoNs))\n return -1;\n if (JSBI.greaterThan(oneNs, twoNs))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n//# sourceMappingURL=instant.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport { CALENDAR_ID, ISO_YEAR, ISO_MONTH, ISO_DAY, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, HasSlot, SetSlot } from './slots';\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectEntries = Object.entries;\nconst ObjectKeys = Object.keys;\n/**\n * Implementations for each calendar. Non-ISO calendars have an extra `helper`\n * property that provides additional per-calendar logic.\n */\nconst impl = {};\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n * PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar {\n constructor(idParam) {\n // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n // exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: id is required');\n }\n const id = ES.ToString(idParam);\n if (!ES.IsBuiltinCalendar(id))\n throw new RangeError(`invalid calendar identifier ${id}`);\n CreateSlots(this);\n SetSlot(this, CALENDAR_ID, id);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${id}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n dateFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this);\n }\n yearMonthFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this);\n }\n monthDayFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this);\n }\n fields(fields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const fieldsArray = [];\n const allowed = new Set([\n 'year',\n 'month',\n 'monthCode',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n 'microsecond',\n 'nanosecond'\n ]);\n for (const name of fields) {\n if (typeof name !== 'string')\n throw new TypeError('invalid fields');\n if (!allowed.has(name))\n throw new RangeError(`invalid field name ${name}`);\n allowed.delete(name);\n ArrayPrototypePush.call(fieldsArray, name);\n }\n return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n }\n mergeFields(fields, additionalFields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields);\n }\n dateAdd(dateParam, durationParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n const duration = ES.ToTemporalDuration(durationParam);\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const { days } = ES.BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day');\n return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this);\n }\n dateUntil(oneParam, twoParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'day';\n const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n }\n year(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].year(date);\n }\n month(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (ES.IsTemporalMonthDay(date))\n throw new TypeError('use monthCode on PlainMonthDay instead');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].month(date);\n }\n monthCode(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthCode(date);\n }\n day(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].day(date);\n }\n era(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].era(date);\n }\n eraYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].eraYear(date);\n }\n dayOfWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n }\n dayOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n }\n weekOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n }\n daysInWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n }\n daysInMonth(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date);\n }\n daysInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date);\n }\n monthsInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date);\n }\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date);\n }\n toString() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR_ID);\n }\n toJSON() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalCalendar(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month, day } = fields;\n ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month } = fields;\n ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n return ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1);\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n throw new TypeError('either year or monthCode required with month');\n }\n const useYear = fields.monthCode === undefined;\n const referenceISOYear = 1972;\n fields = resolveNonLunisolarMonth(fields);\n let { month, day, year } = fields;\n ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n return ES.CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n },\n fields(fields) {\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const merged = {};\n for (const nextKey of ObjectKeys(fields)) {\n if (nextKey === 'month' || nextKey === 'monthCode')\n continue;\n merged[nextKey] = fields[nextKey];\n }\n const newKeys = ObjectKeys(additionalFields);\n for (const nextKey of newKeys) {\n merged[nextKey] = additionalFields[nextKey];\n }\n if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) {\n const { month, monthCode } = fields;\n if (month !== undefined)\n merged.month = month;\n if (monthCode !== undefined)\n merged.monthCode = monthCode;\n }\n return merged;\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n let year = GetSlot(date, ISO_YEAR);\n let month = GetSlot(date, ISO_MONTH);\n let day = GetSlot(date, ISO_DAY);\n ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n dateUntil(one, two, largestUnit) {\n return ES.DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit);\n },\n year(date) {\n return GetSlot(date, ISO_YEAR);\n },\n era() {\n return undefined;\n },\n eraYear() {\n return undefined;\n },\n month(date) {\n return GetSlot(date, ISO_MONTH);\n },\n monthCode(date) {\n return buildMonthCode(GetSlot(date, ISO_MONTH));\n },\n day(date) {\n return GetSlot(date, ISO_DAY);\n },\n dayOfWeek(date) {\n return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n dayOfYear(date) {\n return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n weekOfYear(date) {\n return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n daysInWeek() {\n return 7;\n },\n daysInMonth(date) {\n return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n },\n monthsInYear() {\n return 12;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR));\n }\n};\nfunction monthCodeNumberPart(monthCode) {\n if (!monthCode.startsWith('M')) {\n throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`);\n }\n const month = +monthCode.slice(1);\n if (isNaN(month))\n throw new RangeError(`Invalid month code: ${monthCode}`);\n return month;\n}\nfunction buildMonthCode(month, leap = false) {\n return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) {\n let { month, monthCode } = calendarDate;\n if (monthCode === undefined) {\n if (month === undefined)\n throw new TypeError('Either month or monthCode are required');\n // The ISO calendar uses the default (undefined) value because it does\n // constrain/reject after this method returns. Non-ISO calendars, however,\n // rely on this function to constrain/reject out-of-range `month` values.\n if (overflow === 'reject')\n ES.RejectToRange(month, 1, monthsPerYear);\n if (overflow === 'constrain')\n month = ES.ConstrainToRange(month, 1, monthsPerYear);\n monthCode = buildMonthCode(month);\n }\n else {\n const numberPart = monthCodeNumberPart(monthCode);\n if (month !== undefined && month !== numberPart) {\n throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n }\n if (monthCode !== buildMonthCode(numberPart)) {\n throw new RangeError(`Invalid month code: ${monthCode}`);\n }\n month = numberPart;\n if (month < 1 || month > monthsPerYear)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n return { ...calendarDate, month, monthCode };\n}\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance. No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n constructor(cacheToClone) {\n this.map = new Map();\n this.calls = 0;\n this.hits = 0;\n this.misses = 0;\n this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n if (cacheToClone !== undefined) {\n let i = 0;\n for (const entry of cacheToClone.map.entries()) {\n if (++i > OneObjectCache.MAX_CACHE_ENTRIES)\n break;\n this.map.set(...entry);\n }\n }\n }\n get(key) {\n const result = this.map.get(key);\n if (result) {\n this.hits++;\n this.report();\n }\n this.calls++;\n return result;\n }\n set(key, value) {\n this.map.set(key, value);\n this.misses++;\n this.report();\n }\n report() {\n /*\n if (this.calls === 0) return;\n const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n */\n }\n setObject(obj) {\n if (OneObjectCache.objectMap.get(obj))\n throw new RangeError('object already cached');\n OneObjectCache.objectMap.set(obj, this);\n this.report();\n }\n /**\n * Returns a WeakMap-backed cache that's used to store expensive results\n * that are associated with a particular Temporal object instance.\n *\n * @param obj - object to associate with the cache\n */\n static getCacheForObject(obj) {\n let cache = OneObjectCache.objectMap.get(obj);\n if (!cache) {\n cache = new OneObjectCache();\n OneObjectCache.objectMap.set(obj, cache);\n }\n return cache;\n }\n}\nOneObjectCache.objectMap = new WeakMap();\nOneObjectCache.MAX_CACHE_ENTRIES = 1000;\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }) {\n const yearString = ES.ISOYearString(isoYear);\n const monthString = ES.ISODateTimePartString(isoMonth);\n const dayString = ES.ISODateTimePartString(isoDay);\n return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\nfunction simpleDateDiff(one, two) {\n return {\n years: one.year - two.year,\n months: one.month - two.month,\n days: one.day - two.day\n };\n}\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nclass HelperBase {\n constructor() {\n // The short era format works for all calendars except Japanese, which will\n // override.\n this.eraLength = 'short';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = true;\n }\n getFormatter() {\n // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n // calendars that are used. Note that the nonIsoHelperBase object is spread\n // into each each calendar's implementation before any cache is created, so\n // each calendar gets its own separate cached formatter.\n if (typeof this.formatter === 'undefined') {\n this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n era: this.eraLength,\n timeZone: 'UTC'\n });\n }\n return this.formatter;\n }\n isoToCalendarDate(isoDate, cache) {\n const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n let parts, isoString;\n try {\n isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n parts = dateTimeFormat.formatToParts(new Date(isoString));\n }\n catch (e) {\n throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n }\n const result = {};\n for (let { type, value } of parts) {\n if (type === 'year')\n result.eraYear = +value;\n // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n if (type === 'relatedYear')\n result.eraYear = +value;\n if (type === 'month') {\n const matches = /^([0-9]*)(.*?)$/.exec(value);\n if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n throw new RangeError(`Unexpected month: ${value}`);\n }\n // If the month has no numeric part (should only see this for the Hebrew\n // calendar with newer FF / Chromium versions; see\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n // placeholder month index of `1` and rely on the derived class to\n // calculate the correct month index from the month name stored in\n // `monthExtra`.\n result.month = matches[1] ? +matches[1] : 1;\n if (result.month < 1) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)');\n }\n if (result.month > 13) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n // The ICU formats for the Hebrew calendar no longer support a numeric\n // month format. So we'll rely on the derived class to interpret it.\n // `monthExtra` is also used on the Chinese calendar to handle a suffix\n // \"bis\" indicating a leap month.\n if (matches[2])\n result.monthExtra = matches[2];\n }\n if (type === 'day')\n result.day = +value;\n if (this.hasEra && type === 'era' && value != null && value !== '') {\n // The convention for Temporal era values is lowercase, so following\n // that convention in this prototype. Punctuation is removed, accented\n // letters are normalized, and spaces are replaced with dashes.\n // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n // The call to normalize() and the replacement regex deals with era\n // names that contain non-ASCII characters like Japanese eras. Also\n // ignore extra content in parentheses like JPN era date ranges.\n value = value.split(' (')[0];\n result.era = value\n .normalize('NFD')\n .replace(/[^-0-9 \\p{L}]/gu, '')\n .replace(' ', '-')\n .toLowerCase();\n }\n }\n if (result.eraYear === undefined) {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n // Translate eras that may be handled differently by Temporal vs. by Intl\n // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n if (this.reviseIntlEra) {\n const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n result.era = era;\n result.eraYear = eraYear;\n }\n if (this.checkIcuBugs)\n this.checkIcuBugs(isoDate);\n const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n if (calendarDate.year === undefined)\n throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.month === undefined)\n throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.day === undefined)\n throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n cache.set(key, calendarDate);\n // Also cache the reverse mapping\n ['constrain', 'reject'].forEach((overflow) => {\n const keyReverse = JSON.stringify({\n func: 'calendarToIsoDate',\n year: calendarDate.year,\n month: calendarDate.month,\n day: calendarDate.day,\n overflow,\n id: this.id\n });\n cache.set(keyReverse, isoDate);\n });\n return calendarDate;\n }\n validateCalendarDate(calendarDate) {\n const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n // the derived class must deal with it.\n if (monthExtra !== undefined)\n throw new RangeError('Unexpected `monthExtra` value');\n if (year === undefined && eraYear === undefined)\n throw new TypeError('year or eraYear is required');\n if (month === undefined && monthCode === undefined)\n throw new TypeError('month or monthCode is required');\n if (day === undefined)\n throw new RangeError('Missing day');\n if (monthCode !== undefined) {\n if (typeof monthCode !== 'string') {\n throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n }\n if (!/^M([01]?\\d)(L?)$/.test(monthCode))\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n if (this.constantEra) {\n if (era !== undefined && era !== this.constantEra) {\n throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n }\n if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n }\n }\n }\n /**\n * Allows derived calendars to add additional fields and/or to make\n * adjustments e.g. to set the era based on the date or to revise the month\n * number in lunisolar calendars per\n * https://github.com/tc39/proposal-temporal/issues/1203.\n *\n * The base implementation fills in missing values by assuming the simplest\n * possible calendar:\n * - no eras or a constant era defined in `.constantEra`\n * - non-lunisolar calendar (no leap months)\n * */\n adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', \n // This param is only used by derived classes\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromLegacyDate = false) {\n if (this.calendarType === 'lunisolar')\n throw new RangeError('Override required for lunisolar calendars');\n let calendarDate = calendarDateParam;\n this.validateCalendarDate(calendarDate);\n // For calendars that always use the same era, set it here so that derived\n // calendars won't need to implement this method simply to set the era.\n if (this.constantEra) {\n // year and eraYear always match when there's only one possible era\n const { year, eraYear } = calendarDate;\n calendarDate = {\n ...calendarDate,\n era: this.constantEra,\n year: year !== undefined ? year : eraYear,\n eraYear: eraYear !== undefined ? eraYear : year\n };\n }\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, monthCode } = calendarDate;\n ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n return { ...calendarDate, month, monthCode };\n }\n regulateMonthDayNaive(calendarDate, overflow, cache) {\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, day } = calendarDate;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n }\n return { ...calendarDate, month, day };\n }\n calendarToIsoDate(dateParam, overflow = 'constrain', cache) {\n const originalDate = dateParam;\n // First, normalize the calendar date to ensure that (year, month, day)\n // are all present, converting monthCode and eraYear if needed.\n let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n // Fix obviously out-of-bounds values. Values that are valid generally, but\n // not in this particular year, may not be caught here for some calendars.\n // If so, these will be handled lower below.\n date = this.regulateMonthDayNaive(date, overflow, cache);\n const { year, month, day } = date;\n const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n let cached = cache.get(key);\n if (cached)\n return cached;\n // If YMD are present in the input but the input has been constrained\n // already, then cache both the original value and the constrained value.\n let keyOriginal;\n if (originalDate.year !== undefined &&\n originalDate.month !== undefined &&\n originalDate.day !== undefined &&\n (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) {\n keyOriginal = JSON.stringify({\n func: 'calendarToIsoDate',\n year: originalDate.year,\n month: originalDate.month,\n day: originalDate.day,\n overflow,\n id: this.id\n });\n cached = cache.get(keyOriginal);\n if (cached)\n return cached;\n }\n // First, try to roughly guess the result\n let isoEstimate = this.estimateIsoDate({ year, month, day });\n const calculateSameMonthResult = (diffDays) => {\n // If the estimate is in the same year & month as the target, then we can\n // calculate the result exactly and short-circuit any additional logic.\n // This optimization assumes that months are continuous. It would break if\n // a calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So\n // this optimization should be safe for all ICU calendars.\n let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n if (date.day > this.minimumMonthLength(date)) {\n // There's a chance that the calendar date is out of range. Throw or\n // constrain if so.\n let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n if (overflow === 'reject') {\n throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n }\n // Back up a day at a time until we're not hanging over the month end\n testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n }\n }\n return testIsoEstimate;\n };\n let sign = 0;\n let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n let diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n }\n else {\n sign = this.compareCalendarDates(date, roundtripEstimate);\n }\n }\n // If the initial guess is not in the same month, then then bisect the\n // distance to the target, starting with 8 days per step.\n let increment = 8;\n let maybeConstrained = false;\n while (sign) {\n isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n const oldRoundtripEstimate = roundtripEstimate;\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n const oldSign = sign;\n sign = this.compareCalendarDates(date, roundtripEstimate);\n if (sign) {\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n // Signal the loop condition that there's a match.\n sign = 0;\n // If the calendar day is larger than the minimal length for this\n // month, then it might be larger than the actual length of the month.\n // So we won't cache it as the correct calendar date for this ISO\n // date.\n maybeConstrained = date.day > this.minimumMonthLength(date);\n }\n else if (oldSign && sign !== oldSign) {\n if (increment > 1) {\n // If the estimate overshot the target, try again with a smaller increment\n // in the reverse direction.\n increment /= 2;\n }\n else {\n // Increment is 1, and neither the previous estimate nor the new\n // estimate is correct. The only way that can happen is if the\n // original date was an invalid value that will be constrained or\n // rejected here.\n if (overflow === 'reject') {\n throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n }\n else {\n // To constrain, pick the earliest value\n const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n // If current value is larger, then back up to the previous value.\n if (order > 0)\n isoEstimate = this.addDaysIso(isoEstimate, -1);\n maybeConstrained = true;\n sign = 0;\n }\n }\n }\n }\n }\n cache.set(key, isoEstimate);\n if (keyOriginal)\n cache.set(keyOriginal, isoEstimate);\n if (date.year === undefined ||\n date.month === undefined ||\n date.day === undefined ||\n date.monthCode === undefined ||\n (this.hasEra && (date.era === undefined || date.eraYear === undefined))) {\n throw new RangeError('Unexpected missing property');\n }\n if (!maybeConstrained) {\n // Also cache the reverse mapping\n const keyReverse = JSON.stringify({\n func: 'isoToCalendarDate',\n isoYear: isoEstimate.year,\n isoMonth: isoEstimate.month,\n isoDay: isoEstimate.day,\n id: this.id\n });\n cache.set(keyReverse, date);\n }\n return isoEstimate;\n }\n temporalToCalendarDate(date, cache) {\n const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n const result = this.isoToCalendarDate(isoDate, cache);\n return result;\n }\n compareCalendarDates(date1Param, date2Param) {\n // `date1` and `date2` are already records. The calls below simply validate\n // that all three required fields are present.\n const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n if (date1.year !== date2.year)\n return ES.ComparisonResult(date1.year - date2.year);\n if (date1.month !== date2.month)\n return ES.ComparisonResult(date1.month - date2.month);\n if (date1.day !== date2.day)\n return ES.ComparisonResult(date1.day - date2.day);\n return 0;\n }\n /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n regulateDate(calendarDate, overflow = 'constrain', cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n return this.isoToCalendarDate(isoDate, cache);\n }\n addDaysIso(isoDate, days) {\n const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n return added;\n }\n addDaysCalendar(calendarDate, days, cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIso = this.addDaysIso(isoDate, days);\n const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n return addedCalendar;\n }\n addMonthsCalendar(calendarDateParam, months, overflow, cache) {\n let calendarDate = calendarDateParam;\n const { day } = calendarDate;\n for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n const { month } = calendarDate;\n const oldCalendarDate = calendarDate;\n const days = months < 0\n ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n : this.daysInMonth(calendarDate, cache);\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n let addedIso = this.addDaysIso(isoDate, days);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n // Normally, we can advance one month by adding the number of days in the\n // current month. However, if we're at the end of the current month and\n // the next month has fewer days, then we rolled over to the after-next\n // month. Below we detect this condition and back up until we're back in\n // the desired month.\n if (months > 0) {\n const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n while (calendarDate.month - 1 !== month % monthsInOldYear) {\n addedIso = this.addDaysIso(addedIso, -1);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n }\n }\n if (calendarDate.day !== day) {\n // try to retain the original day-of-month, if possible\n calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n }\n }\n if (overflow === 'reject' && calendarDate.day !== day) {\n throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n }\n return calendarDate;\n }\n addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) {\n const { year, day, monthCode } = calendarDate;\n const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n const initialDays = days + weeks * 7;\n const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n return addedDays;\n }\n untilCalendar(calendarOne, calendarTwo, largestUnit, cache) {\n let days = 0;\n let weeks = 0;\n let months = 0;\n let years = 0;\n switch (largestUnit) {\n case 'day':\n days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n break;\n case 'week': {\n const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n days = totalDays % 7;\n weeks = (totalDays - days) / 7;\n break;\n }\n case 'month':\n case 'year': {\n const diffYears = calendarTwo.year - calendarOne.year;\n const diffMonths = calendarTwo.month - calendarOne.month;\n const diffDays = calendarTwo.day - calendarOne.day;\n const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n if (!sign) {\n return { years: 0, months: 0, weeks: 0, days: 0 };\n }\n if (largestUnit === 'year' && diffYears) {\n const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0);\n years = isOneFurtherInYear ? diffYears - sign : diffYears;\n }\n const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n // Now we have less than one year remaining. Add one month at a time\n // until we go over the target, then back up one month and calculate\n // remaining days and weeks.\n let current;\n let next = yearsAdded;\n do {\n months += sign;\n current = next;\n next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n if (next.day !== calendarOne.day) {\n // In case the day was constrained down, try to un-constrain it\n next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n }\n } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n months -= sign; // correct for loop above which overshoots by 1\n const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n days = remainingDays;\n break;\n }\n }\n return { years, months, weeks, days };\n }\n daysInMonth(calendarDate, cache) {\n // Add enough days to roll over to the next month. One we're in the next\n // month, we can calculate the length of the current month. NOTE: This\n // algorithm assumes that months are continuous. It would break if a\n // calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So this\n // code should be safe for all ICU calendars.\n const { day } = calendarDate;\n const max = this.maximumMonthLength(calendarDate);\n const min = this.minimumMonthLength(calendarDate);\n // easiest case: we already know the month length if min and max are the same.\n if (min === max)\n return min;\n // Add enough days to get into the next month, without skipping it\n const increment = day <= max - min ? max : min;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIsoDate = this.addDaysIso(isoDate, increment);\n const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n // Now back up to the last day of the original month\n const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n return endOfMonthCalendar.day;\n }\n daysInPreviousMonth(calendarDate, cache) {\n const { day, month, year } = calendarDate;\n // Check to see if we already know the month length, and return it if so\n const previousMonthYear = month > 1 ? year : year - 1;\n let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n previousMonthDate = { ...previousMonthDate, month: previousMonth };\n const min = this.minimumMonthLength(previousMonthDate);\n const max = this.maximumMonthLength(previousMonthDate);\n if (min === max)\n return max;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n return lastDayOfPreviousMonthCalendar.day;\n }\n startOfCalendarYear(calendarDate) {\n return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n }\n startOfCalendarMonth(calendarDate) {\n return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n }\n calendarDaysUntil(calendarOne, calendarTwo, cache) {\n const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n return this.isoDaysUntil(oneIso, twoIso);\n }\n isoDaysUntil(oneIso, twoIso) {\n const duration = ES.DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day');\n return duration.days;\n }\n monthDayFromFields(fields, overflow, cache) {\n let { year, month, monthCode, day, era, eraYear } = fields;\n if (monthCode === undefined) {\n if (year === undefined && (era === undefined || eraYear === undefined)) {\n throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required');\n }\n ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow));\n }\n let isoYear, isoMonth, isoDay;\n let closestCalendar, closestIso;\n // Look backwards starting from the calendar year of 1972-01-01 up to 100\n // calendar years to find a year that has this month and day. Normal months\n // and days will match immediately, but for leap days and leap months we may\n // have to look for a while.\n const startDateIso = { year: 1972, month: 1, day: 1 };\n const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache);\n for (let i = 0; i < 100; i++) {\n const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache);\n const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n return { month: isoMonth, day: isoDay, year: isoYear };\n }\n else if (overflow === 'constrain') {\n // non-ISO constrain algorithm tries to find the closest date in a matching month\n if (closestCalendar === undefined ||\n (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n roundTripCalendarDate.day > closestCalendar.day)) {\n closestCalendar = roundTripCalendarDate;\n closestIso = isoDate;\n }\n }\n }\n if (overflow === 'constrain' && closestIso !== undefined)\n return closestIso;\n throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n }\n}\nclass HebrewHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'hebrew';\n this.calendarType = 'lunisolar';\n this.months = {\n Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n };\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate) {\n const { year } = calendarDate;\n // FYI: In addition to adding a month in leap years, the Hebrew calendar\n // also has per-year changes to the number of days of Heshvan and Kislev.\n // Given that these can be calculated by counting the number of days in\n // those months, I assume that these DO NOT need to be exposed as\n // Hebrew-only prototype fields or methods.\n return (7 * year + 1) % 19 < 7;\n }\n monthsInYear(calendarDate) {\n return this.inLeapYear(calendarDate) ? 13 : 12;\n }\n minimumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'min');\n }\n maximumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'max');\n }\n minMaxMonthLength(calendarDate, minOrMax) {\n const { month, year } = calendarDate;\n const monthCode = this.getMonthCode(year, month);\n const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n if (monthInfo === undefined)\n throw new RangeError(`unmatched Hebrew month: ${month}`);\n const daysInMonth = monthInfo[1].days;\n return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n }\n /** Take a guess at what ISO date a particular calendar date corresponds to */\n estimateIsoDate(calendarDate) {\n const { year } = calendarDate;\n return { year: year - 3760, month: 1, day: 1 };\n }\n getMonthCode(year, month) {\n if (this.inLeapYear({ year })) {\n return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n }\n else {\n return buildMonthCode(month);\n }\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n // The incoming type is actually CalendarDate (same as args to\n // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n // reassignments below, so as an alternative to 10+ type casts, we'll lie\n // here and claim that the type has `day` and `year` filled in already.\n let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate;\n if (year === undefined && eraYear !== undefined)\n year = eraYear;\n if (eraYear === undefined && year !== undefined)\n eraYear = year;\n if (fromLegacyDate) {\n // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n // output returns the numeric equivalent of `month` as a string, meaning\n // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n // means Adar. In this case, `month` will already be correct and no action\n // is needed. However, in Node 14 and later formatToParts returns the name\n // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n // correct `month` using the string name as a key.\n if (monthExtra) {\n const monthInfo = this.months[monthExtra];\n if (!monthInfo)\n throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n }\n // Because we're getting data from legacy Date, then `month` will always be present\n monthCode = this.getMonthCode(year, month);\n const result = { year, month: month, day, era: undefined, eraYear, monthCode };\n return result;\n }\n else {\n // When called without input coming from legacy Date output, simply ensure\n // that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (month === undefined) {\n if (monthCode.endsWith('L')) {\n if (monthCode !== 'M05L') {\n throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n }\n month = 6;\n if (!this.inLeapYear({ year })) {\n if (overflow === 'reject') {\n throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n }\n else {\n // constrain to last day of previous month (Av)\n month = 5;\n day = 30;\n monthCode = 'M05';\n }\n }\n }\n else {\n month = monthCodeNumberPart(monthCode);\n // if leap month is before this one, the month index is one more than the month code\n if (this.inLeapYear({ year }) && month >= 6)\n month++;\n const largestMonth = this.monthsInYear({ year });\n if (month < 1 || month > largestMonth)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n }\n else {\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n else {\n month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n if (monthCode === undefined) {\n monthCode = this.getMonthCode(year, month);\n }\n else {\n const calculatedMonthCode = this.getMonthCode(year, month);\n if (calculatedMonthCode !== monthCode) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n }\n }\n }\n return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear };\n }\n }\n}\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nclass IslamicBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunar';\n this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n this.DAYS_PER_ISO_YEAR = 365.2425;\n this.constantEra = 'ah';\n }\n inLeapYear(calendarDate, cache) {\n // In leap years, the 12th month has 30 days. In non-leap years: 29.\n const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n return days === 30;\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n }\n}\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic';\n }\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-umalqura';\n }\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-tbla';\n }\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-civil';\n }\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-rgsa';\n }\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamicc';\n }\n}\nclass PersianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'persian';\n this.calendarType = 'solar';\n this.constantEra = 'ap';\n }\n inLeapYear(calendarDate, cache) {\n // Same logic (count days in the last month) for Persian as for Islamic,\n // even though Persian is solar and Islamic is lunar.\n return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 29;\n return month <= 6 ? 31 : 30;\n }\n maximumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 30;\n return month <= 6 ? 31 : 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: year + 621, month: 1, day: 1 };\n }\n}\nclass IndianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'indian';\n this.calendarType = 'solar';\n this.constantEra = 'saka';\n // Indian months always start at the same well-known Gregorian month and\n // day. So this conversion is easy and fast. See\n // https://en.wikipedia.org/wiki/Indian_national_calendar\n this.months = {\n 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n 2: { length: 31, month: 4, day: 21 },\n 3: { length: 31, month: 5, day: 22 },\n 4: { length: 31, month: 6, day: 22 },\n 5: { length: 31, month: 7, day: 23 },\n 6: { length: 31, month: 8, day: 23 },\n 7: { length: 30, month: 9, day: 23 },\n 8: { length: 30, month: 10, day: 23 },\n 9: { length: 30, month: 11, day: 22 },\n 10: { length: 30, month: 12, day: 22 },\n 11: { length: 30, month: 1, nextYear: true, day: 21 },\n 12: { length: 30, month: 2, nextYear: true, day: 20 }\n };\n // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n // calendar output to fail for all dates before 0001-01-01 ISO. For example,\n // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n // expected.\n this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n }\n inLeapYear(calendarDate) {\n // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n // Years are counted in the Saka era, which starts its year 0 in the year 78\n // of the Common Era. To determine leap years, add 78 to the Saka year – if\n // the result is a leap year in the Gregorian calendar, then the Saka year\n // is a leap year as well.\n return isGregorianLeapYear(calendarDate.year + 78);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n maximumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n getMonthInfo(calendarDate) {\n const { month } = calendarDate;\n let monthInfo = this.months[month];\n if (monthInfo === undefined)\n throw new RangeError(`Invalid month: ${month}`);\n if (this.inLeapYear(calendarDate) && monthInfo.leap)\n monthInfo = monthInfo.leap;\n return monthInfo;\n }\n estimateIsoDate(calendarDateParam) {\n // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n // calendar fast!\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const monthInfo = this.getMonthInfo(calendarDate);\n const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n const isoMonth = monthInfo.month;\n const isoDay = monthInfo.day;\n const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n return isoDate;\n }\n checkIcuBugs(isoDate) {\n if (this.vulnerableToBceBug && isoDate.year < 1) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n }\n}\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam) {\n let eras = erasParam;\n if (eras.length === 0) {\n throw new RangeError('Invalid era data: eras are required');\n }\n if (eras.length === 1 && eras[0].reverseOf) {\n throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n }\n if (eras.length === 1 && !eras[0].name) {\n throw new RangeError('Invalid era data: at least one named era is required');\n }\n if (eras.filter((e) => e.reverseOf != null).length > 1) {\n throw new RangeError('Invalid era data: only one era can count years backwards');\n }\n // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n // eras can never be anchors. The era without an `anchorEpoch` property is the\n // anchor.\n let anchorEra;\n eras.forEach((e) => {\n if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n if (anchorEra)\n throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n anchorEra = e;\n e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n }\n else if (!e.name) {\n throw new RangeError('If era name is blank, it must be the anchor era');\n }\n });\n // If the era name is undefined, then it's an anchor that doesn't interact\n // with eras at all. For example, Japanese `year` is always the same as ISO\n // `year`. So this \"era\" is the anchor era but isn't used for era matching.\n // Strip it from the list that's returned.\n eras = eras.filter((e) => e.name);\n eras.forEach((e) => {\n // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n // Replace the string-valued \"reverseOf\" property with the actual era object\n // that's reversed.\n const { reverseOf } = e;\n if (reverseOf) {\n const reversedEra = eras.find((era) => era.name === reverseOf);\n if (reversedEra === undefined)\n throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n e.reverseOf = reversedEra;\n e.anchorEpoch = reversedEra.anchorEpoch;\n e.isoEpoch = reversedEra.isoEpoch;\n }\n if (e.anchorEpoch.month === undefined)\n e.anchorEpoch.month = 1;\n if (e.anchorEpoch.day === undefined)\n e.anchorEpoch.day = 1;\n });\n // Ensure that the latest epoch is first in the array. This lets us try to\n // match eras in index order, with the last era getting the remaining older\n // years. Any reverse-signed era must be at the end.\n ArraySort.call(eras, (e1, e2) => {\n if (e1.reverseOf)\n return 1;\n if (e2.reverseOf)\n return -1;\n if (!e1.isoEpoch || !e2.isoEpoch)\n throw new RangeError('Invalid era data: missing ISO epoch');\n return e2.isoEpoch.year - e1.isoEpoch.year;\n });\n // If there's a reversed era, then the one before it must be the era that's\n // being reversed.\n const lastEraReversed = eras[eras.length - 1].reverseOf;\n if (lastEraReversed) {\n if (lastEraReversed !== eras[eras.length - 2])\n throw new RangeError('Invalid era data: invalid reverse-sign era');\n }\n // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n // zero-based index, with the oldest era being zero. This format is used by\n // older versions of ICU data.\n eras.forEach((e, i) => {\n e.genericName = `era${eras.length - 1 - i}`;\n });\n return { eras: eras, anchorEra: (anchorEra || eras[0]) };\n}\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n/** Base for all Gregorian-like calendars. */\nclass GregorianBaseHelper extends HelperBase {\n constructor(id, originalEras) {\n super();\n this.calendarType = 'solar';\n // Several calendars based on the Gregorian calendar use Julian dates (not\n // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n .startsWith('12');\n this.calendarIsVulnerableToJulianBug = false;\n this.id = id;\n const { eras, anchorEra } = adjustEras(originalEras);\n this.anchorEra = anchorEra;\n this.eras = eras;\n }\n inLeapYear(calendarDate) {\n // Calendars that don't override this method use the same months and leap\n // years as Gregorian. Once we know the ISO year corresponding to the\n // calendar year, we'll know if it's a leap year or not.\n const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n return isGregorianLeapYear(year);\n }\n monthsInYear( /* calendarDate */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 2)\n return this.inLeapYear(calendarDate) ? 29 : 28;\n return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n /** Fill in missing parts of the (year, era, eraYear) tuple */\n completeEraYear(calendarDate) {\n const checkField = (name, value) => {\n const currentValue = calendarDate[name];\n if (currentValue != null && currentValue != value) {\n throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n }\n };\n const eraFromYear = (year) => {\n let eraYear;\n const adjustedCalendarDate = { ...calendarDate, year };\n const matchingEra = this.eras.find((e, i) => {\n if (i === this.eras.length - 1) {\n if (e.reverseOf) {\n // This is a reverse-sign era (like BCE) which must be the oldest\n // era. Count years backwards.\n if (year > 0)\n throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n eraYear = e.anchorEpoch.year - year;\n return true;\n }\n // last era always gets all \"leftover\" (older than epoch) years,\n // so no need for a comparison like below.\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n if (comparison >= 0) {\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n return false;\n });\n if (!matchingEra)\n throw new RangeError(`Year ${year} was not matched by any era`);\n return { eraYear: eraYear, era: matchingEra.name };\n };\n let { year, eraYear, era } = calendarDate;\n if (year != null) {\n ({ eraYear, era } = eraFromYear(year));\n checkField('era', era);\n checkField('eraYear', eraYear);\n }\n else if (eraYear != null) {\n const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n if (!matchingEra)\n throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n if (eraYear < 1 && matchingEra.reverseOf) {\n throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n }\n if (matchingEra.reverseOf) {\n year = matchingEra.anchorEpoch.year - eraYear;\n }\n else {\n year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n }\n checkField('year', year);\n // We'll accept dates where the month/day is earlier than the start of\n // the era or after its end as long as it's in the same year. If that\n // happens, we'll adjust the era/eraYear pair to be the correct era for\n // the `year`.\n ({ eraYear, era } = eraFromYear(year));\n }\n else {\n throw new RangeError('Either `year` or `eraYear` and `era` are required');\n }\n return { ...calendarDate, year, eraYear, era };\n }\n adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') {\n let calendarDate = calendarDateParam;\n // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n const { month, monthCode } = calendarDate;\n if (month === undefined)\n calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) };\n this.validateCalendarDate(calendarDate);\n calendarDate = this.completeEraYear(calendarDate);\n return super.adjustCalendarDate(calendarDate, cache, overflow);\n }\n estimateIsoDate(calendarDateParam) {\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const { year, month, day } = calendarDate;\n const { anchorEra } = this;\n const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n }\n checkIcuBugs(isoDate) {\n if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n if (beforeJulianSwitch) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)');\n }\n }\n }\n}\nclass OrthodoxBaseHelper extends GregorianBaseHelper {\n constructor(id, originalEras) {\n super(id, originalEras);\n }\n inLeapYear(calendarDate) {\n // Leap years happen one year before the Julian leap year. Note that this\n // calendar is based on the Julian calendar which has a leap year every 4\n // years, unlike the Gregorian calendar which doesn't have leap years on\n // years divisible by 100 except years divisible by 400.\n //\n // Note that we're assuming that leap years in before-epoch times match\n // how leap years are defined now. This is probably not accurate but I'm\n // not sure how better to do it.\n const { year } = calendarDate;\n return (year + 1) % 4 === 0;\n }\n monthsInYear( /* calendarDate */) {\n return 13;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n if (month === 13)\n return this.inLeapYear(calendarDate) ? 6 : 5;\n return 30;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n}\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n// two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n// zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n constructor() {\n super('coptic', [\n { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n { name: 'era0', reverseOf: 'era1' }\n ]);\n }\n}\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethiopic', [\n { name: 'aa', isoEpoch: { year: -5492, month: 7, day: 17 } },\n { name: 'am', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n ]);\n }\n}\nclass RocHelper extends GregorianBaseHelper {\n constructor() {\n super('roc', [\n { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n { name: 'before-roc', reverseOf: 'minguo' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass BuddhistHelper extends GregorianBaseHelper {\n constructor() {\n super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass GregoryHelper extends GregorianBaseHelper {\n constructor() {\n super('gregory', [\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n }\n reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) {\n let { era, eraYear } = calendarDate;\n // Firefox 96 introduced a bug where the `'short'` format of the era\n // option mistakenly returns the one-letter (narrow) format instead. The\n // code below handles either the correct or Firefox-buggy format. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n if (era === 'bc' || era === 'b')\n era = 'bce';\n if (era === 'ad' || era === 'a')\n era = 'ce';\n return { era, eraYear };\n }\n}\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n// challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n// dates are modified, leading to considerable churn which is not good for\n// Temporal use.\n// - The earliest era (in 645 CE) may not end up being the earliest depending\n// on future historical scholarship\n// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n// that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n constructor() {\n super('japanese', [\n // The Japanese calendar `year` is just the ISO year, because (unlike other\n // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n // The last 3 Japanese eras confusingly return only one character in the\n // default \"short\" era, so need to use the long format.\n this.eraLength = 'long';\n }\n reviseIntlEra(calendarDate, isoDate) {\n const { era, eraYear } = calendarDate;\n const { year: isoYear } = isoDate;\n if (this.eras.find((e) => e.name === era))\n return { era, eraYear };\n return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear });\n }\n}\nclass ChineseBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunisolar';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate, cache) {\n const months = this.getMonthList(calendarDate.year, cache);\n return ObjectEntries(months).length === 13;\n }\n monthsInYear(calendarDate, cache) {\n return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n getMonthList(calendarYear, cache) {\n if (calendarYear === undefined) {\n throw new TypeError('Missing year');\n }\n const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n const getCalendarDate = (isoYear, daysPastFeb1) => {\n const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n const legacyDate = new Date(isoStringFeb1);\n // Now add the requested number of days, which may wrap to the next month.\n legacyDate.setUTCDate(daysPastFeb1 + 1);\n const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value;\n const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value;\n let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear');\n if (calendarYearToVerify !== undefined) {\n calendarYearToVerify = +calendarYearToVerify.value;\n }\n else {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n return { calendarMonthString, calendarDay, calendarYearToVerify };\n };\n // First, find a date close to Chinese New Year. Feb 17 will either be in\n // the first month or near the end of the last month of the previous year.\n let isoDaysDelta = 17;\n let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n // If we didn't guess the first month correctly, add (almost in some months)\n // a lunar month\n if (calendarMonthString !== '1') {\n isoDaysDelta += 29;\n ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n }\n // Now back up to near the start of the first month, but not too near that\n // off-by-one issues matter.\n isoDaysDelta -= calendarDay - 5;\n const result = {};\n let monthIndex = 1;\n let oldCalendarDay;\n let oldMonthString;\n let done = false;\n do {\n ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n if (oldCalendarDay) {\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n }\n if (calendarYearToVerify !== calendarYear) {\n done = true;\n }\n else {\n result[calendarMonthString] = { monthIndex: monthIndex++ };\n // Move to the next month. Because months are sometimes 29 days, the day of the\n // calendar month will move forward slowly but not enough to flip over to a new\n // month before the loop ends at 12-13 months.\n isoDaysDelta += 30;\n }\n oldCalendarDay = calendarDay;\n oldMonthString = calendarMonthString;\n } while (!done);\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n cache.set(key, result);\n return result;\n }\n estimateIsoDate(calendarDate) {\n const { year, month } = calendarDate;\n return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n if (fromLegacyDate) {\n // Legacy Date output returns a string that's an integer with an optional\n // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n // month. Below we'll normalize the output.\n year = eraYear;\n if (monthExtra && monthExtra !== 'bis')\n throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n const monthCode = buildMonthCode(month, monthExtra !== undefined);\n const monthString = `${month}${monthExtra || ''}`;\n const months = this.getMonthList(year, cache);\n const monthInfo = months[monthString];\n if (monthInfo === undefined)\n throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n month = monthInfo.monthIndex;\n return { year: year, month, day: day, era: undefined, eraYear, monthCode };\n }\n else {\n // When called without input coming from legacy Date output,\n // simply ensure that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (year === undefined)\n year = eraYear;\n if (eraYear === undefined)\n eraYear = year;\n if (month === undefined) {\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n let monthInfo = months[numberPart];\n month = monthInfo && monthInfo.monthIndex;\n // If this leap month isn't present in this year, constrain down to the last day of the previous month.\n if (month === undefined &&\n monthCode.endsWith('L') &&\n !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) &&\n overflow === 'constrain') {\n let withoutML = monthCode.slice(1, -1);\n if (withoutML[0] === '0')\n withoutML = withoutML.slice(1);\n monthInfo = months[withoutML];\n if (monthInfo) {\n ({ daysInMonth: day, monthIndex: month } = monthInfo);\n monthCode = buildMonthCode(withoutML);\n }\n }\n if (month === undefined) {\n throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n }\n }\n else if (monthCode === undefined) {\n const months = this.getMonthList(year, cache);\n const monthEntries = ObjectEntries(months);\n const largestMonth = monthEntries.length;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength());\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n }\n const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n if (matchingMonthEntry === undefined) {\n throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n }\n monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1);\n }\n else {\n // Both month and monthCode are present. Make sure they don't conflict.\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n const monthInfo = months[numberPart];\n if (!monthInfo)\n throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n if (month !== monthInfo.monthIndex) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n }\n }\n return {\n ...calendarDate,\n year: year,\n eraYear,\n month,\n monthCode: monthCode,\n day: day\n };\n }\n }\n}\nclass ChineseHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'chinese';\n }\n}\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'dangi';\n }\n}\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nconst nonIsoImpl = {\n // `helper` is added when this object is spread into each calendar's\n // implementation\n helper: undefined,\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n const result = ES.CreateTemporalDate(year, month, day, calendar);\n cache.setObject(result);\n return result;\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []);\n const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n const result = ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day);\n cache.setObject(result);\n return result;\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n // All built-in calendars require `day`, but some allow other fields to be\n // substituted for `month`. And for lunisolar calendars, either `monthCode`\n // or `year` must be provided because `month` is ambiguous without a year or\n // a code.\n const cache = new OneObjectCache();\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n // `year` is a reference year where this month/day exists in this calendar\n const result = ES.CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year);\n cache.setObject(result);\n return result;\n },\n fields(fieldsParam) {\n let fields = fieldsParam;\n if (ArrayIncludes.call(fields, 'year'))\n fields = [...fields, 'era', 'eraYear'];\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const fieldsCopy = { ...fields };\n const additionalFieldsCopy = { ...additionalFields };\n // era and eraYear are intentionally unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy;\n const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy;\n if (newMonth === undefined && newMonthCode === undefined) {\n original.month = month;\n original.monthCode = monthCode;\n }\n if (newYear === undefined && newEra === undefined && newEraYear === undefined) {\n // Only `year` is needed. We don't set era and eraYear because it's\n // possible to create a conflict for eras that start or end mid-year. See\n // https://github.com/tc39/proposal-temporal/issues/1784.\n original.year = year;\n }\n return { ...original, ...additionalFieldsCopy };\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n const { year, month, day } = isoAdded;\n const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendar);\n // The new object's cache starts with the cache of the old object\n const newCache = new OneObjectCache(cache);\n newCache.setObject(newTemporalObject);\n return newTemporalObject;\n },\n dateUntil(one, two, largestUnit) {\n const cacheOne = OneObjectCache.getCacheForObject(one);\n const cacheTwo = OneObjectCache.getCacheForObject(two);\n const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n return result;\n },\n year(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.year;\n },\n month(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.month;\n },\n day(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.day;\n },\n era(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.era;\n },\n eraYear(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.eraYear;\n },\n monthCode(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.monthCode;\n },\n dayOfWeek(date) {\n return impl['iso8601'].dayOfWeek(date);\n },\n dayOfYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.isoToCalendarDate(date, cache);\n const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n return diffDays + 1;\n },\n weekOfYear(date) {\n return impl['iso8601'].weekOfYear(date);\n },\n daysInWeek(date) {\n return impl['iso8601'].daysInWeek(date);\n },\n daysInMonth(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n // Easy case: if the helper knows the length without any heavy calculation.\n const max = this.helper.maximumMonthLength(calendarDate);\n const min = this.helper.minimumMonthLength(calendarDate);\n if (max === min)\n return max;\n // The harder case is where months vary every year, e.g. islamic calendars.\n // Find the answer by calculating the difference in days between the first\n // day of the current month and the first day of the next month.\n const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n return result;\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n return result;\n },\n monthsInYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.monthsInYear(calendarDate, cache);\n return result;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.inLeapYear(calendarDate, cache);\n return result;\n }\n};\nfor (const Helper of [\n HebrewHelper,\n PersianHelper,\n EthiopicHelper,\n EthioaaHelper,\n CopticHelper,\n ChineseHelper,\n DangiHelper,\n RocHelper,\n IndianHelper,\n BuddhistHelper,\n GregoryHelper,\n JapaneseHelper,\n IslamicHelper,\n IslamicUmalquraHelper,\n IslamicTblaHelper,\n IslamicCivilHelper,\n IslamicRgsaHelper,\n IslamicCcHelper\n]) {\n const helper = new Helper();\n // Clone the singleton non-ISO implementation that's the same for all\n // calendars. The `helper` property contains per-calendar logic.\n impl[helper.id] = { ...nonIsoImpl, helper };\n}\n//# sourceMappingURL=calendar.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDate {\n constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalDateSlots. This check\n // exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get year() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateFromFields(calendar, fields, options);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n }\n add(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.ToTemporalDuration(temporalDurationLike);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n subtract(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDate(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalDateToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n }\n toPlainDateTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n let timeZone, temporalTime;\n if (ES.IsObject(item)) {\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n // The cast below is needed because it's possible here for\n // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`,\n // not a TimeZoneProtocol.\n // TODO: should we check for that shape to improve on the (bad) error\n // message that the caller will get from ToTemporalTimeZone?\n timeZone = ES.ToTemporalTimeZone(item);\n }\n else {\n timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n temporalTime = item.plainTime;\n }\n }\n else {\n timeZone = ES.ToTemporalTimeZone(item);\n }\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0;\n if (temporalTime !== undefined) {\n temporalTime = ES.ToTemporalTime(temporalTime);\n hour = GetSlot(temporalTime, ISO_HOUR);\n minute = GetSlot(temporalTime, ISO_MINUTE);\n second = GetSlot(temporalTime, ISO_SECOND);\n millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n }\n const dt = ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDate(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDate(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n//# sourceMappingURL=plaindate.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDateTime {\n constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const hour = ES.ToIntegerThrowOnInfinity(hourParam);\n const minute = ES.ToIntegerThrowOnInfinity(minuteParam);\n const second = ES.ToIntegerThrowOnInfinity(secondParam);\n const millisecond = ES.ToIntegerThrowOnInfinity(millisecondParam);\n const microsecond = ES.ToIntegerThrowOnInfinity(microsecondParam);\n const nanosecond = ES.ToIntegerThrowOnInfinity(nanosecondParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get year() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get hour() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike);\n const options = ES.GetOptionsObject(optionsParam);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const props = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-time-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n let year = GetSlot(this, ISO_YEAR);\n let month = GetSlot(this, ISO_MONTH);\n let day = GetSlot(this, ISO_DAY);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDateTime(otherParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const showCalendar = ES.ToShowCalendarOption(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n }\n toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation);\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n toPlainDate() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n toPlainTime() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(this);\n }\n getISOFields() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDateTime(oneParam);\n const two = ES.ToTemporalDateTime(twoParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n//# sourceMappingURL=plaindatetime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class Duration {\n constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) {\n const years = ES.ToIntegerWithoutRounding(yearsParam);\n const months = ES.ToIntegerWithoutRounding(monthsParam);\n const weeks = ES.ToIntegerWithoutRounding(weeksParam);\n const days = ES.ToIntegerWithoutRounding(daysParam);\n const hours = ES.ToIntegerWithoutRounding(hoursParam);\n const minutes = ES.ToIntegerWithoutRounding(minutesParam);\n const seconds = ES.ToIntegerWithoutRounding(secondsParam);\n const milliseconds = ES.ToIntegerWithoutRounding(millisecondsParam);\n const microseconds = ES.ToIntegerWithoutRounding(microsecondsParam);\n const nanoseconds = ES.ToIntegerWithoutRounding(nanosecondsParam);\n ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n CreateSlots(this);\n SetSlot(this, YEARS, years);\n SetSlot(this, MONTHS, months);\n SetSlot(this, WEEKS, weeks);\n SetSlot(this, DAYS, days);\n SetSlot(this, HOURS, hours);\n SetSlot(this, MINUTES, minutes);\n SetSlot(this, SECONDS, seconds);\n SetSlot(this, MILLISECONDS, milliseconds);\n SetSlot(this, MICROSECONDS, microseconds);\n SetSlot(this, NANOSECONDS, nanoseconds);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get years() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, YEARS);\n }\n get months() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MONTHS);\n }\n get weeks() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, WEEKS);\n }\n get days() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, DAYS);\n }\n get hours() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, HOURS);\n }\n get minutes() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MINUTES);\n }\n get seconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, SECONDS);\n }\n get milliseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MILLISECONDS);\n }\n get microseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MICROSECONDS);\n }\n get nanoseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, NANOSECONDS);\n }\n get sign() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS));\n }\n get blank() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return (ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0);\n }\n with(durationLike) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const props = ES.PrepareTemporalFields(durationLike, \n // NOTE: Field order here is important.\n [\n 'days',\n 'hours',\n 'microseconds',\n 'milliseconds',\n 'minutes',\n 'months',\n 'nanoseconds',\n 'seconds',\n 'weeks',\n 'years'\n ], 'partial');\n if (!props) {\n throw new TypeError('invalid duration-like');\n }\n const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props;\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n negated() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.CreateNegatedTemporalDuration(this);\n }\n abs() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS)));\n }\n add(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n }\n subtract(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n let defaultLargestUnit = ES.DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n let smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined);\n let smallestUnitPresent = true;\n if (!smallestUnit) {\n smallestUnitPresent = false;\n smallestUnit = 'nanosecond';\n }\n defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']);\n let largestUnitPresent = true;\n if (!largestUnit) {\n largestUnitPresent = false;\n largestUnit = defaultLargestUnit;\n }\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (!smallestUnitPresent && !largestUnitPresent) {\n throw new RangeError('at least one of smallestUnit or largestUnit is required');\n }\n if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const roundingIncrement = ES.ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let relativeTo = ES.ToRelativeTemporalObject(options);\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n relativeTo = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo));\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n total(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n if (optionsParam === undefined)\n throw new TypeError('options argument is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('unit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n // Convert larger units down to days\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n let intermediate;\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate));\n // Finally, truncate to the correct unit and calculate remainder\n const { total } = ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo);\n return total;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n if (precision === 'minute')\n throw new RangeError('smallestUnit must not be \"minute\"');\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDurationToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') {\n return new Intl.DurationFormat(locales, options).format(this);\n }\n console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n return ES.TemporalDurationToString(this);\n }\n valueOf() {\n throw new TypeError('use compare() to compare Temporal.Duration');\n }\n static from(item) {\n if (ES.IsTemporalDuration(item)) {\n return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS));\n }\n return ES.ToTemporalDuration(item);\n }\n static compare(oneParam, twoParam, optionsParam = undefined) {\n const one = ES.ToTemporalDuration(oneParam);\n const two = ES.ToTemporalDuration(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n const y1 = GetSlot(one, YEARS);\n const mon1 = GetSlot(one, MONTHS);\n const w1 = GetSlot(one, WEEKS);\n let d1 = GetSlot(one, DAYS);\n const h1 = GetSlot(one, HOURS);\n const min1 = GetSlot(one, MINUTES);\n const s1 = GetSlot(one, SECONDS);\n const ms1 = GetSlot(one, MILLISECONDS);\n const µs1 = GetSlot(one, MICROSECONDS);\n let ns1 = GetSlot(one, NANOSECONDS);\n const y2 = GetSlot(two, YEARS);\n const mon2 = GetSlot(two, MONTHS);\n const w2 = GetSlot(two, WEEKS);\n let d2 = GetSlot(two, DAYS);\n const h2 = GetSlot(two, HOURS);\n const min2 = GetSlot(two, MINUTES);\n const s2 = GetSlot(two, SECONDS);\n const ms2 = GetSlot(two, MILLISECONDS);\n const µs2 = GetSlot(two, MICROSECONDS);\n let ns2 = GetSlot(two, NANOSECONDS);\n const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n }\n const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n//# sourceMappingURL=duration.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainMonthDay {\n constructor(isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar(), referenceISOYearParam = 1972) {\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISOYear = ES.ToIntegerThrowOnInfinity(referenceISOYearParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoMonth and isoDay are required');\n }\n ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n }\n get monthCode() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n with(temporalMonthDayLike, optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalMonthDayLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid month-day-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarMonthDayFromFields(calendar, fields, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalMonthDay(otherParam);\n for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalMonthDayToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalMonthDayToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['year']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalMonthDay(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR));\n }\n return ES.ToTemporalMonthDay(item, options);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n//# sourceMappingURL=plainmonthday.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nconst instant = () => {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.GetISO8601Calendar();\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return zonedDateTime(ES.GetISO8601Calendar(), temporalTimeZoneLike);\n};\nconst plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZone = () => {\n return ES.SystemTimeZone();\n};\nexport const Now = {\n instant,\n plainDateTime,\n plainDateTimeISO,\n plainDate,\n plainDateISO,\n plainTimeISO,\n timeZone,\n zonedDateTime,\n zonedDateTimeISO,\n [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n value: 'Temporal.Now',\n writable: false,\n enumerable: false,\n configurable: true\n});\n//# sourceMappingURL=now.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectAssign = Object.assign;\nfunction TemporalTimeToString(time, precision, options = undefined) {\n let hour = GetSlot(time, ISO_HOUR);\n let minute = GetSlot(time, ISO_MINUTE);\n let second = GetSlot(time, ISO_SECOND);\n let millisecond = GetSlot(time, ISO_MILLISECOND);\n let microsecond = GetSlot(time, ISO_MICROSECOND);\n let nanosecond = GetSlot(time, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const hourString = ES.ISODateTimePartString(hour);\n const minuteString = ES.ISODateTimePartString(minute);\n const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n return `${hourString}:${minuteString}${seconds}`;\n}\nexport class PlainTime {\n constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) {\n const isoHour = ES.ToIntegerThrowOnInfinity(isoHourParam);\n const isoMinute = ES.ToIntegerThrowOnInfinity(isoMinuteParam);\n const isoSecond = ES.ToIntegerThrowOnInfinity(isoSecondParam);\n const isoMillisecond = ES.ToIntegerThrowOnInfinity(isoMillisecondParam);\n const isoMicrosecond = ES.ToIntegerThrowOnInfinity(isoMicrosecondParam);\n const isoNanosecond = ES.ToIntegerThrowOnInfinity(isoNanosecondParam);\n ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n CreateSlots(this);\n SetSlot(this, ISO_HOUR, isoHour);\n SetSlot(this, ISO_MINUTE, isoMinute);\n SetSlot(this, ISO_SECOND, isoSecond);\n SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n SetSlot(this, CALENDAR, ES.GetISO8601Calendar());\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get calendar() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n // PlainTime's calendar isn't settable, so can't be a userland calendar\n return GetSlot(this, CALENDAR);\n }\n get hour() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n with(temporalTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalTimeLike);\n const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const fields = ES.ToTemporalTimeRecord(this);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n equals(otherParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalTime(otherParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return true;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return TemporalTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n }\n toPlainDateTime(temporalDateParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument');\n }\n const dateLike = item.plainDate;\n if (dateLike === undefined) {\n throw new TypeError('missing date property');\n }\n const temporalDate = ES.ToTemporalDate(dateLike);\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n throw new TypeError('missing timeZone property');\n }\n const timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n getISOFields() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n if (ES.IsTemporalTime(item)) {\n return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n return ES.ToTemporalTime(item, overflow);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalTime(oneParam);\n const two = ES.ToTemporalTime(twoParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n//# sourceMappingURL=plaintime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { TIMEZONE_ID, EPOCHNANOSECONDS, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class TimeZone {\n constructor(timeZoneIdentifierParam) {\n // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n // This check exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: identifier is required');\n }\n const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n CreateSlots(this);\n SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n getOffsetNanosecondsFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n return ES.ParseTimeZoneOffsetString(id);\n }\n return ES.GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id);\n }\n getOffsetStringFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n return ES.BuiltinTimeZoneGetOffsetStringFor(this, instant);\n }\n getPlainDateTimeFor(instantParam, calendarParam = ES.GetISO8601Calendar()) {\n const instant = ES.ToTemporalInstant(instantParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar);\n }\n getInstantFor(dateTimeParam, optionsParam = undefined) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n return ES.BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation);\n }\n getPossibleInstantsFor(dateTimeParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n const epochNs = ES.GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n const offsetNs = ES.ParseTimeZoneOffsetString(id);\n return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n }\n const possibleEpochNs = ES.GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n return possibleEpochNs.map((ns) => new Instant(ns));\n }\n getNextTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZoneNextTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n getPreviousTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZonePreviousTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n toString() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(GetSlot(this, TIMEZONE_ID));\n }\n toJSON() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalTimeZone(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\n//# sourceMappingURL=timezone.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainYearMonth {\n constructor(isoYearParam, isoMonthParam, calendarParam = ES.GetISO8601Calendar(), referenceISODayParam = 1) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISODay = ES.ToIntegerThrowOnInfinity(referenceISODayParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoYear and isoMonth are required');\n }\n ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n }\n get year() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalYearMonthLike, optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalYearMonthLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid year-month-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarYearMonthFromFields(calendar, fields, options);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalYearMonth(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalYearMonthToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalYearMonthToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['day']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalYearMonth(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY));\n }\n return ES.ToTemporalYearMonth(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalYearMonth(oneParam);\n const two = ES.ToTemporalYearMonth(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n//# sourceMappingURL=plainyearmonth.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { CALENDAR, EPOCHNANOSECONDS, ISO_HOUR, INSTANT, ISO_DAY, ISO_MONTH, ISO_YEAR, ISO_MICROSECOND, ISO_MILLISECOND, ISO_MINUTE, ISO_NANOSECOND, ISO_SECOND, TIME_ZONE, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO } from './ecmascript';\nexport class ZonedDateTime {\n constructor(epochNanosecondsParam, timeZoneParam, calendarParam = ES.GetISO8601Calendar()) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n // ToTemporalTimeZone(undefined) will end up calling TimeZone.from(\"undefined\"), which\n // could succeed.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get timeZone() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, TIME_ZONE);\n }\n get year() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get month() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthCode() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n }\n get day() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hour() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n }\n get eraYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get epochSeconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n }\n get dayOfWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get dayOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get weekOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hoursInDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const year = GetSlot(dt, ISO_YEAR);\n const month = GetSlot(dt, ISO_MONTH);\n const day = GetSlot(dt, ISO_DAY);\n const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n const timeZone = GetSlot(this, TIME_ZONE);\n const todayNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n const tomorrowNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12;\n }\n get daysInWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthsInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get inLeapYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get offset() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n get offsetNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n with(temporalZonedDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalZonedDateTimeLike)) {\n throw new TypeError('invalid zoned-date-time-like');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike);\n // TODO: Reorder according to spec.\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const offset = ES.ToTemporalOffset(options, 'prefer');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldsWithOffset = ES.ArrayPush(fieldNames, 'offset');\n const props = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial');\n const fieldsWithTimeZoneAndOffset = ES.ArrayPush(fieldsWithOffset, 'timeZone');\n let fields = ES.PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const thisDt = dateTime(this);\n const hour = GetSlot(thisDt, ISO_HOUR);\n const minute = GetSlot(thisDt, ISO_MINUTE);\n const second = GetSlot(thisDt, ISO_SECOND);\n const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n const thisDt = dateTime(this);\n const year = GetSlot(thisDt, ISO_YEAR);\n const month = GetSlot(thisDt, ISO_MONTH);\n const day = GetSlot(thisDt, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withTimeZone(timeZoneParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n // first, round the underlying DateTime fields\n const dt = dateTime(this);\n let year = GetSlot(dt, ISO_YEAR);\n let month = GetSlot(dt, ISO_MONTH);\n let day = GetSlot(dt, ISO_DAY);\n let hour = GetSlot(dt, ISO_HOUR);\n let minute = GetSlot(dt, ISO_MINUTE);\n let second = GetSlot(dt, ISO_SECOND);\n let millisecond = GetSlot(dt, ISO_MILLISECOND);\n let microsecond = GetSlot(dt, ISO_MICROSECOND);\n let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n const instantStart = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n if (JSBI.equal(dayLengthNs, ZERO)) {\n throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days');\n }\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, \n // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n // (which can hold up to 104 days in nanoseconds)\n JSBI.toNumber(dayLengthNs)));\n // Now reset all DateTime fields but leave the TimeZone. The offset will\n // also be retained if the new date/time values are still OK with the old\n // offset. Otherwise the offset will be changed to be compatible with the\n // new date/time values. If DST disambiguation is required, the `compatible`\n // disambiguation algorithm will be used.\n const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalZonedDateTime(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)))\n return false;\n if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE)))\n return false;\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const showCalendar = ES.ToShowCalendarOption(options);\n const showTimeZone = ES.ToShowTimeZoneNameOption(options);\n const showOffset = ES.ToShowOffsetOption(options);\n return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n unit,\n increment,\n roundingMode\n });\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n toJSON() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalZonedDateTimeToString(this, 'auto');\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n }\n startOfDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toInstant() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n }\n toPlainDate() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(dateTime(this));\n }\n toPlainTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(dateTime(this));\n }\n toPlainDateTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return dateTime(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const tz = GetSlot(this, TIME_ZONE);\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(dt, ISO_DAY),\n isoHour: GetSlot(dt, ISO_HOUR),\n isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n isoMinute: GetSlot(dt, ISO_MINUTE),\n isoMonth: GetSlot(dt, ISO_MONTH),\n isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n isoSecond: GetSlot(dt, ISO_SECOND),\n isoYear: GetSlot(dt, ISO_YEAR),\n offset: ES.BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n timeZone: tz\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalZonedDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n ES.ToTemporalDisambiguation(options);\n ES.ToTemporalOffset(options, 'reject');\n return ES.CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalZonedDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalZonedDateTime(oneParam);\n const two = ES.ToTemporalZonedDateTime(twoParam);\n const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return -1;\n if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\nfunction dateTime(zdt) {\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n//# sourceMappingURL=zoneddatetime.js.map","import { Instant } from './instant';\nimport JSBI from 'jsbi';\nimport * as ES from './ecmascript';\nimport { MILLION } from './ecmascript';\nexport function toTemporalInstant() {\n // Observable access to valueOf is not correct here, but unavoidable\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n return new Instant(ES.ToBigInt(epochNanoseconds));\n}\n//# sourceMappingURL=legacydate.js.map","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n Temporal.Instant,\n Temporal.Calendar,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.Duration,\n Temporal.PlainMonthDay,\n // Temporal.Now, // plain object (not a constructor), so no `prototype`\n Temporal.PlainTime,\n Temporal.TimeZone,\n Temporal.PlainYearMonth,\n Temporal.ZonedDateTime\n];\nfor (const type of types) {\n const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype');\n if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n descriptor.configurable = false;\n descriptor.enumerable = false;\n descriptor.writable = false;\n Object.defineProperty(type, 'prototype', descriptor);\n }\n}\nexport { Temporal, Intl, toTemporalInstant };\n//# sourceMappingURL=index.js.map"],"names":["ArrayIncludes","ArrayPrototypePush","IntlDateTimeFormat","MathAbs","MathFloor","ObjectAssign","ObjectCreate","ReflectApply","JSBI","PARSE.zoneddatetime","PARSE.time","PARSE.yearmonth","PARSE.monthday","PARSE.duration","PARSE.offset","ES.ToTemporalTimeZone","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","ES.BuiltinTimeZoneGetInstantFor","ES.ToString","ES.ToBigInt","ES.ValidateEpochNanoseconds","ES.TemporalInstantToString","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","ES.DifferenceTemporalInstant","ES.CreateOnePropObject","ES.GetOptionsObject","ES.GetTemporalUnit","ES.REQUIRED","ES.ToTemporalRoundingMode","ES.ToTemporalRoundingIncrement","ES.RoundInstant","ES.ToTemporalInstant","ES.ToSecondsStringPrecision","ES.IsObject","ES.ToTemporalCalendar","ES.CreateTemporalZonedDateTime","ES.GetISO8601Calendar","ES.ToNumber","ES.IsBuiltinCalendar","ES.IsTemporalCalendar","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","ES.CreateTemporalMonthDay","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","ES.RejectToRange","ES.ConstrainToRange","ES.ISOYearString","ES.ISODateTimePartString","ES.ComparisonResult","ES.CompareISODate","ES.ToIntegerThrowOnInfinity","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","ES.RejectObjectWithCalendarOrTimeZone","ES.CalendarFields","ES.CalendarMergeFields","ES.CalendarDateFromFields","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","ES.CalendarEquals","ES.ToShowCalendarOption","ES.TemporalDateToString","ES.CreateTemporalDateTime","ES.ToTemporalTime","ES.CalendarYearMonthFromFields","ES.CalendarMonthDayFromFields","ES.CreateTemporalDateTimeSlots","ES.InterpretTemporalDateTimeFields","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","ES.TemporalDateTimeToDate","ES.TemporalDateTimeToTime","ES.ToIntegerWithoutRounding","ES.RejectDuration","ES.TemporalDurationToString","ES.IsTemporalDuration","ES.DurationSign","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","ES.LargerOfTwoTemporalUnits","ES.ToTemporalDateTimeRoundingIncrement","ES.ToRelativeTemporalObject","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.CalculateOffsetShift","ES.TotalDurationNanoseconds","ES.CreateTemporalMonthDaySlots","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","ES.SystemUTCEpochNanoSeconds","ES.BuiltinTimeZoneGetPlainDateTimeFor","ES.SystemTimeZone","ES.RoundTime","ES.FormatSecondsStringPart","ES.RejectTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","ES.GetCanonicalTimeZoneIdentifier","ES.IsTemporalTimeZone","ES.TestTimeZoneOffsetString","ES.ParseTimeZoneOffsetString","ES.GetIANATimeZoneOffsetNanoseconds","ES.BuiltinTimeZoneGetOffsetStringFor","ES.GetEpochFromISOParts","ES.GetIANATimeZoneEpochValue","ES.GetIANATimeZoneNextTransition","ES.GetIANATimeZonePreviousTransition","ES.CreateTemporalYearMonthSlots","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ES.CreateTemporalZonedDateTimeSlots","ES.GetOffsetNanosecondsFor","ES.ToTemporalOffset","ES.ArrayPush","ES.InterpretISODateTimeOffset","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.ToShowTimeZoneNameOption","ES.ToShowOffsetOption","ES.TemporalZonedDateTimeToString","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.PlainTime","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@js-temporal/polyfill/dist/index.esm.js b/node_modules/@js-temporal/polyfill/dist/index.esm.js +index df587b6..0ca1571 100644 +--- a/node_modules/@js-temporal/polyfill/dist/index.esm.js ++++ b/node_modules/@js-temporal/polyfill/dist/index.esm.js +@@ -1,2 +1,9187 @@ +-import e from"jsbi";const t={};function MakeIntrinsicClass(e,t){Object.defineProperty(e.prototype,Symbol.toStringTag,{value:t,writable:!1,enumerable:!1,configurable:!0});for(const t of Object.getOwnPropertyNames(e)){const r=Object.getOwnPropertyDescriptor(e,t);r.configurable&&r.enumerable&&(r.enumerable=!1,Object.defineProperty(e,t,r))}for(const t of Object.getOwnPropertyNames(e.prototype)){const r=Object.getOwnPropertyDescriptor(e.prototype,t);r.configurable&&r.enumerable&&(r.enumerable=!1,Object.defineProperty(e.prototype,t,r))}DefineIntrinsic(t,e),DefineIntrinsic(`${t}.prototype`,e.prototype)}function DefineIntrinsic(e,r){const o=`%${e}%`;if(void 0!==t[o])throw new Error(`intrinsic ${e} already exists`);t[o]=r}function GetIntrinsic(e){return t[e]}const r="slot-epochNanoSeconds",o="slot-timezone-identifier",n="slot-year",a="slot-month",i="slot-day",s="slot-hour",l="slot-minute",d="slot-second",m="slot-millisecond",c="slot-microsecond",h="slot-nanosecond",u="slot-calendar",T="slot-cached-instant",p="slot-time-zone",f="slot-years",y="slot-months",S="slot-weeks",w="slot-days",g="slot-hours",I="slot-minutes",D="slot-seconds",G="slot-milliseconds",v="slot-microseconds",O="slot-nanoseconds",C="slot-calendar-identifier",E=new WeakMap;function CreateSlots(e){E.set(e,Object.create(null))}function GetSlots(e){return E.get(e)}function HasSlot(e,...t){if(!e||"object"!=typeof e)return!1;const r=GetSlots(e);return!!r&&t.reduce(((e,t)=>e&&t in r),!0)}function GetSlot(e,t){const r=GetSlots(e)[t];if(void 0===r)throw new TypeError(`Missing internal slot ${t}`);return r}function SetSlot(e,t,r){GetSlots(e)[t]=r}const b=/\.[-A-Za-z_]|\.\.[-A-Za-z._]{1,12}|\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/,M=new RegExp(`(?:(?:${b.source})(?:\\/(?:${b.source}))*|Etc/GMT[-+]\\d{1,2}|${/(?:[+\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\d{1,9})?)?)?)/.source})`),R=/[A-Za-z0-9]{3,8}/,Z=new RegExp(`(?:${R.source}(?:-${R.source})*)`),P=/(?:[+\u2212-]\d{6}|\d{4})/,F=/(?:0[1-9]|1[0-2])/,Y=/(?:0[1-9]|[12]\d|3[01])/,j=new RegExp(`(${P.source})(?:-(${F.source})-(${Y.source})|(${F.source})(${Y.source}))`),$=/(\d{2})(?::(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?|(\d{2})(?:(\d{2})(?:[.,](\d{1,9}))?)?)?/,B=/([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?/,N=new RegExp(`(?:([zZ])|(?:${B.source})?)(?:\\[(${M.source})\\])?`),k=new RegExp(`\\[u-ca=(${Z.source})\\]`),A=new RegExp(`^${j.source}(?:(?:T|\\s+)${$.source})?${N.source}(?:${k.source})?$`,"i"),U=new RegExp(`^T?${$.source}(?:${N.source})?(?:${k.source})?$`,"i"),L=new RegExp(`^(${P.source})-?(${F.source})$`),x=new RegExp(`^(?:--)?(${F.source})-?(${Y.source})$`),H=/(\d+)(?:[.,](\d{1,9}))?/,q=new RegExp(`(?:${H.source}H)?(?:${H.source}M)?(?:${H.source}S)?`),W=new RegExp(`^([+−-])?P${/(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)W)?(?:(\d+)D)?/.source}(?:T(?!$)${q.source})?$`,"i"),z=Array.prototype.includes,_=Array.prototype.push,J=globalThis.Intl.DateTimeFormat,V=Math.min,X=Math.max,K=Math.abs,Q=Math.floor,ee=Math.sign,te=Math.trunc,re=Number.isNaN,oe=Number.isFinite,ne=Number,ae=String,ie=Number.MAX_SAFE_INTEGER,se=Object.assign,le=Object.create,de=Object.getOwnPropertyDescriptor,me=Object.is,ce=Reflect.apply,he=e.BigInt(0),ue=e.BigInt(1),Te=e.BigInt(60),pe=e.BigInt(1e3),fe=e.BigInt(1e6),ye=e.BigInt(1e9),Se=e.BigInt(-1),we=e.multiply(e.BigInt(86400),ye),ge=e.multiply(e.BigInt(-86400),e.BigInt(1e17)),Ie=e.multiply(e.BigInt(86400),e.BigInt(1e17)),De=e.multiply(e.BigInt(-388152),e.BigInt(1e13)),Ge=e.multiply(we,e.BigInt(3660)),ve=e.multiply(we,e.BigInt(366)),Oe=e.multiply(we,e.BigInt(14)),Ce=["iso8601","hebrew","islamic","islamic-umalqura","islamic-tbla","islamic-civil","islamic-rgsa","islamicc","persian","ethiopic","ethioaa","coptic","chinese","dangi","roc","indian","buddhist","japanese","gregory"];function IsInteger(e){if("number"!=typeof e||!oe(e))return!1;const t=K(e);return Q(t)===t}function IsObject(e){return"object"==typeof e&&null!==e||"function"==typeof e}function ToNumber(e){if("bigint"==typeof e)throw new TypeError("Cannot convert BigInt to number");return ne(e)}function ToInteger(e){const t=ToNumber(e);if(re(t))return 0;const r=te(t);return 0===t?0:r}function ToString(e){if("symbol"==typeof e)throw new TypeError("Cannot convert a Symbol value to a String");return ae(e)}function ToIntegerThrowOnInfinity(e){const t=ToInteger(e);if(!oe(t))throw new RangeError("infinity is out of range");return t}function ToPositiveInteger(e,t){const r=ToInteger(e);if(!oe(r))throw new RangeError("infinity is out of range");if(r<1){if(void 0!==t)throw new RangeError(`property '${t}' cannot be a a number less than one`);throw new RangeError("Cannot convert a number less than one to a positive integer")}return r}function ToIntegerWithoutRounding(e){const t=ToNumber(e);if(re(t))return 0;if(!oe(t))throw new RangeError("infinity is out of range");if(!IsInteger(t))throw new RangeError(`unsupported fractional value ${t}`);return ToInteger(t)}function divmod(t,r){return{quotient:e.divide(t,r),remainder:e.remainder(t,r)}}function abs(t){return e.lessThan(t,he)?e.multiply(t,Se):t}function ArrayPush(e,...t){return _.apply(e,t),e}const Ee=new Map([["year",ToIntegerThrowOnInfinity],["month",ToPositiveInteger],["monthCode",ToString],["day",ToPositiveInteger],["hour",ToIntegerThrowOnInfinity],["minute",ToIntegerThrowOnInfinity],["second",ToIntegerThrowOnInfinity],["millisecond",ToIntegerThrowOnInfinity],["microsecond",ToIntegerThrowOnInfinity],["nanosecond",ToIntegerThrowOnInfinity],["years",ToIntegerWithoutRounding],["months",ToIntegerWithoutRounding],["weeks",ToIntegerWithoutRounding],["days",ToIntegerWithoutRounding],["hours",ToIntegerWithoutRounding],["minutes",ToIntegerWithoutRounding],["seconds",ToIntegerWithoutRounding],["milliseconds",ToIntegerWithoutRounding],["microseconds",ToIntegerWithoutRounding],["nanoseconds",ToIntegerWithoutRounding],["era",ToString],["eraYear",ToInteger],["offset",ToString]]),be=new Map([["hour",0],["minute",0],["second",0],["millisecond",0],["microsecond",0],["nanosecond",0]]),Me=[["years","year","date"],["months","month","date"],["weeks","week","date"],["days","day","date"],["hours","hour","time"],["minutes","minute","time"],["seconds","second","time"],["milliseconds","millisecond","time"],["microseconds","microsecond","time"],["nanoseconds","nanosecond","time"]],Re=new Map(Me.map((e=>[e[0],e[1]]))),Ze=new Map(Me.map((([e,t])=>[t,e]))),Pe=Me.map((([,e])=>e)),Fe=Array.from(Re.keys()).sort(),Ye=new Map;function getIntlDateTimeFormatEnUsForTimeZone(e){let t=Ye.get(e);return void 0===t&&(t=new J("en-us",{timeZone:ae(e),hour12:!1,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}),Ye.set(e,t)),t}function IsTemporalInstant(e){return HasSlot(e,r)&&!HasSlot(e,p,u)}function IsTemporalTimeZone(e){return HasSlot(e,o)}function IsTemporalCalendar(e){return HasSlot(e,C)}function IsTemporalDuration(e){return HasSlot(e,f,y,w,g,I,D,G,v,O)}function IsTemporalDate(e){return HasSlot(e,"slot-date-brand")}function IsTemporalTime(e){return HasSlot(e,s,l,d,m,c,h)&&!HasSlot(e,n,a,i)}function IsTemporalDateTime(e){return HasSlot(e,n,a,i,s,l,d,m,c,h)}function IsTemporalYearMonth(e){return HasSlot(e,"slot-year-month-brand")}function IsTemporalMonthDay(e){return HasSlot(e,"slot-month-day-brand")}function IsTemporalZonedDateTime(e){return HasSlot(e,r,p,u)}function RejectObjectWithCalendarOrTimeZone(e){if(HasSlot(e,u)||HasSlot(e,p))throw new TypeError("with() does not support a calendar or timeZone property");if(void 0!==e.calendar)throw new TypeError("with() does not support a calendar property");if(void 0!==e.timeZone)throw new TypeError("with() does not support a timeZone property")}function ParseTemporalTimeZone(e){let{ianaName:t,offset:r,z:o}=function ParseTemporalTimeZoneString(e){try{let t=GetCanonicalTimeZoneIdentifier(e);if(t)return{ianaName:t.toString()}}catch{}try{const t=ParseISODateTime(e);if(t.z||t.offset||t.ianaName)return t}catch{}throw new RangeError(`Invalid time zone: ${e}`)}(e);return t||(o?"UTC":r)}function FormatCalendarAnnotation(e,t){return"never"===t||"auto"===t&&"iso8601"===e?"":`[u-ca=${e}]`}function ParseISODateTime(e){const t=A.exec(e);if(!t)throw new RangeError(`invalid ISO 8601 string: ${e}`);let r=t[1];if("−"===r[0]&&(r=`-${r.slice(1)}`),"-000000"===r)throw new RangeError(`invalid ISO 8601 string: ${e}`);const o=ToInteger(r),n=ToInteger(t[2]||t[4]),a=ToInteger(t[3]||t[5]),i=ToInteger(t[6]),s=void 0!==t[6],l=ToInteger(t[7]||t[10]);let d=ToInteger(t[8]||t[11]);60===d&&(d=59);const m=(t[9]||t[12])+"000000000",c=ToInteger(m.slice(0,3)),h=ToInteger(m.slice(3,6)),u=ToInteger(m.slice(6,9));let T,p=!1;if(t[13])T=void 0,p=!0;else if(t[14]&&t[15]){const e="-"===t[14]||"−"===t[14]?"-":"+",r=t[15]||"00",o=t[16]||"00",n=t[17]||"00";let a=t[18]||"0";if(T=`${e}${r}:${o}`,+a){for(;a.endsWith("0");)a=a.slice(0,-1);T+=`:${n}.${a}`}else+n&&(T+=`:${n}`);"-00:00"===T&&(T="+00:00")}let f=t[19];if(f)try{f=GetCanonicalTimeZoneIdentifier(f).toString()}catch{}const y=t[20];return RejectDateTime(o,n,a,i,l,d,c,h,u),{year:o,month:n,day:a,hasTime:s,hour:i,minute:l,second:d,millisecond:c,microsecond:h,nanosecond:u,ianaName:f,offset:T,z:p,calendar:y}}function ParseTemporalYearMonthString(e){const t=L.exec(e);let r,o,n,a;if(t){let a=t[1];if("−"===a[0]&&(a=`-${a.slice(1)}`),"-000000"===a)throw new RangeError(`invalid ISO 8601 string: ${e}`);r=ToInteger(a),o=ToInteger(t[2]),n=t[3]}else{let t;if(({year:r,month:o,calendar:n,day:a,z:t}=ParseISODateTime(e)),t)throw new RangeError("Z designator not supported for PlainYearMonth")}return{year:r,month:o,calendar:n,referenceISODay:a}}function ParseTemporalMonthDayString(e){const t=x.exec(e);let r,o,n,a;if(t)r=ToInteger(t[1]),o=ToInteger(t[2]);else{let t;if(({month:r,day:o,calendar:n,year:a,z:t}=ParseISODateTime(e)),t)throw new RangeError("Z designator not supported for PlainMonthDay")}return{month:r,day:o,calendar:n,referenceISOYear:a}}function ParseTemporalDurationString(e){const t=W.exec(e);if(!t)throw new RangeError(`invalid duration: ${e}`);if(t.slice(2).every((e=>void 0===e)))throw new RangeError(`invalid duration: ${e}`);const r="-"===t[1]||"−"===t[1]?-1:1,o=ToInteger(t[2])*r,n=ToInteger(t[3])*r,a=ToInteger(t[4])*r,i=ToInteger(t[5])*r,s=ToInteger(t[6])*r;let l=t[7],d=ToInteger(t[8])*r,m=t[9],c=ToInteger(t[10])*r;const h=t[11]+"000000000";let u=ToInteger(h.slice(0,3))*r,T=ToInteger(h.slice(3,6))*r,p=ToInteger(h.slice(6,9))*r;return l=l?r*ToInteger(l)/10**l.length:0,m=m?r*ToInteger(m)/10**m.length:0,({minutes:d,seconds:c,milliseconds:u,microseconds:T,nanoseconds:p}=function DurationHandleFractions(e,t,r,o,n,a,i){let s=e,l=t,d=r,m=o,c=n,h=a,u=i;if(0!==s){[l,d,m,c,h,u].forEach((e=>{if(0!==e)throw new RangeError("only the smallest unit can be fractional")}));const e=60*s;l=te(e),d=e%1}if(0!==d){[m,c,h,u].forEach((e=>{if(0!==e)throw new RangeError("only the smallest unit can be fractional")}));const e=60*d;m=te(e);const t=e%1;if(0!==t){const e=1e3*t;c=te(e);const r=e%1;if(0!==r){const e=1e3*r;h=te(e);const t=e%1;if(0!==t){u=te(1e3*t)}}}}return{minutes:l,seconds:m,milliseconds:c,microseconds:h,nanoseconds:u}}(l,d,m,c,u,T,p)),RejectDuration(o,n,a,i,s,d,c,u,T,p),{years:o,months:n,weeks:a,days:i,hours:s,minutes:d,seconds:c,milliseconds:u,microseconds:T,nanoseconds:p}}function ParseTemporalInstant(e){let{year:t,month:r,day:o,hour:n,minute:a,second:i,millisecond:s,microsecond:l,nanosecond:d,offset:m,z:c}=function ParseTemporalInstantString(e){const t=ParseISODateTime(e);if(!t.z&&!t.offset)throw new RangeError("Temporal.Instant requires a time zone offset");return t}(e);if(!c&&!m)throw new RangeError("Temporal.Instant requires a time zone offset");const h=c?0:ParseTimeZoneOffsetString(m);({year:t,month:r,day:o,hour:n,minute:a,second:i,millisecond:s,microsecond:l,nanosecond:d}=BalanceISODateTime(t,r,o,n,a,i,s,l,d-h));const u=GetEpochFromISOParts(t,r,o,n,a,i,s,l,d);if(null===u)throw new RangeError("DateTime outside of supported range");return u}function RegulateISODate(e,t,r,o){let n=e,a=t,i=r;switch(o){case"reject":RejectISODate(n,a,i);break;case"constrain":({year:n,month:a,day:i}=ConstrainISODate(n,a,i))}return{year:n,month:a,day:i}}function RegulateTime(e,t,r,o,n,a,i){let s=e,l=t,d=r,m=o,c=n,h=a;switch(i){case"reject":RejectTime(s,l,d,m,c,h);break;case"constrain":({hour:s,minute:l,second:d,millisecond:m,microsecond:c,nanosecond:h}=function ConstrainTime(e,t,r,o,n,a){const i=ConstrainToRange(e,0,23),s=ConstrainToRange(t,0,59),l=ConstrainToRange(r,0,59),d=ConstrainToRange(o,0,999),m=ConstrainToRange(n,0,999),c=ConstrainToRange(a,0,999);return{hour:i,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}}(s,l,d,m,c,h))}return{hour:s,minute:l,second:d,millisecond:m,microsecond:c,nanosecond:h}}function ToTemporalDurationRecord(e){if(!IsObject(e))return ParseTemporalDurationString(ToString(e));if(IsTemporalDuration(e))return{years:GetSlot(e,f),months:GetSlot(e,y),weeks:GetSlot(e,S),days:GetSlot(e,w),hours:GetSlot(e,g),minutes:GetSlot(e,I),seconds:GetSlot(e,D),milliseconds:GetSlot(e,G),microseconds:GetSlot(e,v),nanoseconds:GetSlot(e,O)};const t={years:0,months:0,weeks:0,days:0,hours:0,minutes:0,seconds:0,milliseconds:0,microseconds:0,nanoseconds:0};let r=function ToTemporalPartialDurationRecord(e){if(!IsObject(e))throw new TypeError("invalid duration-like");const t={years:void 0,months:void 0,weeks:void 0,days:void 0,hours:void 0,minutes:void 0,seconds:void 0,milliseconds:void 0,microseconds:void 0,nanoseconds:void 0};let r=!1;for(const o of Fe){const n=e[o];void 0!==n&&(r=!0,t[o]=ToIntegerWithoutRounding(n))}if(!r)throw new TypeError("invalid duration-like");return t}(e);for(const e of Fe){const o=r[e];void 0!==o&&(t[e]=o)}let{years:o,months:n,weeks:a,days:i,hours:s,minutes:l,seconds:d,milliseconds:m,microseconds:c,nanoseconds:h}=t;return RejectDuration(o,n,a,i,s,l,d,m,c,h),{years:o,months:n,weeks:a,days:i,hours:s,minutes:l,seconds:d,milliseconds:m,microseconds:c,nanoseconds:h}}function ToTemporalOverflow(e){return void 0===e?"constrain":GetOption(e,"overflow",["constrain","reject"],"constrain")}function ToTemporalDisambiguation(e){return void 0===e?"compatible":GetOption(e,"disambiguation",["compatible","earlier","later","reject"],"compatible")}function ToTemporalRoundingMode(e,t){return GetOption(e,"roundingMode",["ceil","floor","trunc","halfExpand"],t)}function NegateTemporalRoundingMode(e){switch(e){case"ceil":return"floor";case"floor":return"ceil";default:return e}}function ToTemporalOffset(e,t){return void 0===e?t:GetOption(e,"offset",["prefer","use","ignore","reject"],t)}function ToShowCalendarOption(e){return GetOption(e,"calendarName",["auto","always","never"],"auto")}function ToTemporalRoundingIncrement(e,t,r){let o=1/0;void 0!==t&&(o=t),r||void 0===t||(o=t>1?t-1:1);const n=function GetNumberOption(e,t,r,o,n){let a=e[t];if(void 0===a)return n;const i=ToNumber(a);if(re(i)||io)throw new RangeError(`${String(t)} must be between ${r} and ${o}, not ${i}`);return Q(i)}(e,"roundingIncrement",1,o,1);if(void 0!==t&&t%n!=0)throw new RangeError(`Rounding increment must divide evenly into ${t}`);return n}function ToTemporalDateTimeRoundingIncrement(e,t){return ToTemporalRoundingIncrement(e,{year:void 0,month:void 0,week:void 0,day:void 0,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[t],!1)}function ToSecondsStringPrecision(e){const t=GetTemporalUnit(e,"smallestUnit","time",void 0);if("hour"===t){const e=Me.reduce(((e,[t,r,o])=>("time"===o&&"hour"!==r&&e.push(r,t),e)),[]);throw new RangeError(`smallestUnit must be one of ${e.join(", ")}, not ${t}`)}switch(t){case"minute":return{precision:"minute",unit:"minute",increment:1};case"second":return{precision:0,unit:"second",increment:1};case"millisecond":return{precision:3,unit:"millisecond",increment:1};case"microsecond":return{precision:6,unit:"microsecond",increment:1};case"nanosecond":return{precision:9,unit:"nanosecond",increment:1}}let r=e.fractionalSecondDigits;if(void 0===r&&(r="auto"),"number"!=typeof r){const e=ToString(r);if("auto"===e)return{precision:"auto",unit:"nanosecond",increment:1};throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${e}`)}if(re(r)||r<0||r>9)throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${r}`);const o=Q(r);switch(o){case 0:return{precision:o,unit:"second",increment:1};case 1:case 2:case 3:return{precision:o,unit:"millisecond",increment:10**(3-o)};case 4:case 5:case 6:return{precision:o,unit:"microsecond",increment:10**(6-o)};case 7:case 8:case 9:return{precision:o,unit:"nanosecond",increment:10**(9-o)};default:throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${r}`)}}const je=Symbol("~required~");function GetTemporalUnit(e,t,r,o,n=[]){const a=[];for(const[,e,t]of Me)"datetime"!==r&&r!==t||a.push(e);a.push(...n);let i=o;i===je?i=void 0:void 0!==i&&a.push(i);const s=[...a];for(const e of a){const t=Ze.get(e);void 0!==t&&s.push(t)}let l=GetOption(e,t,s,i);if(void 0===l&&o===je)throw new RangeError(`${t} is required`);return Re.has(l)?Re.get(l):l}function ToRelativeTemporalObject(e){const t=e.relativeTo;if(void 0===t)return t;let r,o,n,a,i,s,l,d,m,c,h,u,T="option",p=!1;if(IsObject(t)){if(IsTemporalZonedDateTime(t)||IsTemporalDate(t))return t;if(IsTemporalDateTime(t))return TemporalDateTimeToDate(t);c=GetTemporalCalendarWithISODefault(t);const e=PrepareTemporalFields(t,CalendarFields(c,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),[]),p=le(null);p.overflow="constrain",({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=InterpretTemporalDateTimeFields(c,e,p)),u=t.offset,void 0===u&&(T="wall"),h=t.timeZone}else{let e,f;({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m,calendar:c,ianaName:e,offset:u,z:f}=ParseISODateTime(ToString(t))),e&&(h=e),f?T="exact":u||(T="wall"),c||(c=GetISO8601Calendar()),c=ToTemporalCalendar(c),p=!0}if(void 0!==h){h=ToTemporalTimeZone(h);let e=0;"option"===T&&(e=ParseTimeZoneOffsetString(ToString(u)));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(r,o,n,a,i,s,l,d,m,T,e,h,"compatible","reject",p),h,c)}return CreateTemporalDate(r,o,n,c)}function DefaultTemporalLargestUnit(e,t,r,o,n,a,i,s,l,d){for(const[m,c]of[["years",e],["months",t],["weeks",r],["days",o],["hours",n],["minutes",a],["seconds",i],["milliseconds",s],["microseconds",l],["nanoseconds",d]])if(0!==c)return Re.get(m);return"nanosecond"}function LargerOfTwoTemporalUnits(e,t){return Pe.indexOf(e)>Pe.indexOf(t)?t:e}function MergeLargestUnitOption(e,t){let r=e;return void 0===r&&(r=le(null)),se(le(null),r,{largestUnit:t})}function PrepareTemporalFields(e,t,r,{emptySourceErrorMessage:o}={emptySourceErrorMessage:"no supported properties found"}){const n=le(null);let a=!1;for(const o of t){let t=e[o];if(void 0!==t)a=!0,Ee.has(o)&&(t=Ee.get(o)(t)),n[o]=t;else if("partial"!==r){if(z.call(r,o))throw new TypeError(`required property '${o}' missing or undefined`);t=be.get(o),n[o]=t}}if("partial"===r&&!a)throw new TypeError(o);if(void 0===n.era!=(void 0===n.eraYear))throw new RangeError("properties 'era' and 'eraYear' must be provided together");return n}function ToTemporalTimeRecord(e,t="complete"){const r=["hour","microsecond","millisecond","minute","nanosecond","second"],o=PrepareTemporalFields(e,r,"partial",{emptySourceErrorMessage:"invalid time-like"}),n={};for(const e of r){const r=de(o,e);void 0!==r?n[e]=r.value:"complete"===t&&(n[e]=0)}return n}function ToTemporalDate(e,t){let r=e;if(IsObject(r)){if(IsTemporalDate(r))return r;if(IsTemporalZonedDateTime(r)&&(ToTemporalOverflow(t),r=BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(r,p),GetSlot(r,T),GetSlot(r,u))),IsTemporalDateTime(r))return ToTemporalOverflow(t),CreateTemporalDate(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(r,u));const e=GetTemporalCalendarWithISODefault(r);return CalendarDateFromFields(e,PrepareTemporalFields(r,CalendarFields(e,["day","month","monthCode","year"]),[]),t)}ToTemporalOverflow(t);const{year:o,month:s,day:l,calendar:d,z:m}=function ParseTemporalDateString(e){return ParseISODateTime(e)}(ToString(r));if(m)throw new RangeError("Z designator not supported for PlainDate");return new(GetIntrinsic("%Temporal.PlainDate%"))(o,s,l,d)}function InterpretTemporalDateTimeFields(e,t,r){let{hour:o,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}=ToTemporalTimeRecord(t);const h=ToTemporalOverflow(r),u=CalendarDateFromFields(e,t,r),T=GetSlot(u,n),p=GetSlot(u,a),f=GetSlot(u,i);return({hour:o,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}=RegulateTime(o,s,l,d,m,c,h)),{year:T,month:p,day:f,hour:o,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}}function ToTemporalDateTime(e,t){let r,o,s,l,d,m,c,h,f,y;if(IsObject(e)){if(IsTemporalDateTime(e))return e;if(IsTemporalZonedDateTime(e))return ToTemporalOverflow(t),BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(e,p),GetSlot(e,T),GetSlot(e,u));if(IsTemporalDate(e))return ToTemporalOverflow(t),CreateTemporalDateTime(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),0,0,0,0,0,0,GetSlot(e,u));y=GetTemporalCalendarWithISODefault(e);const S=PrepareTemporalFields(e,CalendarFields(y,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),[]);({year:r,month:o,day:s,hour:l,minute:d,second:m,millisecond:c,microsecond:h,nanosecond:f}=InterpretTemporalDateTimeFields(y,S,t))}else{let n;if(ToTemporalOverflow(t),({year:r,month:o,day:s,hour:l,minute:d,second:m,millisecond:c,microsecond:h,nanosecond:f,calendar:y,z:n}=function ParseTemporalDateTimeString(e){return ParseISODateTime(e)}(ToString(e))),n)throw new RangeError("Z designator not supported for PlainDateTime");RejectDateTime(r,o,s,l,d,m,c,h,f),void 0===y&&(y=GetISO8601Calendar()),y=ToTemporalCalendar(y)}return CreateTemporalDateTime(r,o,s,l,d,m,c,h,f,y)}function ToTemporalDuration(e){if(IsTemporalDuration(e))return e;let{years:t,months:r,weeks:o,days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=ToTemporalDurationRecord(e);return new(GetIntrinsic("%Temporal.Duration%"))(t,r,o,n,a,i,s,l,d,m)}function ToTemporalInstant(e){if(IsTemporalInstant(e))return e;if(IsTemporalZonedDateTime(e)){return new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(e,r))}const t=ParseTemporalInstant(ToString(e));return new(GetIntrinsic("%Temporal.Instant%"))(t)}function ToTemporalMonthDay(e,t){let r=e;if(IsObject(r)){if(IsTemporalMonthDay(r))return r;let e,o;if(HasSlot(r,u))e=GetSlot(r,u),o=!1;else{let t=r.calendar;o=void 0===t,void 0===t&&(t=GetISO8601Calendar()),e=ToTemporalCalendar(t)}r=r;const n=PrepareTemporalFields(r,CalendarFields(e,["day","month","monthCode","year"]),[]);return o&&void 0!==n.month&&void 0===n.monthCode&&void 0===n.year&&(n.year=1972),CalendarMonthDayFromFields(e,n,t)}ToTemporalOverflow(t);let{month:o,day:n,referenceISOYear:a,calendar:i}=ParseTemporalMonthDayString(ToString(r)),s=i;if(void 0===s&&(s=GetISO8601Calendar()),s=ToTemporalCalendar(s),void 0===a)return RejectISODate(1972,o,n),CreateTemporalMonthDay(o,n,s);return CalendarMonthDayFromFields(s,CreateTemporalMonthDay(o,n,s,a))}function ToTemporalTime(e,t="constrain"){let r,o,n,a,i,f,y,S=e;if(IsObject(S)){if(IsTemporalTime(S))return S;if(IsTemporalZonedDateTime(S)&&(S=BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(S,p),GetSlot(S,T),GetSlot(S,u))),IsTemporalDateTime(S)){return new(GetIntrinsic("%Temporal.PlainTime%"))(GetSlot(S,s),GetSlot(S,l),GetSlot(S,d),GetSlot(S,m),GetSlot(S,c),GetSlot(S,h))}if(y=GetTemporalCalendarWithISODefault(S),"iso8601"!==ToString(y))throw new RangeError("PlainTime can only have iso8601 calendar");({hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:f}=ToTemporalTimeRecord(S)),({hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:f}=RegulateTime(r,o,n,a,i,f,t))}else if(({hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:f,calendar:y}=function ParseTemporalTimeString(e){const t=U.exec(e);let r,o,n,a,i,s,l;if(t){r=ToInteger(t[1]),o=ToInteger(t[2]||t[5]),n=ToInteger(t[3]||t[6]),60===n&&(n=59);const e=(t[4]||t[7])+"000000000";a=ToInteger(e.slice(0,3)),i=ToInteger(e.slice(3,6)),s=ToInteger(e.slice(6,9)),l=t[15]}else{let t,d;if(({hasTime:d,hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:s,calendar:l,z:t}=ParseISODateTime(e)),!d)throw new RangeError(`time is missing in string: ${e}`);if(t)throw new RangeError("Z designator not supported for PlainTime")}if(/[tT ][0-9][0-9]/.test(e))return{hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:s,calendar:l};try{const{month:t,day:r}=ParseTemporalMonthDayString(e);RejectISODate(1972,t,r)}catch{try{const{year:t,month:r}=ParseTemporalYearMonthString(e);RejectISODate(t,r,1)}catch{return{hour:r,minute:o,second:n,millisecond:a,microsecond:i,nanosecond:s,calendar:l}}}throw new RangeError(`invalid ISO 8601 time-only string ${e}; may need a T prefix`)}(ToString(S))),RejectTime(r,o,n,a,i,f),void 0!==y&&"iso8601"!==y)throw new RangeError("PlainTime can only have iso8601 calendar");return new(GetIntrinsic("%Temporal.PlainTime%"))(r,o,n,a,i,f)}function ToTemporalYearMonth(e,t){if(IsObject(e)){if(IsTemporalYearMonth(e))return e;const r=GetTemporalCalendarWithISODefault(e);return CalendarYearMonthFromFields(r,PrepareTemporalFields(e,CalendarFields(r,["month","monthCode","year"]),[]),t)}ToTemporalOverflow(t);let{year:r,month:o,referenceISODay:n,calendar:a}=ParseTemporalYearMonthString(ToString(e)),i=a;if(void 0===i&&(i=GetISO8601Calendar()),i=ToTemporalCalendar(i),void 0===n)return RejectISODate(r,o,1),CreateTemporalYearMonth(r,o,i);return CalendarYearMonthFromFields(i,CreateTemporalYearMonth(r,o,i,n))}function InterpretISODateTimeOffset(t,n,a,i,s,l,d,m,c,h,u,T,p,f,y){const S=new(GetIntrinsic("%Temporal.PlainDateTime%"))(t,n,a,i,s,l,d,m,c);if("wall"===h||"ignore"===f){return GetSlot(BuiltinTimeZoneGetInstantFor(T,S,p),r)}if("exact"===h||"use"===f){const r=GetEpochFromISOParts(t,n,a,i,s,l,d,m,c);if(null===r)throw new RangeError("ZonedDateTime outside of supported range");return e.subtract(r,e.BigInt(u))}const w=GetPossibleInstantsFor(T,S);for(const t of w){const o=GetOffsetNanosecondsFor(T,t),n=e.toNumber(RoundNumberToIncrement(e.BigInt(o),6e10,"halfExpand"));if(o===u||y&&n===u)return GetSlot(t,r)}if("reject"===f){const e=FormatTimeZoneOffsetString(u),t=IsTemporalTimeZone(T)?GetSlot(T,o):"time zone";throw new RangeError(`Offset ${e} is invalid for ${S.toString()} in ${t}`)}return GetSlot(DisambiguatePossibleInstants(w,T,S,p),r)}function ToTemporalZonedDateTime(e,t){let r,o,n,a,i,s,l,d,m,c,h,u,T=!1,p="option";if(IsObject(e)){if(IsTemporalZonedDateTime(e))return e;u=GetTemporalCalendarWithISODefault(e);const T=PrepareTemporalFields(e,ArrayPush(CalendarFields(u,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),"timeZone","offset"),["timeZone"]);({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=InterpretTemporalDateTimeFields(u,T,t)),c=ToTemporalTimeZone(T.timeZone),h=T.offset,void 0===h?p="wall":h=ToString(h)}else{let f,y;if(ToTemporalOverflow(t),({year:r,month:o,day:n,hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m,ianaName:f,offset:h,z:y,calendar:u}=function ParseTemporalZonedDateTimeString(e){const t=ParseISODateTime(e);if(!t.ianaName)throw new RangeError("Temporal.ZonedDateTime requires a time zone ID in brackets");return t}(ToString(e))),!f)throw new RangeError("time zone ID required in brackets");y?p="exact":h||(p="wall");c=new(GetIntrinsic("%Temporal.TimeZone%"))(f),u||(u=GetISO8601Calendar()),u=ToTemporalCalendar(u),T=!0}let f=0;"option"===p&&(f=ParseTimeZoneOffsetString(h));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(r,o,n,a,i,s,l,d,m,p,f,c,ToTemporalDisambiguation(t),ToTemporalOffset(t,"reject"),T),c,u)}function CreateTemporalDateSlots(e,t,r,o,s){RejectISODate(t,r,o),RejectDateRange(t,r,o),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,a,r),SetSlot(e,i,o),SetSlot(e,u,s),SetSlot(e,"slot-date-brand",!0)}function CreateTemporalDate(e,t,r,o=GetISO8601Calendar()){const n=GetIntrinsic("%Temporal.PlainDate%"),a=le(n.prototype);return CreateTemporalDateSlots(a,e,t,r,o),a}function CreateTemporalDateTimeSlots(e,t,r,o,T,p,f,y,S,w,g){RejectDateTime(t,r,o,T,p,f,y,S,w),RejectDateTimeRange(t,r,o,T,p,f,y,S,w),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,a,r),SetSlot(e,i,o),SetSlot(e,s,T),SetSlot(e,l,p),SetSlot(e,d,f),SetSlot(e,m,y),SetSlot(e,c,S),SetSlot(e,h,w),SetSlot(e,u,g)}function CreateTemporalDateTime(e,t,r,o,n,a,i,s,l,d=GetISO8601Calendar()){const m=GetIntrinsic("%Temporal.PlainDateTime%"),c=le(m.prototype);return CreateTemporalDateTimeSlots(c,e,t,r,o,n,a,i,s,l,d),c}function CreateTemporalMonthDaySlots(e,t,r,o,s){RejectISODate(s,t,r),RejectDateRange(s,t,r),CreateSlots(e),SetSlot(e,a,t),SetSlot(e,i,r),SetSlot(e,n,s),SetSlot(e,u,o),SetSlot(e,"slot-month-day-brand",!0)}function CreateTemporalMonthDay(e,t,r=GetISO8601Calendar(),o=1972){const n=GetIntrinsic("%Temporal.PlainMonthDay%"),a=le(n.prototype);return CreateTemporalMonthDaySlots(a,e,t,r,o),a}function CreateTemporalYearMonthSlots(e,t,r,o,s){RejectISODate(t,r,s),function RejectYearMonthRange(e,t){RejectToRange(e,-271821,275760),-271821===e?RejectToRange(t,4,12):275760===e&&RejectToRange(t,1,9)}(t,r),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,a,r),SetSlot(e,i,s),SetSlot(e,u,o),SetSlot(e,"slot-year-month-brand",!0)}function CreateTemporalYearMonth(e,t,r=GetISO8601Calendar(),o=1){const n=GetIntrinsic("%Temporal.PlainYearMonth%"),a=le(n.prototype);return CreateTemporalYearMonthSlots(a,e,t,r,o),a}function CreateTemporalZonedDateTimeSlots(e,t,o,n){ValidateEpochNanoseconds(t),CreateSlots(e),SetSlot(e,r,t),SetSlot(e,p,o),SetSlot(e,u,n);const a=new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(e,r));SetSlot(e,T,a)}function CreateTemporalZonedDateTime(e,t,r=GetISO8601Calendar()){const o=GetIntrinsic("%Temporal.ZonedDateTime%"),n=le(o.prototype);return CreateTemporalZonedDateTimeSlots(n,e,t,r),n}function GetISO8601Calendar(){return new(GetIntrinsic("%Temporal.Calendar%"))("iso8601")}function CalendarFields(e,t){let r=t;e.fields&&(r=e.fields(r));const o=[];for(const e of r){if("string"!=typeof e)throw new TypeError("bad return from calendar.fields()");_.call(o,e)}return o}function CalendarMergeFields(e,t,r){const o=e.mergeFields;if(!o)return{...t,...r};const n=Reflect.apply(o,e,[t,r]);if(!IsObject(n))throw new TypeError("bad return from calendar.mergeFields()");return n}function CalendarDateAdd(e,t,r,o,n){let a=n;void 0===a&&(a=e.dateAdd);const i=ce(a,e,[t,r,o]);if(!IsTemporalDate(i))throw new TypeError("invalid result");return i}function CalendarDateUntil(e,t,r,o,n){let a=n;void 0===a&&(a=e.dateUntil);const i=ce(a,e,[t,r,o]);if(!IsTemporalDuration(i))throw new TypeError("invalid result");return i}function CalendarYear(e,t){const r=e.year(t);if(void 0===r)throw new RangeError("calendar year result must be an integer");return ToIntegerThrowOnInfinity(r)}function CalendarMonth(e,t){const r=e.month(t);if(void 0===r)throw new RangeError("calendar month result must be a positive integer");return ToPositiveInteger(r)}function CalendarMonthCode(e,t){const r=e.monthCode(t);if(void 0===r)throw new RangeError("calendar monthCode result must be a string");return ToString(r)}function CalendarDay(e,t){const r=e.day(t);if(void 0===r)throw new RangeError("calendar day result must be a positive integer");return ToPositiveInteger(r)}function CalendarEra(e,t){let r=e.era(t);return void 0!==r&&(r=ToString(r)),r}function CalendarEraYear(e,t){let r=e.eraYear(t);return void 0!==r&&(r=ToIntegerThrowOnInfinity(r)),r}function CalendarDayOfWeek(e,t){return e.dayOfWeek(t)}function CalendarDayOfYear(e,t){return e.dayOfYear(t)}function CalendarWeekOfYear(e,t){return e.weekOfYear(t)}function CalendarDaysInWeek(e,t){return e.daysInWeek(t)}function CalendarDaysInMonth(e,t){return e.daysInMonth(t)}function CalendarDaysInYear(e,t){return e.daysInYear(t)}function CalendarMonthsInYear(e,t){return e.monthsInYear(t)}function CalendarInLeapYear(e,t){return e.inLeapYear(t)}function ToTemporalCalendar(e){let t=e;if(IsObject(t)){if(HasSlot(t,u))return GetSlot(t,u);if(!("calendar"in t))return t;if(t=t.calendar,IsObject(t)&&!("calendar"in t))return t}const r=ToString(t),o=GetIntrinsic("%Temporal.Calendar%");if(IsBuiltinCalendar(r))return new o(r);let n;try{({calendar:n}=ParseISODateTime(r))}catch{throw new RangeError(`Invalid calendar: ${r}`)}return n||(n="iso8601"),new o(n)}function GetTemporalCalendarWithISODefault(e){if(HasSlot(e,u))return GetSlot(e,u);const{calendar:t}=e;return void 0===t?GetISO8601Calendar():ToTemporalCalendar(t)}function CalendarEquals(e,t){if(e===t)return!0;return ToString(e)===ToString(t)}function ConsolidateCalendars(e,t){if(e===t)return t;const r=ToString(e),o=ToString(t);if(r===o||"iso8601"===r)return t;if("iso8601"===o)return e;throw new RangeError("irreconcilable calendars")}function CalendarDateFromFields(e,t,r){const o=e.dateFromFields(t,r);if(!IsTemporalDate(o))throw new TypeError("invalid result");return o}function CalendarYearMonthFromFields(e,t,r){const o=e.yearMonthFromFields(t,r);if(!IsTemporalYearMonth(o))throw new TypeError("invalid result");return o}function CalendarMonthDayFromFields(e,t,r){const o=e.monthDayFromFields(t,r);if(!IsTemporalMonthDay(o))throw new TypeError("invalid result");return o}function ToTemporalTimeZone(e){let t=e;if(IsObject(t)){if(IsTemporalZonedDateTime(t))return GetSlot(t,p);if(!("timeZone"in t))return t;if(t=t.timeZone,IsObject(t)&&!("timeZone"in t))return t}const r=ParseTemporalTimeZone(ToString(t));return new(GetIntrinsic("%Temporal.TimeZone%"))(r)}function TimeZoneEquals(e,t){if(e===t)return!0;return ToString(e)===ToString(t)}function TemporalDateTimeToDate(e){return CreateTemporalDate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(e,u))}function TemporalDateTimeToTime(e){return new(GetIntrinsic("%Temporal.PlainTime%"))(GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,h))}function GetOffsetNanosecondsFor(e,t){let r=e.getOffsetNanosecondsFor;if("function"!=typeof r)throw new TypeError("getOffsetNanosecondsFor not callable");const o=Reflect.apply(r,e,[t]);if("number"!=typeof o)throw new TypeError("bad return from getOffsetNanosecondsFor");if(!IsInteger(o)||K(o)>864e11)throw new RangeError("out-of-range return from getOffsetNanosecondsFor");return o}function BuiltinTimeZoneGetOffsetStringFor(e,t){return FormatTimeZoneOffsetString(GetOffsetNanosecondsFor(e,t))}function BuiltinTimeZoneGetPlainDateTimeFor(e,t,o){const n=GetSlot(t,r),a=GetOffsetNanosecondsFor(e,t);let{year:i,month:s,day:l,hour:d,minute:m,second:c,millisecond:h,microsecond:u,nanosecond:T}=GetISOPartsFromEpoch(n);return({year:i,month:s,day:l,hour:d,minute:m,second:c,millisecond:h,microsecond:u,nanosecond:T}=BalanceISODateTime(i,s,l,d,m,c,h,u,T+a)),CreateTemporalDateTime(i,s,l,d,m,c,h,u,T,o)}function BuiltinTimeZoneGetInstantFor(e,t,r){return DisambiguatePossibleInstants(GetPossibleInstantsFor(e,t),e,t,r)}function DisambiguatePossibleInstants(t,r,o,T){const p=GetIntrinsic("%Temporal.Instant%"),f=t.length;if(1===f)return t[0];if(f)switch(T){case"compatible":case"earlier":return t[0];case"later":return t[f-1];case"reject":throw new RangeError("multiple instants found")}const y=GetSlot(o,n),S=GetSlot(o,a),w=GetSlot(o,i),g=GetSlot(o,s),I=GetSlot(o,l),D=GetSlot(o,d),G=GetSlot(o,m),v=GetSlot(o,c),O=GetSlot(o,h),C=GetEpochFromISOParts(y,S,w,g,I,D,G,v,O);if(null===C)throw new RangeError("DateTime outside of supported range");const E=new p(e.subtract(C,we)),b=new p(e.add(C,we)),M=GetOffsetNanosecondsFor(r,E),R=GetOffsetNanosecondsFor(r,b)-M;switch(T){case"earlier":{const e=GetSlot(o,u),t=GetIntrinsic("%Temporal.PlainDateTime%"),n=AddDateTime(y,S,w,g,I,D,G,v,O,e,0,0,0,0,0,0,0,0,0,-R,void 0);return GetPossibleInstantsFor(r,new t(n.year,n.month,n.day,n.hour,n.minute,n.second,n.millisecond,n.microsecond,n.nanosecond,e))[0]}case"compatible":case"later":{const e=GetSlot(o,u),t=GetIntrinsic("%Temporal.PlainDateTime%"),n=AddDateTime(y,S,w,g,I,D,G,v,O,e,0,0,0,0,0,0,0,0,0,R,void 0),a=GetPossibleInstantsFor(r,new t(n.year,n.month,n.day,n.hour,n.minute,n.second,n.millisecond,n.microsecond,n.nanosecond,e));return a[a.length-1]}case"reject":throw new RangeError("no such instant found")}}function GetPossibleInstantsFor(e,t){const r=e.getPossibleInstantsFor(t),o=[];for(const e of r){if(!IsTemporalInstant(e))throw new TypeError("bad return from getPossibleInstantsFor");_.call(o,e)}return o}function ISOYearString(e){let t;if(e<0||e>9999){t=(e<0?"-":"+")+`000000${K(e)}`.slice(-6)}else t=`0000${e}`.slice(-4);return t}function ISODateTimePartString(e){return`00${e}`.slice(-2)}function FormatSecondsStringPart(e,t,r,o,n){if("minute"===n)return"";const a=`:${ISODateTimePartString(e)}`;let i,s=1e6*t+1e3*r+o;if("auto"===n){if(0===s)return a;for(i=`${s}`.padStart(9,"0");"0"===i[i.length-1];)i=i.slice(0,-1)}else{if(0===n)return a;i=`${s}`.padStart(9,"0").slice(0,n)}return`${a}.${i}`}function TemporalInstantToString(e,t,r){let o=t;if(void 0===o){o=new(GetIntrinsic("%Temporal.TimeZone%"))("UTC")}const u=BuiltinTimeZoneGetPlainDateTimeFor(o,e,GetISO8601Calendar()),T=ISOYearString(GetSlot(u,n)),p=ISODateTimePartString(GetSlot(u,a)),f=ISODateTimePartString(GetSlot(u,i)),y=ISODateTimePartString(GetSlot(u,s)),S=ISODateTimePartString(GetSlot(u,l)),w=FormatSecondsStringPart(GetSlot(u,d),GetSlot(u,m),GetSlot(u,c),GetSlot(u,h),r);let g="Z";if(void 0!==t){g=FormatISOTimeZoneOffsetString(GetOffsetNanosecondsFor(o,e))}return`${T}-${p}-${f}T${y}:${S}${w}${g}`}function TemporalDurationToString(t,r="auto",o){function formatNumber(t){return t<=ie?t.toString(10):e.BigInt(t).toString(10)}const n=GetSlot(t,f),a=GetSlot(t,y),i=GetSlot(t,S),s=GetSlot(t,w),l=GetSlot(t,g),d=GetSlot(t,I);let m=GetSlot(t,D),c=GetSlot(t,G),h=GetSlot(t,v),u=GetSlot(t,O);const T=DurationSign(n,a,i,s,l,d,m,c,h,u);if(o){const{unit:e,increment:t,roundingMode:r}=o;({seconds:m,milliseconds:c,microseconds:h,nanoseconds:u}=RoundDuration(0,0,0,0,0,0,m,c,h,u,t,e,r))}const p=[];n&&p.push(`${formatNumber(K(n))}Y`),a&&p.push(`${formatNumber(K(a))}M`),i&&p.push(`${formatNumber(K(i))}W`),s&&p.push(`${formatNumber(K(s))}D`);const C=[];l&&C.push(`${formatNumber(K(l))}H`),d&&C.push(`${formatNumber(K(d))}M`);const E=[];let b,M,R,Z,P=TotalDurationNanoseconds(0,0,0,m,c,h,u,0);({quotient:P,remainder:b}=divmod(P,pe)),({quotient:P,remainder:M}=divmod(P,pe)),({quotient:Z,remainder:R}=divmod(P,pe));const F=1e6*K(e.toNumber(R))+1e3*K(e.toNumber(M))+K(e.toNumber(b));let Y;if("auto"===r){if(0!==F)for(Y=`${F}`.padStart(9,"0");"0"===Y[Y.length-1];)Y=Y.slice(0,-1)}else 0!==r&&(Y=`${F}`.padStart(9,"0").slice(0,r));return Y&&E.unshift(".",Y),e.equal(Z,he)&&!E.length&&"auto"===r||E.unshift(abs(Z).toString()),E.length&&C.push(`${E.join("")}S`),C.length&&C.unshift("T"),p.length||C.length?`${T<0?"-":""}P${p.join("")}${C.join("")}`:"PT0S"}function TemporalDateToString(e,t="auto"){return`${ISOYearString(GetSlot(e,n))}-${ISODateTimePartString(GetSlot(e,a))}-${ISODateTimePartString(GetSlot(e,i))}${FormatCalendarAnnotation(ToString(GetSlot(e,u)),t)}`}function TemporalDateTimeToString(e,t,r="auto",o){let T=GetSlot(e,n),p=GetSlot(e,a),f=GetSlot(e,i),y=GetSlot(e,s),S=GetSlot(e,l),w=GetSlot(e,d),g=GetSlot(e,m),I=GetSlot(e,c),D=GetSlot(e,h);if(o){const{unit:e,increment:t,roundingMode:r}=o;({year:T,month:p,day:f,hour:y,minute:S,second:w,millisecond:g,microsecond:I,nanosecond:D}=RoundISODateTime(T,p,f,y,S,w,g,I,D,t,e,r))}return`${ISOYearString(T)}-${ISODateTimePartString(p)}-${ISODateTimePartString(f)}T${ISODateTimePartString(y)}:${ISODateTimePartString(S)}${FormatSecondsStringPart(w,g,I,D,t)}${FormatCalendarAnnotation(ToString(GetSlot(e,u)),r)}`}function TemporalMonthDayToString(e,t="auto"){let r=`${ISODateTimePartString(GetSlot(e,a))}-${ISODateTimePartString(GetSlot(e,i))}`;const o=ToString(GetSlot(e,u));if("always"===t||"iso8601"!==o){r=`${ISOYearString(GetSlot(e,n))}-${r}`}const s=FormatCalendarAnnotation(o,t);return s&&(r+=s),r}function TemporalYearMonthToString(e,t="auto"){let r=`${ISOYearString(GetSlot(e,n))}-${ISODateTimePartString(GetSlot(e,a))}`;const o=ToString(GetSlot(e,u));if("always"===t||"iso8601"!==o){r+=`-${ISODateTimePartString(GetSlot(e,i))}`}const s=FormatCalendarAnnotation(o,t);return s&&(r+=s),r}function TemporalZonedDateTimeToString(e,t,o="auto",f="auto",y="auto",S){let w=GetSlot(e,T);if(S){const{unit:t,increment:o,roundingMode:n}=S,a=RoundInstant(GetSlot(e,r),o,t,n);w=new(GetIntrinsic("%Temporal.Instant%"))(a)}const g=GetSlot(e,p),I=BuiltinTimeZoneGetPlainDateTimeFor(g,w,GetISO8601Calendar());let D=`${ISOYearString(GetSlot(I,n))}-${ISODateTimePartString(GetSlot(I,a))}-${ISODateTimePartString(GetSlot(I,i))}T${ISODateTimePartString(GetSlot(I,s))}:${ISODateTimePartString(GetSlot(I,l))}${FormatSecondsStringPart(GetSlot(I,d),GetSlot(I,m),GetSlot(I,c),GetSlot(I,h),t)}`;if("never"!==y){D+=FormatISOTimeZoneOffsetString(GetOffsetNanosecondsFor(g,w))}"never"!==f&&(D+=`[${g}]`);return D+=FormatCalendarAnnotation(ToString(GetSlot(e,u)),o),D}function TestTimeZoneOffsetString(e){return Be.test(ae(e))}function ParseTimeZoneOffsetString(e){const t=Be.exec(ae(e));if(!t)throw new RangeError(`invalid time zone offset: ${e}`);return("-"===t[1]||"−"===t[1]?-1:1)*(1e9*(60*(60*+t[2]+ +(t[3]||0))+ +(t[4]||0))+ +((t[5]||0)+"000000000").slice(0,9))}function GetCanonicalTimeZoneIdentifier(e){if(TestTimeZoneOffsetString(e)){return FormatTimeZoneOffsetString(ParseTimeZoneOffsetString(e))}return getIntlDateTimeFormatEnUsForTimeZone(ae(e)).resolvedOptions().timeZone}function GetIANATimeZoneOffsetNanoseconds(t,r){const{year:o,month:n,day:a,hour:i,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}=GetIANATimeZoneDateTimeParts(t,r),h=GetEpochFromISOParts(o,n,a,i,s,l,d,m,c);if(null===h)throw new RangeError("Date outside of supported range");return e.toNumber(e.subtract(h,t))}function FormatTimeZoneOffsetString(e){const t=e<0?"-":"+",r=K(e),o=r%1e9,n=Q(r/1e9)%60,a=Q(r/6e10)%60,i=ISODateTimePartString(Q(r/36e11)),s=ISODateTimePartString(a),l=ISODateTimePartString(n);let d="";if(o){let e=`${o}`.padStart(9,"0");for(;"0"===e[e.length-1];)e=e.slice(0,-1);d=`:${l}.${e}`}else n&&(d=`:${l}`);return`${t}${i}:${s}${d}`}function FormatISOTimeZoneOffsetString(t){let r=e.toNumber(RoundNumberToIncrement(e.BigInt(t),6e10,"halfExpand"));const o=r<0?"-":"+";r=K(r);const n=r/6e10%60;return`${o}${ISODateTimePartString(Q(r/36e11))}:${ISODateTimePartString(n)}`}function GetEpochFromISOParts(t,r,o,n,a,i,s,l,d){const m=new Date;m.setUTCHours(n,a,i,s),m.setUTCFullYear(t,r-1,o);const c=m.getTime();if(re(c))return null;let h=e.multiply(e.BigInt(c),fe);return h=e.add(h,e.multiply(e.BigInt(l),pe)),h=e.add(h,e.BigInt(d)),e.lessThan(h,ge)||e.greaterThan(h,Ie)?null:h}function GetISOPartsFromEpoch(t){const{quotient:r,remainder:o}=divmod(t,fe);let n=e.toNumber(r),a=e.toNumber(o);a<0&&(a+=1e6,n-=1);const i=Q(a/1e3)%1e3,s=a%1e3,l=new Date(n);return{epochMilliseconds:n,year:l.getUTCFullYear(),month:l.getUTCMonth()+1,day:l.getUTCDate(),hour:l.getUTCHours(),minute:l.getUTCMinutes(),second:l.getUTCSeconds(),millisecond:l.getUTCMilliseconds(),microsecond:i,nanosecond:s}}function GetIANATimeZoneDateTimeParts(e,t){const{epochMilliseconds:r,millisecond:o,microsecond:n,nanosecond:a}=GetISOPartsFromEpoch(e),{year:i,month:s,day:l,hour:d,minute:m,second:c}=function GetFormatterParts(e,t){const r=getIntlDateTimeFormatEnUsForTimeZone(e);return function parseFromEnUsFormat(e){const t=e.split(/[^\w]+/);if(7!==t.length)throw new RangeError(`expected 7 parts in "${e}`);const r=+t[0],o=+t[1];let n=+t[2];const a=t[3].toUpperCase();if("B"===a||"BC"===a)n=1-n;else if("A"!==a&&"AD"!==a)throw new RangeError(`Unknown era ${a} in "${e}`);let i=+t[4];24===i&&(i=0);const s=+t[5],l=+t[6];if(!(oe(n)&&oe(r)&&oe(o)&&oe(i)&&oe(s)&&oe(l)))throw new RangeError(`Invalid number in "${e}`);return{year:n,month:r,day:o,hour:i,minute:s,second:l}}(r.format(new Date(t)))}(t,r);return BalanceISODateTime(i,s,l,d,m,c,o,n,a)}function maxJSBI(t,r){return e.lessThan(t,r)?r:t}function afterLatestPossibleTzdbRuleChange(){return e.add($e(),Ge)}function GetIANATimeZonePreviousTransition(t,r){const o=afterLatestPossibleTzdbRuleChange(),n=e.greaterThan(t,o),a=n?e.subtract(t,ve):De;let i=e.subtract(t,ue);const s=GetIANATimeZoneOffsetNanoseconds(i,r);let l=i,d=s;for(;s===d&&e.greaterThan(i,a);)l=e.subtract(i,Oe),d=GetIANATimeZoneOffsetNanoseconds(l,r),s===d&&(i=l);if(s===d){if(n){return GetIANATimeZonePreviousTransition(e.subtract(o,we),r)}return null}return bisect((e=>GetIANATimeZoneOffsetNanoseconds(e,r)),l,i,d,s)}function LeapYear(e){if(void 0===e)return!1;return e%4==0&&(!(e%100==0)||e%400==0)}function ISODaysInMonth(e,t){return{standard:[31,28,31,30,31,30,31,31,30,31,30,31],leapyear:[31,29,31,30,31,30,31,31,30,31,30,31]}[LeapYear(e)?"leapyear":"standard"][t-1]}function DayOfWeek(e,t,r){const o=t+(t<3?10:-2),n=e-(t<3?1:0),a=Q(n/100),i=n-100*a,s=(r+Q(2.6*o-.2)+(i+Q(i/4))+(Q(a/4)-2*a))%7;return s+(s<=0?7:0)}function DayOfYear(e,t,r){let o=r;for(let r=t-1;r>0;r--)o+=ISODaysInMonth(e,r);return o}function DurationSign(e,t,r,o,n,a,i,s,l,d){for(const m of[e,t,r,o,n,a,i,s,l,d])if(0!==m)return m<0?-1:1;return 0}function BalanceISOYearMonth(e,t){let r=e,o=t;if(!oe(r)||!oe(o))throw new RangeError("infinity is out of range");return o-=1,r+=Q(o/12),o%=12,o<0&&(o+=12),o+=1,{year:r,month:o}}function BalanceISODate(e,t,r){let o=e,n=t,a=r;if(!oe(a))throw new RangeError("infinity is out of range");({year:o,month:n}=BalanceISOYearMonth(o,n));let i=0,s=n>2?o:o-1;for(;i=LeapYear(s)?366:365,a<-i;)o-=1,s-=1,a+=i;for(s+=1;i=LeapYear(s)?366:365,a>i;)o+=1,s+=1,a-=i;for(;a<1;)({year:o,month:n}=BalanceISOYearMonth(o,n-1)),a+=ISODaysInMonth(o,n);for(;a>ISODaysInMonth(o,n);)a-=ISODaysInMonth(o,n),({year:o,month:n}=BalanceISOYearMonth(o,n+1));return{year:o,month:n,day:a}}function BalanceISODateTime(e,t,r,o,n,a,i,s,l){const{deltaDays:d,hour:m,minute:c,second:h,millisecond:u,microsecond:T,nanosecond:p}=BalanceTime(o,n,a,i,s,l),{year:f,month:y,day:S}=BalanceISODate(e,t,r+d);return{year:f,month:y,day:S,hour:m,minute:c,second:h,millisecond:u,microsecond:T,nanosecond:p}}function BalanceTime(e,t,r,o,n,a){let i=e,s=t,l=r,d=o,m=n,c=a;if(!(oe(i)&&oe(s)&&oe(l)&&oe(d)&&oe(m)&&oe(c)))throw new RangeError("infinity is out of range");m+=Q(c/1e3),c=NonNegativeModulo(c,1e3),d+=Q(m/1e3),m=NonNegativeModulo(m,1e3),l+=Q(d/1e3),d=NonNegativeModulo(d,1e3),s+=Q(l/60),l=NonNegativeModulo(l,60),i+=Q(s/60),s=NonNegativeModulo(s,60);const h=Q(i/24);return i=NonNegativeModulo(i,24),{deltaDays:h,hour:i,minute:s,second:l,millisecond:d,microsecond:m,nanosecond:c}}function TotalDurationNanoseconds(t,r,o,n,a,i,s,l){const d=e.BigInt(t);let m=e.BigInt(s);0!==t&&(m=e.subtract(e.BigInt(s),e.BigInt(l)));const c=e.add(e.BigInt(r),e.multiply(d,e.BigInt(24))),h=e.add(e.BigInt(o),e.multiply(c,Te)),u=e.add(e.BigInt(n),e.multiply(h,Te)),T=e.add(e.BigInt(a),e.multiply(u,pe)),p=e.add(e.BigInt(i),e.multiply(T,pe));return e.add(e.BigInt(m),e.multiply(p,pe))}function NanosecondsToDays(t,o){const f=GetIntrinsic("%Temporal.Instant%"),y=ee(e.toNumber(t));let S=e.BigInt(t),w=864e11;if(0===y)return{days:0,nanoseconds:he,dayLengthNs:w};if(!IsTemporalZonedDateTime(o)){let t;return({quotient:t,remainder:S}=divmod(S,e.BigInt(w))),{days:e.toNumber(t),nanoseconds:S,dayLengthNs:w}}const g=GetSlot(o,r),I=GetSlot(o,T),D=e.add(g,S),G=new f(D),v=GetSlot(o,p),O=GetSlot(o,u),C=BuiltinTimeZoneGetPlainDateTimeFor(v,I,O),E=BuiltinTimeZoneGetPlainDateTimeFor(v,G,O);let{days:b}=DifferenceISODateTime(GetSlot(C,n),GetSlot(C,a),GetSlot(C,i),GetSlot(C,s),GetSlot(C,l),GetSlot(C,d),GetSlot(C,m),GetSlot(C,c),GetSlot(C,h),GetSlot(E,n),GetSlot(E,a),GetSlot(E,i),GetSlot(E,s),GetSlot(E,l),GetSlot(E,d),GetSlot(E,m),GetSlot(E,c),GetSlot(E,h),O,"day",le(null)),M=AddZonedDateTime(I,v,O,0,0,0,b,0,0,0,0,0,0);if(1===y)for(;b>0&&e.greaterThan(M,D);)--b,M=AddZonedDateTime(I,v,O,0,0,0,b,0,0,0,0,0,0);S=e.subtract(D,M);let R=!1,Z=new f(M);do{const t=AddZonedDateTime(Z,v,O,0,0,0,y,0,0,0,0,0,0),o=GetSlot(Z,r);w=e.toNumber(e.subtract(t,o)),R=e.greaterThan(e.multiply(e.subtract(S,e.BigInt(w)),e.BigInt(y)),he),R&&(S=e.subtract(S,e.BigInt(w)),Z=new f(t),b+=y)}while(R);return{days:b,nanoseconds:S,dayLengthNs:K(w)}}function BalanceDuration(t,o,n,a,i,s,l,d,m){let c,h,f,y,S,w,g=t;if(IsTemporalZonedDateTime(m)){const t=AddZonedDateTime(GetSlot(m,T),GetSlot(m,p),GetSlot(m,u),0,0,0,g,o,n,a,i,s,l),d=GetSlot(m,r);c=e.subtract(t,d)}else c=TotalDurationNanoseconds(g,o,n,a,i,s,l,0);"year"===d||"month"===d||"week"===d||"day"===d?({days:g,nanoseconds:c}=NanosecondsToDays(c,m)):g=0;const I=e.lessThan(c,he)?-1:1;switch(c=abs(c),h=f=y=S=w=he,d){case"year":case"month":case"week":case"day":case"hour":({quotient:h,remainder:c}=divmod(c,pe)),({quotient:f,remainder:h}=divmod(h,pe)),({quotient:y,remainder:f}=divmod(f,pe)),({quotient:S,remainder:y}=divmod(y,Te)),({quotient:w,remainder:S}=divmod(S,Te));break;case"minute":({quotient:h,remainder:c}=divmod(c,pe)),({quotient:f,remainder:h}=divmod(h,pe)),({quotient:y,remainder:f}=divmod(f,pe)),({quotient:S,remainder:y}=divmod(y,Te));break;case"second":({quotient:h,remainder:c}=divmod(c,pe)),({quotient:f,remainder:h}=divmod(h,pe)),({quotient:y,remainder:f}=divmod(f,pe));break;case"millisecond":({quotient:h,remainder:c}=divmod(c,pe)),({quotient:f,remainder:h}=divmod(h,pe));break;case"microsecond":({quotient:h,remainder:c}=divmod(c,pe));break;case"nanosecond":break;default:throw new Error("assert not reached")}return{days:g,hours:e.toNumber(w)*I,minutes:e.toNumber(S)*I,seconds:e.toNumber(y)*I,milliseconds:e.toNumber(f)*I,microseconds:e.toNumber(h)*I,nanoseconds:e.toNumber(c)*I}}function UnbalanceDurationRelative(e,t,r,o,n,a){let i=e,s=t,l=r,d=o;const m=GetIntrinsic("%Temporal.Duration%"),c=DurationSign(i,s,l,d,0,0,0,0,0,0);let h,T;a&&(T=ToTemporalDate(a),h=GetSlot(T,u));const p=new m(c),f=new m(0,c),S=new m(0,0,c);switch(n){case"year":break;case"month":{if(!h)throw new RangeError("a starting point is required for months balancing");const e=h.dateAdd,t=h.dateUntil;let r=T;for(;K(i)>0;){const o=CalendarDateAdd(h,r,p,void 0,e),n=le(null);n.largestUnit="month";const a=GetSlot(CalendarDateUntil(h,r,o,n,t),y);r=o,s+=a,i-=c}}break;case"week":if(!h)throw new RangeError("a starting point is required for weeks balancing");for(;K(i)>0;){let e;({relativeTo:T,days:e}=MoveRelativeDate(h,T,p)),d+=e,i-=c}for(;K(s)>0;){let e;({relativeTo:T,days:e}=MoveRelativeDate(h,T,f)),d+=e,s-=c}break;default:for(;K(i)>0;){if(!h)throw new RangeError("a starting point is required for balancing calendar units");let e;({relativeTo:T,days:e}=MoveRelativeDate(h,T,p)),d+=e,i-=c}for(;K(s)>0;){if(!h)throw new RangeError("a starting point is required for balancing calendar units");let e;({relativeTo:T,days:e}=MoveRelativeDate(h,T,f)),d+=e,s-=c}for(;K(l)>0;){if(!h)throw new RangeError("a starting point is required for balancing calendar units");let e;({relativeTo:T,days:e}=MoveRelativeDate(h,T,S)),d+=e,l-=c}}return{years:i,months:s,weeks:l,days:d}}function CalculateOffsetShift(e,t,r,o,n){if(IsTemporalZonedDateTime(e)){const a=GetSlot(e,T),i=GetSlot(e,p),s=GetSlot(e,u),l=GetOffsetNanosecondsFor(i,a),d=AddZonedDateTime(a,i,s,t,r,o,n,0,0,0,0,0,0);return GetOffsetNanosecondsFor(i,new(GetIntrinsic("%Temporal.Instant%"))(d))-l}return 0}function CreateNegatedTemporalDuration(e){return new(GetIntrinsic("%Temporal.Duration%"))(-GetSlot(e,f),-GetSlot(e,y),-GetSlot(e,S),-GetSlot(e,w),-GetSlot(e,g),-GetSlot(e,I),-GetSlot(e,D),-GetSlot(e,G),-GetSlot(e,v),-GetSlot(e,O))}function ConstrainToRange(e,t,r){return V(r,X(t,e))}function ConstrainISODate(e,t,r){const o=ConstrainToRange(t,1,12);return{year:e,month:o,day:ConstrainToRange(r,1,ISODaysInMonth(e,o))}}function RejectToRange(e,t,r){if(er)throw new RangeError(`value out of range: ${t} <= ${e} <= ${r}`)}function RejectISODate(e,t,r){RejectToRange(t,1,12),RejectToRange(r,1,ISODaysInMonth(e,t))}function RejectDateRange(e,t,r){RejectDateTimeRange(e,t,r,12,0,0,0,0,0)}function RejectTime(e,t,r,o,n,a){RejectToRange(e,0,23),RejectToRange(t,0,59),RejectToRange(r,0,59),RejectToRange(o,0,999),RejectToRange(n,0,999),RejectToRange(a,0,999)}function RejectDateTime(e,t,r,o,n,a,i,s,l){RejectISODate(e,t,r),RejectTime(o,n,a,i,s,l)}function RejectDateTimeRange(e,t,r,o,n,a,i,s,l){if(RejectToRange(e,-271821,275760),-271821===e&&null==GetEpochFromISOParts(e,t,r+1,o,n,a,i,s,l-1)||275760===e&&null==GetEpochFromISOParts(e,t,r-1,o,n,a,i,s,l+1))throw new RangeError("DateTime outside of supported range")}function ValidateEpochNanoseconds(t){if(e.lessThan(t,ge)||e.greaterThan(t,Ie))throw new RangeError("Instant outside of supported range")}function RejectDuration(e,t,r,o,n,a,i,s,l,d){const m=DurationSign(e,t,r,o,n,a,i,s,l,d);for(const c of[e,t,r,o,n,a,i,s,l,d]){if(!oe(c))throw new RangeError("infinite values not allowed as duration fields");const e=ee(c);if(0!==e&&e!==m)throw new RangeError("mixed-sign values not allowed as duration fields")}}function DifferenceISODate(e,t,r,o,n,a,i){switch(i){case"year":case"month":{const s=-CompareISODate(e,t,r,o,n,a);if(0===s)return{years:0,months:0,weeks:0,days:0};const l={year:e,month:t,day:r},d={year:o,month:n,day:a};let m=d.year-l.year,c=AddISODate(e,t,r,m,0,0,0,"constrain"),h=-CompareISODate(c.year,c.month,c.day,o,n,a);if(0===h)return"year"===i?{years:m,months:0,weeks:0,days:0}:{years:0,months:12*m,weeks:0,days:0};let u=d.month-l.month;if(h!==s&&(m-=s,u+=12*s),c=AddISODate(e,t,r,m,u,0,0,"constrain"),h=-CompareISODate(c.year,c.month,c.day,o,n,a),0===h)return"year"===i?{years:m,months:u,weeks:0,days:0}:{years:0,months:u+12*m,weeks:0,days:0};h!==s&&(u-=s,u===-s&&(m-=s,u=11*s),c=AddISODate(e,t,r,m,u,0,0,"constrain"));let T=0;return T=c.month===d.month?d.day-c.day:s<0?-c.day-(ISODaysInMonth(d.year,d.month)-d.day):d.day+(ISODaysInMonth(c.year,c.month)-c.day),"month"===i&&(u+=12*m,m=0),{years:m,months:u,weeks:0,days:T}}case"week":case"day":{let s,l,d;CompareISODate(e,t,r,o,n,a)<0?(l={year:e,month:t,day:r},s={year:o,month:n,day:a},d=1):(l={year:o,month:n,day:a},s={year:e,month:t,day:r},d=-1);let m=DayOfYear(s.year,s.month,s.day)-DayOfYear(l.year,l.month,l.day);for(let e=l.year;e("date"===o&&"week"!==r&&"day"!==r&&e.push(r,t),e)),[]),h=GetTemporalUnit(m,"smallestUnit","date","month");if("week"===h||"day"===h)throw new RangeError(`smallestUnit must be one of ${c.join(", ")}, not ${h}`);let T=GetTemporalUnit(m,"largestUnit","date","auto");if("week"===T||"day"===T)throw new RangeError(`largestUnit must be one of ${c.join(", ")}, not ${T}`);if("auto"===T&&(T="year"),LargerOfTwoTemporalUnits(T,h)!==T)throw new RangeError(`largestUnit ${T} cannot be smaller than smallestUnit ${h}`);let p=ToTemporalRoundingMode(m,"trunc");"since"===e&&(p=NegateTemporalRoundingMode(p));const f=ToTemporalRoundingIncrement(m,void 0,!1),y=CalendarFields(i,["monthCode","year"]),S=PrepareTemporalFields(a,y,[]);S.day=1;const w=PrepareTemporalFields(t,y,[]);w.day=1;const g=CalendarDateFromFields(i,S),I=CalendarDateFromFields(i,w),D=MergeLargestUnitOption(m,T);let{years:G,months:v}=CalendarDateUntil(i,I,g,D);"month"===h&&1===f||({years:G,months:v}=RoundDuration(G,v,0,0,0,0,0,0,0,0,f,h,p,I));return new(GetIntrinsic("%Temporal.Duration%"))(n*G,n*v,0,0,0,0,0,0,0,0)}function DifferenceTemporalZonedDateTime(e,t,o,n){const a="since"===e?-1:1,i=ToTemporalZonedDateTime(o),s=GetSlot(t,u),l=GetSlot(i,u),d=ToString(s),m=ToString(l);if(d!==m)throw new RangeError(`cannot compute difference between dates of ${d} and ${m} calendars`);const c=GetOptionsObject(n),h=GetTemporalUnit(c,"smallestUnit","datetime","nanosecond"),T=LargerOfTwoTemporalUnits("hour",h);let f=GetTemporalUnit(c,"largestUnit","datetime","auto");if("auto"===f&&(f=T),LargerOfTwoTemporalUnits(f,h)!==f)throw new RangeError(`largestUnit ${f} cannot be smaller than smallestUnit ${h}`);let y=ToTemporalRoundingMode(c,"trunc");"since"===e&&(y=NegateTemporalRoundingMode(y));const S=ToTemporalDateTimeRoundingIncrement(c,h),w=GetSlot(t,r),g=GetSlot(i,r);let I,D,G,v,O,C,E,b,M,R;if("year"!==f&&"month"!==f&&"week"!==f&&"day"!==f)I=0,D=0,G=0,v=0,({seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=DifferenceInstant(w,g,S,h,y)),({hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=BalanceDuration(0,0,0,E,b,M,R,f));else{const e=GetSlot(t,p);if(!TimeZoneEquals(e,GetSlot(i,p)))throw new RangeError("When calculating difference between time zones, largestUnit must be 'hours' or smaller because day lengths can vary between time zones due to DST or time zone offset changes.");const r=MergeLargestUnitOption(c,f);({years:I,months:D,weeks:G,days:v,hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=DifferenceZonedDateTime(w,g,e,s,f,r)),({years:I,months:D,weeks:G,days:v,hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=RoundDuration(I,D,G,v,O,C,E,b,M,R,S,h,y,t)),({years:I,months:D,weeks:G,days:v,hours:O,minutes:C,seconds:E,milliseconds:b,microseconds:M,nanoseconds:R}=AdjustRoundedDurationDays(I,D,G,v,O,C,E,b,M,R,S,h,y,t))}return new(GetIntrinsic("%Temporal.Duration%"))(a*I,a*D,a*G,a*v,a*O,a*C,a*E,a*b,a*M,a*R)}function AddISODate(e,t,r,o,n,a,i,s){let l=e,d=t,m=r,c=a,h=i;return l+=o,d+=n,({year:l,month:d}=BalanceISOYearMonth(l,d)),({year:l,month:d,day:m}=RegulateISODate(l,d,m,s)),h+=7*c,m+=h,({year:l,month:d,day:m}=BalanceISODate(l,d,m)),{year:l,month:d,day:m}}function AddTime(e,t,r,o,n,a,i,s,l,d,m,c){let h=e,u=t,T=r,p=o,f=n,y=a;h+=i,u+=s,T+=l,p+=d,f+=m,y+=c;let S=0;return({deltaDays:S,hour:h,minute:u,second:T,millisecond:p,microsecond:f,nanosecond:y}=BalanceTime(h,u,T,p,f,y)),{deltaDays:S,hour:h,minute:u,second:T,millisecond:p,microsecond:f,nanosecond:y}}function AddDuration(e,t,o,n,a,i,s,l,d,m,c,h,f,y,S,w,g,I,D,G,v){const O=LargerOfTwoTemporalUnits(DefaultTemporalLargestUnit(e,t,o,n,a,i,s,l,d,m),DefaultTemporalLargestUnit(c,h,f,y,S,w,g,I,D,G));let C,E,b,M,R,Z,P,F,Y,j;if(v)if(IsTemporalDate(v)){const r=GetIntrinsic("%Temporal.Duration%"),T=GetSlot(v,u),p=new r(e,t,o,n,0,0,0,0,0,0),$=new r(c,h,f,y,0,0,0,0,0,0),B=T.dateAdd,N=CalendarDateAdd(T,v,p,void 0,B),k=CalendarDateAdd(T,N,$,void 0,B),A=LargerOfTwoTemporalUnits("day",O),U=le(null);U.largestUnit=A,({years:C,months:E,weeks:b,days:M}=CalendarDateUntil(T,v,k,U)),({days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=BalanceDuration(M,a+S,i+w,s+g,l+I,d+D,m+G,O))}else{const $=GetIntrinsic("%Temporal.Instant%"),B=GetSlot(v,p),N=GetSlot(v,u),k=AddZonedDateTime(GetSlot(v,T),B,N,e,t,o,n,a,i,s,l,d,m),A=AddZonedDateTime(new $(k),B,N,c,h,f,y,S,w,g,I,D,G);"year"!==O&&"month"!==O&&"week"!==O&&"day"!==O?(C=0,E=0,b=0,M=0,({seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=DifferenceInstant(GetSlot(v,r),A,1,"nanosecond","halfExpand")),({hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=BalanceDuration(0,0,0,P,F,Y,j,O))):({years:C,months:E,weeks:b,days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=DifferenceZonedDateTime(GetSlot(v,r),A,B,N,O,le(null)))}else{if("year"===O||"month"===O||"week"===O)throw new RangeError("relativeTo is required for years, months, or weeks arithmetic");C=E=b=0,({days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}=BalanceDuration(n+y,a+S,i+w,s+g,l+I,d+D,m+G,O))}return RejectDuration(C,E,b,M,R,Z,P,F,Y,j),{years:C,months:E,weeks:b,days:M,hours:R,minutes:Z,seconds:P,milliseconds:F,microseconds:Y,nanoseconds:j}}function AddInstant(t,r,o,n,a,i,s){let l=he;l=e.add(l,e.BigInt(s)),l=e.add(l,e.multiply(e.BigInt(i),pe)),l=e.add(l,e.multiply(e.BigInt(a),fe)),l=e.add(l,e.multiply(e.BigInt(n),ye)),l=e.add(l,e.multiply(e.BigInt(o),e.BigInt(6e10))),l=e.add(l,e.multiply(e.BigInt(r),e.BigInt(36e11)));const d=e.add(t,l);return ValidateEpochNanoseconds(d),d}function AddDateTime(e,t,r,o,s,l,d,m,c,h,u,T,p,f,y,S,w,g,I,D,G){let v=f,{deltaDays:O,hour:C,minute:E,second:b,millisecond:M,microsecond:R,nanosecond:Z}=AddTime(o,s,l,d,m,c,y,S,w,g,I,D);v+=O;const P=GetIntrinsic("%Temporal.Duration%"),F=CalendarDateAdd(h,CreateTemporalDate(e,t,r,h),new P(u,T,p,v,0,0,0,0,0,0),G);return{year:GetSlot(F,n),month:GetSlot(F,a),day:GetSlot(F,i),hour:C,minute:E,second:b,millisecond:M,microsecond:R,nanosecond:Z}}function AddZonedDateTime(e,t,o,u,T,p,f,y,S,w,g,I,D,G){const v=GetIntrinsic("%Temporal.Duration%");if(0===DurationSign(u,T,p,f,0,0,0,0,0,0))return AddInstant(GetSlot(e,r),y,S,w,g,I,D);const O=BuiltinTimeZoneGetPlainDateTimeFor(t,e,o),C=CalendarDateAdd(o,CreateTemporalDate(GetSlot(O,n),GetSlot(O,a),GetSlot(O,i),o),new v(u,T,p,f,0,0,0,0,0,0),G),E=CreateTemporalDateTime(GetSlot(C,n),GetSlot(C,a),GetSlot(C,i),GetSlot(O,s),GetSlot(O,l),GetSlot(O,d),GetSlot(O,m),GetSlot(O,c),GetSlot(O,h),o);return AddInstant(GetSlot(BuiltinTimeZoneGetInstantFor(t,E,"compatible"),r),y,S,w,g,I,D)}function AddDurationToOrSubtractDurationFromDuration(e,t,r,o){const n="subtract"===e?-1:1;let{years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:h,microseconds:u,nanoseconds:T}=ToTemporalDurationRecord(r);const p=ToRelativeTemporalObject(GetOptionsObject(o));({years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:h,microseconds:u,nanoseconds:T}=AddDuration(GetSlot(t,f),GetSlot(t,y),GetSlot(t,S),GetSlot(t,w),GetSlot(t,g),GetSlot(t,I),GetSlot(t,D),GetSlot(t,G),GetSlot(t,v),GetSlot(t,O),n*a,n*i,n*s,n*l,n*d,n*m,n*c,n*h,n*u,n*T,p));return new(GetIntrinsic("%Temporal.Duration%"))(a,i,s,l,d,m,c,h,u,T)}function AddDurationToOrSubtractDurationFromInstant(e,t,o){const n="subtract"===e?-1:1,{hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=function ToLimitedTemporalDuration(e,t){let r=ToTemporalDurationRecord(e);for(const e of t)if(0!==r[e])throw new RangeError(`Duration field ${e} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);return r}(o,["years","months","weeks","days"]),c=AddInstant(GetSlot(t,r),n*a,n*i,n*s,n*l,n*d,n*m);return new(GetIntrinsic("%Temporal.Instant%"))(c)}function AddDurationToOrSubtractDurationFromPlainDateTime(e,t,r,o){const T="subtract"===e?-1:1,{years:p,months:f,weeks:y,days:S,hours:w,minutes:g,seconds:I,milliseconds:D,microseconds:G,nanoseconds:v}=ToTemporalDurationRecord(r),O=GetOptionsObject(o),C=GetSlot(t,u),{year:E,month:b,day:M,hour:R,minute:Z,second:P,millisecond:F,microsecond:Y,nanosecond:j}=AddDateTime(GetSlot(t,n),GetSlot(t,a),GetSlot(t,i),GetSlot(t,s),GetSlot(t,l),GetSlot(t,d),GetSlot(t,m),GetSlot(t,c),GetSlot(t,h),C,T*p,T*f,T*y,T*S,T*w,T*g,T*I,T*D,T*G,T*v,O);return CreateTemporalDateTime(E,b,M,R,Z,P,F,Y,j,C)}function AddDurationToOrSubtractDurationFromPlainTime(e,t,r){const o="subtract"===e?-1:1,{hours:n,minutes:a,seconds:i,milliseconds:u,microseconds:T,nanoseconds:p}=ToTemporalDurationRecord(r);let{hour:f,minute:y,second:S,millisecond:w,microsecond:g,nanosecond:I}=AddTime(GetSlot(t,s),GetSlot(t,l),GetSlot(t,d),GetSlot(t,m),GetSlot(t,c),GetSlot(t,h),o*n,o*a,o*i,o*u,o*T,o*p);({hour:f,minute:y,second:S,millisecond:w,microsecond:g,nanosecond:I}=RegulateTime(f,y,S,w,g,I,"reject"));return new(GetIntrinsic("%Temporal.PlainTime%"))(f,y,S,w,g,I)}function AddDurationToOrSubtractDurationFromPlainYearMonth(e,t,r,o){let n=ToTemporalDurationRecord(r);"subtract"===e&&(n={years:-n.years,months:-n.months,weeks:-n.weeks,days:-n.days,hours:-n.hours,minutes:-n.minutes,seconds:-n.seconds,milliseconds:-n.milliseconds,microseconds:-n.microseconds,nanoseconds:-n.nanoseconds});let{years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:h,microseconds:T,nanoseconds:p}=n;({days:l}=BalanceDuration(l,d,m,c,h,T,p,"day"));const f=GetOptionsObject(o),y=GetSlot(t,u),S=CalendarFields(y,["monthCode","year"]),w=PrepareTemporalFields(t,S,[]),g=DurationSign(a,i,s,l,0,0,0,0,0,0);w.day=g<0?ToPositiveInteger(CalendarDaysInMonth(y,t)):1;const I=CalendarDateFromFields(y,w),D=new(GetIntrinsic("%Temporal.Duration%"))(a,i,s,l,0,0,0,0,0,0),G=se(le(null),f);return CalendarYearMonthFromFields(y,PrepareTemporalFields(CalendarDateAdd(y,I,D,f),S,[]),G)}function AddDurationToOrSubtractDurationFromZonedDateTime(e,t,r,o){const n="subtract"===e?-1:1,{years:a,months:i,weeks:s,days:l,hours:d,minutes:m,seconds:c,milliseconds:h,microseconds:f,nanoseconds:y}=ToTemporalDurationRecord(r),S=GetOptionsObject(o),w=GetSlot(t,p),g=GetSlot(t,u);return CreateTemporalZonedDateTime(AddZonedDateTime(GetSlot(t,T),w,g,n*a,n*i,n*s,n*l,n*d,n*m,n*c,n*h,n*f,n*y,S),w,g)}function RoundNumberToIncrement(t,r,o){if(1===r)return t;let{quotient:n,remainder:a}=divmod(t,e.BigInt(r));if(e.equal(a,he))return t;const i=e.lessThan(a,he)?-1:1;switch(o){case"ceil":i>0&&(n=e.add(n,e.BigInt(i)));break;case"floor":i<0&&(n=e.add(n,e.BigInt(i)));break;case"trunc":break;case"halfExpand":e.toNumber(abs(e.multiply(a,e.BigInt(2))))>=r&&(n=e.add(n,e.BigInt(i)))}return e.multiply(n,e.BigInt(r))}function RoundInstant(t,r,o,n){let a=e.remainder(t,e.BigInt(864e11));e.lessThan(a,he)&&(a=e.add(a,e.BigInt(864e11)));const i=e.subtract(t,a),s=RoundNumberToIncrement(a,Ne[o]*r,n);return e.add(i,s)}function RoundISODateTime(e,t,r,o,n,a,i,s,l,d,m,c,h=864e11){const{deltaDays:u,hour:T,minute:p,second:f,millisecond:y,microsecond:S,nanosecond:w}=RoundTime(o,n,a,i,s,l,d,m,c,h),{year:g,month:I,day:D}=BalanceISODate(e,t,r+u);return{year:g,month:I,day:D,hour:T,minute:p,second:f,millisecond:y,microsecond:S,nanosecond:w}}function RoundTime(t,r,o,n,a,i,s,l,d,m=864e11){let c=he;switch(l){case"day":case"hour":c=e.BigInt(t);case"minute":c=e.add(e.multiply(c,Te),e.BigInt(r));case"second":c=e.add(e.multiply(c,Te),e.BigInt(o));case"millisecond":c=e.add(e.multiply(c,pe),e.BigInt(n));case"microsecond":c=e.add(e.multiply(c,pe),e.BigInt(a));case"nanosecond":c=e.add(e.multiply(c,pe),e.BigInt(i))}const h="day"===l?m:Ne[l],u=RoundNumberToIncrement(c,h*s,d),T=e.toNumber(e.divide(u,e.BigInt(h)));switch(l){case"day":return{deltaDays:T,hour:0,minute:0,second:0,millisecond:0,microsecond:0,nanosecond:0};case"hour":return BalanceTime(T,0,0,0,0,0);case"minute":return BalanceTime(t,T,0,0,0,0);case"second":return BalanceTime(t,r,T,0,0,0);case"millisecond":return BalanceTime(t,r,o,T,0,0);case"microsecond":return BalanceTime(t,r,o,n,T,0);case"nanosecond":return BalanceTime(t,r,o,n,a,T);default:throw new Error(`Invalid unit ${l}`)}}function DaysUntil(e,t){return DifferenceISODate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(t,n),GetSlot(t,a),GetSlot(t,i),"day").days}function MoveRelativeDate(e,t,r){const o=CalendarDateAdd(e,t,r,void 0);return{relativeTo:o,days:DaysUntil(t,o)}}function MoveRelativeZonedDateTime(e,t,r,o,n){const a=GetSlot(e,p),i=GetSlot(e,u);return CreateTemporalZonedDateTime(AddZonedDateTime(GetSlot(e,T),a,i,t,r,o,n,0,0,0,0,0,0),a,i)}function AdjustRoundedDurationDays(t,r,o,n,a,i,s,l,d,m,c,h,f,y){let S=t,w=r,g=o,I=n,D=a,G=i,v=s,O=l,C=d,E=m;if(!IsTemporalZonedDateTime(y)||"year"===h||"month"===h||"week"===h||"day"===h||"nanosecond"===h&&1===c)return{years:S,months:w,weeks:g,days:I,hours:D,minutes:G,seconds:v,milliseconds:O,microseconds:C,nanoseconds:E};let b=TotalDurationNanoseconds(0,D,G,v,O,C,E,0);const M=ee(e.toNumber(b)),R=GetSlot(y,p),Z=GetSlot(y,u),P=AddZonedDateTime(GetSlot(y,T),R,Z,S,w,g,I,0,0,0,0,0,0),F=AddZonedDateTime(new(GetIntrinsic("%Temporal.Instant%"))(P),R,Z,0,0,0,M,0,0,0,0,0,0),Y=e.subtract(F,P);return e.greaterThanOrEqual(e.multiply(e.subtract(b,Y),e.BigInt(M)),he)&&(({years:S,months:w,weeks:g,days:I}=AddDuration(S,w,g,I,0,0,0,0,0,0,0,0,0,M,0,0,0,0,0,0,y)),b=RoundInstant(e.subtract(b,Y),c,h,f),({hours:D,minutes:G,seconds:v,milliseconds:O,microseconds:C,nanoseconds:E}=BalanceDuration(0,0,0,0,0,0,e.toNumber(b),"hour"))),{years:S,months:w,weeks:g,days:I,hours:D,minutes:G,seconds:v,milliseconds:O,microseconds:C,nanoseconds:E}}function RoundDuration(t,r,o,n,a,i,s,l,d,m,c,h,T,p){let f=t,y=r,S=o,w=n,g=a,I=i,D=s,G=l,v=d,O=e.BigInt(m);const C=GetIntrinsic("%Temporal.Duration%");let E,b,M,R,Z=p;if(Z){if(IsTemporalZonedDateTime(Z))b=Z,Z=ToTemporalDate(Z);else if(!IsTemporalDate(Z))throw new TypeError("starting point must be PlainDate or ZonedDateTime");E=GetSlot(Z,u)}if("year"===h||"month"===h||"week"===h||"day"===h){let t,r,o;O=TotalDurationNanoseconds(0,g,I,D,G,v,m,0),b&&(t=MoveRelativeZonedDateTime(b,f,y,S,w)),({days:r,nanoseconds:O,dayLengthNs:o}=NanosecondsToDays(O,t)),M=e.BigInt(o),w+=r,g=I=D=G=v=0}switch(h){case"year":{if(!E)throw new RangeError("A starting point is required for years rounding");const t=new C(f),r=E.dateAdd,o=CalendarDateAdd(E,Z,t,void 0,r),n=CalendarDateAdd(E,Z,new C(f,y,S),void 0,r);Z=o,w+=DaysUntil(o,n);const a=CalendarDateAdd(E,Z,{days:w},void 0,r),i=le(null);i.largestUnit="year";const s=CalendarDateUntil(E,Z,a,i).years;f+=s;const l=Z;Z=CalendarDateAdd(E,Z,{years:s},void 0,r);w-=DaysUntil(l,Z);const d=new C(w<0?-1:1);let{days:m}=MoveRelativeDate(E,Z,d);m=K(m);const h=e.multiply(e.BigInt(m),M);O=e.add(e.add(e.multiply(h,e.BigInt(f)),e.multiply(e.BigInt(w),M)),O);const u=RoundNumberToIncrement(O,e.toNumber(e.multiply(h,e.BigInt(c))),T);R=e.toNumber(O)/e.toNumber(h),f=e.toNumber(e.divide(u,h)),O=he,y=S=w=0;break}case"month":{if(!E)throw new RangeError("A starting point is required for months rounding");const t=new C(f,y),r=E.dateAdd,o=CalendarDateAdd(E,Z,t,void 0,r),n=CalendarDateAdd(E,Z,new C(f,y,S),void 0,r);Z=o,w+=DaysUntil(o,n);const a=ee(w),i=new C(0,w<0?-1:1);let s;for(({relativeTo:Z,days:s}=MoveRelativeDate(E,Z,i));K(w)>=K(s);)y+=a,w-=s,({relativeTo:Z,days:s}=MoveRelativeDate(E,Z,i));s=K(s);const l=e.multiply(e.BigInt(s),M);O=e.add(e.add(e.multiply(l,e.BigInt(y)),e.multiply(e.BigInt(w),M)),O);const d=RoundNumberToIncrement(O,e.toNumber(e.multiply(l,e.BigInt(c))),T);R=e.toNumber(O)/e.toNumber(l),y=e.toNumber(e.divide(d,l)),O=he,S=w=0;break}case"week":{if(!E)throw new RangeError("A starting point is required for weeks rounding");const t=ee(w),r=new C(0,0,w<0?-1:1);let o;for(({relativeTo:Z,days:o}=MoveRelativeDate(E,Z,r));K(w)>=K(o);)S+=t,w-=o,({relativeTo:Z,days:o}=MoveRelativeDate(E,Z,r));o=K(o);const n=e.multiply(e.BigInt(o),M);O=e.add(e.add(e.multiply(n,e.BigInt(S)),e.multiply(e.BigInt(w),M)),O);const a=RoundNumberToIncrement(O,e.toNumber(e.multiply(n,e.BigInt(c))),T);R=e.toNumber(O)/e.toNumber(n),S=e.toNumber(e.divide(a,n)),O=he,w=0;break}case"day":{const t=M;O=e.add(e.multiply(t,e.BigInt(w)),O);const r=RoundNumberToIncrement(O,e.toNumber(e.multiply(t,e.BigInt(c))),T);R=e.toNumber(O)/e.toNumber(t),w=e.toNumber(e.divide(r,t)),O=he;break}case"hour":{const t=36e11;let r=e.multiply(e.BigInt(g),e.BigInt(36e11));r=e.add(r,e.multiply(e.BigInt(I),e.BigInt(6e10))),r=e.add(r,e.multiply(e.BigInt(D),ye)),r=e.add(r,e.multiply(e.BigInt(G),fe)),r=e.add(r,e.multiply(e.BigInt(v),pe)),r=e.add(r,O),R=e.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);g=e.toNumber(e.divide(o,e.BigInt(t))),O=he,I=D=G=v=0;break}case"minute":{const t=6e10;let r=e.multiply(e.BigInt(I),e.BigInt(6e10));r=e.add(r,e.multiply(e.BigInt(D),ye)),r=e.add(r,e.multiply(e.BigInt(G),fe)),r=e.add(r,e.multiply(e.BigInt(v),pe)),r=e.add(r,O),R=e.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);I=e.toNumber(e.divide(o,e.BigInt(t))),O=he,D=G=v=0;break}case"second":{const t=1e9;let r=e.multiply(e.BigInt(D),ye);r=e.add(r,e.multiply(e.BigInt(G),fe)),r=e.add(r,e.multiply(e.BigInt(v),pe)),r=e.add(r,O),R=e.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);D=e.toNumber(e.divide(o,e.BigInt(t))),O=he,G=v=0;break}case"millisecond":{const t=1e6;let r=e.multiply(e.BigInt(G),fe);r=e.add(r,e.multiply(e.BigInt(v),pe)),r=e.add(r,O),R=e.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);G=e.toNumber(e.divide(o,e.BigInt(t))),O=he,v=0;break}case"microsecond":{const t=1e3;let r=e.multiply(e.BigInt(v),pe);r=e.add(r,O),R=e.toNumber(r)/t;const o=RoundNumberToIncrement(r,t*c,T);v=e.toNumber(e.divide(o,e.BigInt(t))),O=he;break}case"nanosecond":R=e.toNumber(O),O=RoundNumberToIncrement(O,c,T)}return{years:f,months:y,weeks:S,days:w,hours:g,minutes:I,seconds:D,milliseconds:G,microseconds:v,nanoseconds:e.toNumber(O),total:R}}function CompareISODate(e,t,r,o,n,a){for(const[i,s]of[[e,o],[t,n],[r,a]])if(i!==s)return ComparisonResult(i-s);return 0}function NonNegativeModulo(e,t){let r=e%t;return me(r,-0)?0:(r<0&&(r+=t),r)}function ToBigIntExternal(e){const t=ToBigInt(e);return void 0!==globalThis.BigInt?globalThis.BigInt(t.toString(10)):t}function ToBigInt(t){if(t instanceof e)return t;let r=t;if("object"==typeof t){const e=t[Symbol.toPrimitive];e&&"function"==typeof e&&(r=ce(e,t,["number"]))}switch(typeof r){case"undefined":case"object":case"number":case"symbol":default:throw new TypeError(`cannot convert ${typeof t} to bigint`);case"string":if(!r.match(/^\s*(?:[+-]?\d+\s*)?$/))throw new SyntaxError("invalid BigInt syntax");case"bigint":try{return e.BigInt(r.toString())}catch(e){if(e instanceof Error&&e.message.startsWith("Invalid integer"))throw new SyntaxError(e.message);throw e}case"boolean":return r?ue:he}}const $e=(()=>{let t=e.BigInt(Date.now()%1e6);return()=>{const r=e.BigInt(Date.now()),o=e.add(e.multiply(r,fe),t);return t=e.remainder(r,fe),e.greaterThan(o,Ie)?Ie:e.lessThan(o,ge)?ge:o}})();function ComparisonResult(e){return e<0?-1:e>0?1:e}function GetOptionsObject(e){if(void 0===e)return le(null);if(IsObject(e)&&null!==e)return e;throw new TypeError("Options parameter must be an object, not "+(null===e?"null":""+typeof e))}function CreateOnePropObject(e,t){const r=le(null);return r[e]=t,r}function GetOption(e,t,r,o){let n=e[t];if(void 0!==n){if(n=ToString(n),!r.includes(n))throw new RangeError(`${t} must be one of ${r.join(", ")}, not ${n}`);return n}return o}function IsBuiltinCalendar(e){return z.call(Ce,e)}const Be=new RegExp(`^${B.source}$`);function bisect(t,r,o,n=t(r),a=t(o)){let i=e.BigInt(r),s=e.BigInt(o),l=n,d=a;for(;e.greaterThan(e.subtract(s,i),ue);){const r=e.divide(e.add(i,s),e.BigInt(2)),o=t(r);if(o===l)i=r,l=o;else{if(o!==d)throw new Error(`invalid state in bisection ${l} - ${o} - ${d}`);s=r,d=o}}return s}const Ne={hour:36e11,minute:6e10,second:1e9,millisecond:1e6,microsecond:1e3,nanosecond:1},ke=Symbol("date"),Ae=Symbol("ym"),Ue=Symbol("md"),Le=Symbol("time"),xe=Symbol("datetime"),He=Symbol("zoneddatetime"),qe=Symbol("instant"),We=Symbol("original"),ze=Symbol("timezone"),_e=Symbol("timezone-id-given"),Je=Symbol("calendar-id"),Ve=Symbol("locale"),Xe=Symbol("options"),descriptor=e=>({value:e,enumerable:!0,writable:!1,configurable:!0}),Ke=globalThis.Intl.DateTimeFormat,Qe=Object.assign,et=Object.prototype.hasOwnProperty,tt=Reflect.apply;function getPropLazy(e,t){let r=e[t];return"function"==typeof r&&(r=new Ke(e[Ve],r(e[Xe])),e[t]=r),r}function getResolvedTimeZoneLazy(e){let t=e[ze];return"string"==typeof t&&(t=ToTemporalTimeZone(t),e[ze]=t),t}function DateTimeFormatImpl(e,t={}){if(!(this instanceof DateTimeFormatImpl))return new DateTimeFormatImpl(e,t);const r=void 0!==t,o=r?Qe({},t):{},n=new Ke(e,o),a=n.resolvedOptions();if(r){const e=Qe({},a);for(const t in e)tt(et,o,[t])||delete e[t];this[Xe]=e}else this[Xe]=o;this[_e]=o.timeZone?o.timeZone:null,this[Ve]=a.locale,this[We]=n,this[ze]=a.timeZone,this[Je]=a.calendar,this[ke]=dateAmend,this[Ae]=yearMonthAmend,this[Ue]=monthDayAmend,this[Le]=timeAmend,this[xe]=datetimeAmend,this[He]=zonedDateTimeAmend,this[qe]=instantAmend}Object.defineProperty(DateTimeFormatImpl,"name",{writable:!0,value:"DateTimeFormat"}),DateTimeFormatImpl.supportedLocalesOf=function(e,t){return Ke.supportedLocalesOf(e,t)};const rt={resolvedOptions:descriptor((function resolvedOptions(){return this[We].resolvedOptions()})),format:descriptor((function format(e,...t){let{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this);if(r&&o)return o=adjustFormatterTimeZone(o,n),o.format(r.epochMilliseconds);return this[We].format(e,...t)})),formatRange:descriptor((function formatRange(e,t){if(isTemporalObject(e)||isTemporalObject(t)){if(!sameTemporalType(e,t))throw new TypeError("Intl.DateTimeFormat.formatRange accepts two values of the same type");const{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this),{instant:a,formatter:i,timeZone:s}=extractOverrides(t,this);if(n&&s&&n!==s)throw new RangeError("cannot format range between different time zones");if(r&&a&&o&&i&&o===i){return adjustFormatterTimeZone(o,n).formatRange(r.epochMilliseconds,a.epochMilliseconds)}}return this[We].formatRange(e,t)}))};"formatToParts"in Ke.prototype&&(rt.formatToParts=descriptor((function formatToParts(e,...t){let{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this);if(r&&o)return o=adjustFormatterTimeZone(o,n),o.formatToParts(r.epochMilliseconds);return this[We].formatToParts(e,...t)}))),"formatRangeToParts"in Ke.prototype&&(rt.formatRangeToParts=descriptor((function formatRangeToParts(e,t){if(isTemporalObject(e)||isTemporalObject(t)){if(!sameTemporalType(e,t))throw new TypeError("Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type");const{instant:r,formatter:o,timeZone:n}=extractOverrides(e,this),{instant:a,formatter:i,timeZone:s}=extractOverrides(t,this);if(n&&s&&n!==s)throw new RangeError("cannot format range between different time zones");if(r&&a&&o&&i&&o===i){return adjustFormatterTimeZone(o,n).formatRangeToParts(r.epochMilliseconds,a.epochMilliseconds)}}return this[We].formatRangeToParts(e,t)}))),DateTimeFormatImpl.prototype=Object.create(Ke.prototype,rt),Object.defineProperty(DateTimeFormatImpl,"prototype",{writable:!1,enumerable:!1,configurable:!1});const ot=DateTimeFormatImpl;function adjustFormatterTimeZone(e,t){if(!t)return e;const r=e.resolvedOptions();return r.timeZone===t?e:((r.dateStyle||r.timeStyle)&&(delete r.weekday,delete r.era,delete r.year,delete r.month,delete r.day,delete r.hour,delete r.minute,delete r.second,delete r.timeZoneName,delete r.hourCycle,delete r.hour12,delete r.dayPeriod),new Ke(r.locale,{...r,timeZone:t}))}function amend(e={},t={}){const r=Qe({},e);for(const e of["year","month","day","hour","minute","second","weekday","dayPeriod","timeZoneName","dateStyle","timeStyle"])r[e]=e in t?t[e]:r[e],!1!==r[e]&&void 0!==r[e]||delete r[e];return r}function timeAmend(e){let t=amend(e,{year:!1,month:!1,day:!1,weekday:!1,timeZoneName:!1,dateStyle:!1});return hasTimeOptions(t)||(t=Qe({},t,{hour:"numeric",minute:"numeric",second:"numeric"})),t}function yearMonthAmend(e){let t=amend(e,{day:!1,hour:!1,minute:!1,second:!1,weekday:!1,dayPeriod:!1,timeZoneName:!1,dateStyle:!1,timeStyle:!1});return"year"in t||"month"in t||(t=Qe(t,{year:"numeric",month:"numeric"})),t}function monthDayAmend(e){let t=amend(e,{year:!1,hour:!1,minute:!1,second:!1,weekday:!1,dayPeriod:!1,timeZoneName:!1,dateStyle:!1,timeStyle:!1});return"month"in t||"day"in t||(t=Qe({},t,{month:"numeric",day:"numeric"})),t}function dateAmend(e){let t=amend(e,{hour:!1,minute:!1,second:!1,dayPeriod:!1,timeZoneName:!1,timeStyle:!1});return hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric"})),t}function datetimeAmend(e){let t=amend(e,{timeZoneName:!1});return hasTimeOptions(t)||hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),t}function zonedDateTimeAmend(e){let t=e;return hasTimeOptions(t)||hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}),void 0===t.timeZoneName&&(t.timeZoneName="short")),t}function instantAmend(e){let t=e;return hasTimeOptions(t)||hasDateOptions(t)||(t=Qe({},t,{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),t}function hasDateOptions(e){return"year"in e||"month"in e||"day"in e||"weekday"in e||"dateStyle"in e}function hasTimeOptions(e){return"hour"in e||"minute"in e||"second"in e||"timeStyle"in e||"dayPeriod"in e}function isTemporalObject(e){return IsTemporalDate(e)||IsTemporalTime(e)||IsTemporalDateTime(e)||IsTemporalZonedDateTime(e)||IsTemporalYearMonth(e)||IsTemporalMonthDay(e)||IsTemporalInstant(e)}function sameTemporalType(e,t){return!(!isTemporalObject(e)||!isTemporalObject(t))&&(!(IsTemporalTime(e)&&!IsTemporalTime(t))&&(!(IsTemporalDate(e)&&!IsTemporalDate(t))&&(!(IsTemporalDateTime(e)&&!IsTemporalDateTime(t))&&(!(IsTemporalZonedDateTime(e)&&!IsTemporalZonedDateTime(t))&&(!(IsTemporalYearMonth(e)&&!IsTemporalYearMonth(t))&&(!(IsTemporalMonthDay(e)&&!IsTemporalMonthDay(t))&&!(IsTemporalInstant(e)&&!IsTemporalInstant(t))))))))}function extractOverrides(e,t){const r=GetIntrinsic("%Temporal.PlainDateTime%");if(IsTemporalTime(e)){const o=new r(1970,1,1,GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,h),t[Je]);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),o,"compatible"),formatter:getPropLazy(t,Le)}}if(IsTemporalYearMonth(e)){const o=GetSlot(e,n),s=GetSlot(e,a),l=GetSlot(e,i),d=ToString(GetSlot(e,u));if(d!==t[Je])throw new RangeError(`cannot format PlainYearMonth with calendar ${d} in locale with calendar ${t[Je]}`);const m=new r(o,s,l,12,0,0,0,0,0,d);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),m,"compatible"),formatter:getPropLazy(t,Ae)}}if(IsTemporalMonthDay(e)){const o=GetSlot(e,n),s=GetSlot(e,a),l=GetSlot(e,i),d=ToString(GetSlot(e,u));if(d!==t[Je])throw new RangeError(`cannot format PlainMonthDay with calendar ${d} in locale with calendar ${t[Je]}`);const m=new r(o,s,l,12,0,0,0,0,0,d);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),m,"compatible"),formatter:getPropLazy(t,Ue)}}if(IsTemporalDate(e)){const o=GetSlot(e,n),s=GetSlot(e,a),l=GetSlot(e,i),d=ToString(GetSlot(e,u));if("iso8601"!==d&&d!==t[Je])throw new RangeError(`cannot format PlainDate with calendar ${d} in locale with calendar ${t[Je]}`);const m=new r(o,s,l,12,0,0,0,0,0,t[Je]);return{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),m,"compatible"),formatter:getPropLazy(t,ke)}}if(IsTemporalDateTime(e)){const o=GetSlot(e,n),T=GetSlot(e,a),p=GetSlot(e,i),f=GetSlot(e,s),y=GetSlot(e,l),S=GetSlot(e,d),w=GetSlot(e,m),g=GetSlot(e,c),I=GetSlot(e,h),D=ToString(GetSlot(e,u));if("iso8601"!==D&&D!==t[Je])throw new RangeError(`cannot format PlainDateTime with calendar ${D} in locale with calendar ${t[Je]}`);let G=e;return"iso8601"===D&&(G=new r(o,T,p,f,y,S,w,g,I,t[Je])),{instant:BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(t),G,"compatible"),formatter:getPropLazy(t,xe)}}if(IsTemporalZonedDateTime(e)){const r=ToString(GetSlot(e,u));if("iso8601"!==r&&r!==t[Je])throw new RangeError(`cannot format ZonedDateTime with calendar ${r} in locale with calendar ${t[Je]}`);const o=ToString(GetSlot(e,p));if(t[_e]&&t[_e]!==o)throw new RangeError(`timeZone option ${t[_e]} doesn't match actual time zone ${o}`);return{instant:GetSlot(e,T),formatter:getPropLazy(t,He),timeZone:o}}return IsTemporalInstant(e)?{instant:e,formatter:getPropLazy(t,qe)}:{}}var nt=Object.freeze({__proto__:null,DateTimeFormat:ot});class Instant{constructor(e){if(arguments.length<1)throw new TypeError("missing argument: epochNanoseconds is required");const t=ToBigInt(e);ValidateEpochNanoseconds(t),CreateSlots(this),SetSlot(this,r,t)}get epochSeconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return e.toNumber(e.divide(t,ye))}get epochMilliseconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=e.BigInt(GetSlot(this,r));return e.toNumber(e.divide(t,fe))}get epochMicroseconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=e.BigInt(GetSlot(this,r));return ToBigIntExternal(e.divide(t,pe))}get epochNanoseconds(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return ToBigIntExternal(e.BigInt(GetSlot(this,r)))}add(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromInstant("add",this,e)}subtract(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromInstant("subtract",this,e)}until(e,t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return DifferenceTemporalInstant("until",this,e,t)}since(e,t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return DifferenceTemporalInstant("since",this,e,t)}round(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");const t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),o=GetTemporalUnit(t,"smallestUnit","time",je),n=ToTemporalRoundingMode(t,"halfExpand"),a=ToTemporalRoundingIncrement(t,{hour:24,minute:1440,second:86400,millisecond:864e5,microsecond:864e8,nanosecond:864e11}[o],!0),i=RoundInstant(GetSlot(this,r),a,o,n);return new Instant(i)}equals(t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const o=ToTemporalInstant(t),n=GetSlot(this,r),a=GetSlot(o,r);return e.equal(e.BigInt(n),e.BigInt(a))}toString(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e);let o=t.timeZone;void 0!==o&&(o=ToTemporalTimeZone(o));const{precision:n,unit:a,increment:i}=ToSecondsStringPrecision(t),s=ToTemporalRoundingMode(t,"trunc"),l=RoundInstant(GetSlot(this,r),i,a,s);return TemporalInstantToString(new Instant(l),o,n)}toJSON(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return TemporalInstantToString(this,void 0,"auto")}toLocaleString(e,t){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.Instant")}toZonedDateTime(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument in toZonedDateTime");const t=e.calendar;if(void 0===t)throw new TypeError("missing calendar property in toZonedDateTime");const o=ToTemporalCalendar(t),n=e.timeZone;if(void 0===n)throw new TypeError("missing timeZone property in toZonedDateTime");const a=ToTemporalTimeZone(n);return CreateTemporalZonedDateTime(GetSlot(this,r),a,o)}toZonedDateTimeISO(e){let t=e;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(IsObject(t)){const e=t.timeZone;void 0!==e&&(t=e)}const o=ToTemporalTimeZone(t),n=GetISO8601Calendar();return CreateTemporalZonedDateTime(GetSlot(this,r),o,n)}static fromEpochSeconds(t){const r=ToNumber(t),o=e.multiply(e.BigInt(r),ye);return ValidateEpochNanoseconds(o),new Instant(o)}static fromEpochMilliseconds(t){const r=ToNumber(t),o=e.multiply(e.BigInt(r),fe);return ValidateEpochNanoseconds(o),new Instant(o)}static fromEpochMicroseconds(t){const r=ToBigInt(t),o=e.multiply(r,pe);return ValidateEpochNanoseconds(o),new Instant(o)}static fromEpochNanoseconds(e){const t=ToBigInt(e);return ValidateEpochNanoseconds(t),new Instant(t)}static from(e){return IsTemporalInstant(e)?new Instant(GetSlot(e,r)):ToTemporalInstant(e)}static compare(t,o){const n=ToTemporalInstant(t),a=ToTemporalInstant(o),i=GetSlot(n,r),s=GetSlot(a,r);return e.lessThan(i,s)?-1:e.greaterThan(i,s)?1:0}}MakeIntrinsicClass(Instant,"Temporal.Instant");const at=Array.prototype.includes,it=Array.prototype.push,st=globalThis.Intl.DateTimeFormat,lt=Array.prototype.sort,dt=Math.abs,mt=Math.floor,ct=Object.entries,ht=Object.keys,ut={};class Calendar{constructor(e){if(arguments.length<1)throw new RangeError("missing argument: id is required");const t=ToString(e);if(!IsBuiltinCalendar(t))throw new RangeError(`invalid calendar identifier ${t}`);CreateSlots(this),SetSlot(this,C,t)}get id(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ToString(this)}dateFromFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");const r=GetOptionsObject(t);return ut[GetSlot(this,C)].dateFromFields(e,r,this)}yearMonthFromFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");const r=GetOptionsObject(t);return ut[GetSlot(this,C)].yearMonthFromFields(e,r,this)}monthDayFromFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");const r=GetOptionsObject(t);return ut[GetSlot(this,C)].monthDayFromFields(e,r,this)}fields(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=[],r=new Set(["year","month","monthCode","day","hour","minute","second","millisecond","microsecond","nanosecond"]);for(const o of e){if("string"!=typeof o)throw new TypeError("invalid fields");if(!r.has(o))throw new RangeError(`invalid field name ${o}`);r.delete(o),it.call(t,o)}return ut[GetSlot(this,C)].fields(t)}mergeFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ut[GetSlot(this,C)].mergeFields(e,t)}dateAdd(e,t,r){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const o=ToTemporalDate(e),n=ToTemporalDuration(t),a=ToTemporalOverflow(GetOptionsObject(r)),{days:i}=BalanceDuration(GetSlot(n,w),GetSlot(n,g),GetSlot(n,I),GetSlot(n,D),GetSlot(n,G),GetSlot(n,v),GetSlot(n,O),"day");return ut[GetSlot(this,C)].dateAdd(o,GetSlot(n,f),GetSlot(n,y),GetSlot(n,S),i,a,this)}dateUntil(e,t,r){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const o=ToTemporalDate(e),n=ToTemporalDate(t);let a=GetTemporalUnit(GetOptionsObject(r),"largestUnit","date","auto");"auto"===a&&(a="day");const{years:i,months:s,weeks:l,days:d}=ut[GetSlot(this,C)].dateUntil(o,n,a);return new(GetIntrinsic("%Temporal.Duration%"))(i,s,l,d,0,0,0,0,0,0)}year(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].year(t)}month(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(IsTemporalMonthDay(t))throw new TypeError("use monthCode on PlainMonthDay instead");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].month(t)}monthCode(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||IsTemporalMonthDay(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].monthCode(t)}day(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalMonthDay(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].day(t)}era(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].era(t)}eraYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].eraYear(t)}dayOfWeek(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ut[GetSlot(this,C)].dayOfWeek(t)}dayOfYear(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ut[GetSlot(this,C)].dayOfYear(t)}weekOfYear(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ut[GetSlot(this,C)].weekOfYear(t)}daysInWeek(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);return ut[GetSlot(this,C)].daysInWeek(t)}daysInMonth(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].daysInMonth(t)}daysInYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].daysInYear(t)}monthsInYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].monthsInYear(t)}inLeapYear(e){let t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),ut[GetSlot(this,C)].inLeapYear(t)}toString(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return GetSlot(this,C)}toJSON(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ToString(this)}static from(e){return ToTemporalCalendar(e)}}function monthCodeNumberPart(e){if(!e.startsWith("M"))throw new RangeError(`Invalid month code: ${e}. Month codes must start with M.`);const t=+e.slice(1);if(isNaN(t))throw new RangeError(`Invalid month code: ${e}`);return t}function buildMonthCode(e,t=!1){return`M${e.toString().padStart(2,"0")}${t?"L":""}`}function resolveNonLunisolarMonth(e,t,r=12){let{month:o,monthCode:n}=e;if(void 0===n){if(void 0===o)throw new TypeError("Either month or monthCode are required");"reject"===t&&RejectToRange(o,1,r),"constrain"===t&&(o=ConstrainToRange(o,1,r)),n=buildMonthCode(o)}else{const e=monthCodeNumberPart(n);if(void 0!==o&&o!==e)throw new RangeError(`monthCode ${n} and month ${o} must match if both are present`);if(n!==buildMonthCode(e))throw new RangeError(`Invalid month code: ${n}`);if(o=e,o<1||o>r)throw new RangeError(`Invalid monthCode: ${n}`)}return{...e,month:o,monthCode:n}}MakeIntrinsicClass(Calendar,"Temporal.Calendar"),DefineIntrinsic("Temporal.Calendar.from",Calendar.from),ut.iso8601={dateFromFields(e,t,r){const o=ToTemporalOverflow(t);let n=PrepareTemporalFields(e,["day","month","monthCode","year"],["year","day"]);n=resolveNonLunisolarMonth(n);let{year:a,month:i,day:s}=n;return({year:a,month:i,day:s}=RegulateISODate(a,i,s,o)),CreateTemporalDate(a,i,s,r)},yearMonthFromFields(e,t,r){const o=ToTemporalOverflow(t);let n=PrepareTemporalFields(e,["month","monthCode","year"],["year"]);n=resolveNonLunisolarMonth(n);let{year:a,month:i}=n;return({year:a,month:i}=function RegulateISOYearMonth(e,t,r){let o=e,n=t;switch(r){case"reject":RejectISODate(o,n,1);break;case"constrain":({year:o,month:n}=ConstrainISODate(o,n))}return{year:o,month:n}}(a,i,o)),CreateTemporalYearMonth(a,i,r,1)},monthDayFromFields(e,t,r){const o=ToTemporalOverflow(t);let n=PrepareTemporalFields(e,["day","month","monthCode","year"],["day"]);if(void 0!==n.month&&void 0===n.year&&void 0===n.monthCode)throw new TypeError("either year or monthCode required with month");const a=void 0===n.monthCode;n=resolveNonLunisolarMonth(n);let{month:i,day:s,year:l}=n;return({month:i,day:s}=RegulateISODate(a?l:1972,i,s,o)),CreateTemporalMonthDay(i,s,r,1972)},fields:e=>e,mergeFields(e,t){const r={};for(const t of ht(e))"month"!==t&&"monthCode"!==t&&(r[t]=e[t]);const o=ht(t);for(const e of o)r[e]=t[e];if(!at.call(o,"month")&&!at.call(o,"monthCode")){const{month:t,monthCode:o}=e;void 0!==t&&(r.month=t),void 0!==o&&(r.monthCode=o)}return r},dateAdd(e,t,r,o,s,l,d){let m=GetSlot(e,n),c=GetSlot(e,a),h=GetSlot(e,i);return({year:m,month:c,day:h}=AddISODate(m,c,h,t,r,o,s,l)),CreateTemporalDate(m,c,h,d)},dateUntil:(e,t,r)=>DifferenceISODate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(t,n),GetSlot(t,a),GetSlot(t,i),r),year:e=>GetSlot(e,n),era(){},eraYear(){},month:e=>GetSlot(e,a),monthCode:e=>buildMonthCode(GetSlot(e,a)),day:e=>GetSlot(e,i),dayOfWeek:e=>DayOfWeek(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i)),dayOfYear:e=>DayOfYear(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i)),weekOfYear:e=>function WeekOfYear(e,t,r){const o=DayOfYear(e,t,r),n=DayOfWeek(e,t,r)||7,a=DayOfWeek(e,1,1),i=Q((o-n+10)/7);return i<1?5===a||6===a&&LeapYear(e-1)?53:52:53===i&&(LeapYear(e)?366:365)-o<4-n?1:i}(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i)),daysInWeek:()=>7,daysInMonth:e=>ISODaysInMonth(GetSlot(e,n),GetSlot(e,a)),daysInYear(e){let t=e;return HasSlot(t,n)||(t=ToTemporalDate(t)),LeapYear(GetSlot(t,n))?366:365},monthsInYear:()=>12,inLeapYear(e){let t=e;return HasSlot(t,n)||(t=ToTemporalDate(t)),LeapYear(GetSlot(t,n))}};class OneObjectCache{constructor(e){if(this.map=new Map,this.calls=0,this.hits=0,this.misses=0,this.now=globalThis.performance?globalThis.performance.now():Date.now(),void 0!==e){let t=0;for(const r of e.map.entries()){if(++t>OneObjectCache.MAX_CACHE_ENTRIES)break;this.map.set(...r)}}}get(e){const t=this.map.get(e);return t&&(this.hits++,this.report()),this.calls++,t}set(e,t){this.map.set(e,t),this.misses++,this.report()}report(){}setObject(e){if(OneObjectCache.objectMap.get(e))throw new RangeError("object already cached");OneObjectCache.objectMap.set(e,this),this.report()}static getCacheForObject(e){let t=OneObjectCache.objectMap.get(e);return t||(t=new OneObjectCache,OneObjectCache.objectMap.set(e,t)),t}}function toUtcIsoDateString({isoYear:e,isoMonth:t,isoDay:r}){return`${ISOYearString(e)}-${ISODateTimePartString(t)}-${ISODateTimePartString(r)}T00:00Z`}function simpleDateDiff(e,t){return{years:e.year-t.year,months:e.month-t.month,days:e.day-t.day}}OneObjectCache.objectMap=new WeakMap,OneObjectCache.MAX_CACHE_ENTRIES=1e3;class HelperBase{constructor(){this.eraLength="short",this.hasEra=!0}getFormatter(){return void 0===this.formatter&&(this.formatter=new st(`en-US-u-ca-${this.id}`,{day:"numeric",month:"numeric",year:"numeric",era:this.eraLength,timeZone:"UTC"})),this.formatter}isoToCalendarDate(e,t){const{year:r,month:o,day:n}=e,a=JSON.stringify({func:"isoToCalendarDate",isoYear:r,isoMonth:o,isoDay:n,id:this.id}),i=t.get(a);if(i)return i;const s=this.getFormatter();let l,d;try{d=toUtcIsoDateString({isoYear:r,isoMonth:o,isoDay:n}),l=s.formatToParts(new Date(d))}catch(e){throw new RangeError(`Invalid ISO date: ${JSON.stringify({isoYear:r,isoMonth:o,isoDay:n})}`)}const m={};for(let{type:e,value:t}of l){if("year"===e&&(m.eraYear=+t),"relatedYear"===e&&(m.eraYear=+t),"month"===e){const e=/^([0-9]*)(.*?)$/.exec(t);if(!e||3!=e.length||!e[1]&&!e[2])throw new RangeError(`Unexpected month: ${t}`);if(m.month=e[1]?+e[1]:1,m.month<1)throw new RangeError(`Invalid month ${t} from ${d}[u-ca-${this.id}] (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)`);if(m.month>13)throw new RangeError(`Invalid month ${t} from ${d}[u-ca-${this.id}] (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)`);e[2]&&(m.monthExtra=e[2])}"day"===e&&(m.day=+t),this.hasEra&&"era"===e&&null!=t&&""!==t&&(t=t.split(" (")[0],m.era=t.normalize("NFD").replace(/[^-0-9 \p{L}]/gu,"").replace(" ","-").toLowerCase())}if(void 0===m.eraYear)throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);if(this.reviseIntlEra){const{era:t,eraYear:r}=this.reviseIntlEra(m,e);m.era=t,m.eraYear=r}this.checkIcuBugs&&this.checkIcuBugs(e);const c=this.adjustCalendarDate(m,t,"constrain",!0);if(void 0===c.year)throw new RangeError(`Missing year converting ${JSON.stringify(e)}`);if(void 0===c.month)throw new RangeError(`Missing month converting ${JSON.stringify(e)}`);if(void 0===c.day)throw new RangeError(`Missing day converting ${JSON.stringify(e)}`);return t.set(a,c),["constrain","reject"].forEach((r=>{const o=JSON.stringify({func:"calendarToIsoDate",year:c.year,month:c.month,day:c.day,overflow:r,id:this.id});t.set(o,e)})),c}validateCalendarDate(e){const{era:t,month:r,year:o,day:n,eraYear:a,monthCode:i,monthExtra:s}=e;if(void 0!==s)throw new RangeError("Unexpected `monthExtra` value");if(void 0===o&&void 0===a)throw new TypeError("year or eraYear is required");if(void 0===r&&void 0===i)throw new TypeError("month or monthCode is required");if(void 0===n)throw new RangeError("Missing day");if(void 0!==i){if("string"!=typeof i)throw new RangeError("monthCode must be a string, not "+typeof i);if(!/^M([01]?\d)(L?)$/.test(i))throw new RangeError(`Invalid monthCode: ${i}`)}if(this.constantEra){if(void 0!==t&&t!==this.constantEra)throw new RangeError(`era must be ${this.constantEra}, not ${t}`);if(void 0!==a&&void 0!==o&&a!==o)throw new RangeError(`eraYear ${a} does not match year ${o}`)}}adjustCalendarDate(e,t,r="constrain",o=!1){if("lunisolar"===this.calendarType)throw new RangeError("Override required for lunisolar calendars");let n=e;if(this.validateCalendarDate(n),this.constantEra){const{year:e,eraYear:t}=n;n={...n,era:this.constantEra,year:void 0!==e?e:t,eraYear:void 0!==t?t:e}}const a=this.monthsInYear(n,t);let{month:i,monthCode:s}=n;return({month:i,monthCode:s}=resolveNonLunisolarMonth(n,r,a)),{...n,month:i,monthCode:s}}regulateMonthDayNaive(e,t,r){const o=this.monthsInYear(e,r);let{month:n,day:a}=e;return"reject"===t?(RejectToRange(n,1,o),RejectToRange(a,1,this.maximumMonthLength(e))):(n=ConstrainToRange(n,1,o),a=ConstrainToRange(a,1,this.maximumMonthLength({...e,month:n}))),{...e,month:n,day:a}}calendarToIsoDate(e,t="constrain",r){const o=e;let n=this.adjustCalendarDate(e,r,t,!1);n=this.regulateMonthDayNaive(n,t,r);const{year:a,month:i,day:s}=n,l=JSON.stringify({func:"calendarToIsoDate",year:a,month:i,day:s,overflow:t,id:this.id});let d,m=r.get(l);if(m)return m;if(void 0!==o.year&&void 0!==o.month&&void 0!==o.day&&(o.year!==n.year||o.month!==n.month||o.day!==n.day)&&(d=JSON.stringify({func:"calendarToIsoDate",year:o.year,month:o.month,day:o.day,overflow:t,id:this.id}),m=r.get(d),m))return m;let c=this.estimateIsoDate({year:a,month:i,day:s});const calculateSameMonthResult=e=>{let o=this.addDaysIso(c,e);if(n.day>this.minimumMonthLength(n)){let e=this.isoToCalendarDate(o,r);for(;e.month!==i||e.year!==a;){if("reject"===t)throw new RangeError(`day ${s} does not exist in month ${i} of year ${a}`);o=this.addDaysIso(o,-1),e=this.isoToCalendarDate(o,r)}}return o};let h=0,u=this.isoToCalendarDate(c,r),T=simpleDateDiff(n,u);if(0!==T.years||0!==T.months||0!==T.days){const e=365*T.years+30*T.months+T.days;c=this.addDaysIso(c,e),u=this.isoToCalendarDate(c,r),T=simpleDateDiff(n,u),0===T.years&&0===T.months?c=calculateSameMonthResult(T.days):h=this.compareCalendarDates(n,u)}let p=8,f=!1;for(;h;){c=this.addDaysIso(c,h*p);const e=u;u=this.isoToCalendarDate(c,r);const a=h;if(h=this.compareCalendarDates(n,u),h)if(T=simpleDateDiff(n,u),0===T.years&&0===T.months)c=calculateSameMonthResult(T.days),h=0,f=n.day>this.minimumMonthLength(n);else if(a&&h!==a)if(p>1)p/=2;else{if("reject"===t)throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({...o})}`);this.compareCalendarDates(u,e)>0&&(c=this.addDaysIso(c,-1)),f=!0,h=0}}if(r.set(l,c),d&&r.set(d,c),void 0===n.year||void 0===n.month||void 0===n.day||void 0===n.monthCode||this.hasEra&&(void 0===n.era||void 0===n.eraYear))throw new RangeError("Unexpected missing property");if(!f){const e=JSON.stringify({func:"isoToCalendarDate",isoYear:c.year,isoMonth:c.month,isoDay:c.day,id:this.id});r.set(e,n)}return c}temporalToCalendarDate(e,t){const r={year:GetSlot(e,n),month:GetSlot(e,a),day:GetSlot(e,i)};return this.isoToCalendarDate(r,t)}compareCalendarDates(e,t){const r=PrepareTemporalFields(e,["day","month","year"],["day","month","year"]),o=PrepareTemporalFields(t,["day","month","year"],["day","month","year"]);return r.year!==o.year?ComparisonResult(r.year-o.year):r.month!==o.month?ComparisonResult(r.month-o.month):r.day!==o.day?ComparisonResult(r.day-o.day):0}regulateDate(e,t="constrain",r){const o=this.calendarToIsoDate(e,t,r);return this.isoToCalendarDate(o,r)}addDaysIso(e,t){return AddISODate(e.year,e.month,e.day,0,0,0,t,"constrain")}addDaysCalendar(e,t,r){const o=this.calendarToIsoDate(e,"constrain",r),n=this.addDaysIso(o,t);return this.isoToCalendarDate(n,r)}addMonthsCalendar(e,t,r,o){let n=e;const{day:a}=n;for(let e=0,r=dt(t);e0){const t=this.monthsInYear(r,o);for(;n.month-1!=e%t;)l=this.addDaysIso(l,-1),n=this.isoToCalendarDate(l,o)}n.day!==a&&(n=this.regulateDate({...n,day:a},"constrain",o))}if("reject"===r&&n.day!==a)throw new RangeError(`Day ${a} does not exist in resulting calendar month`);return n}addCalendar(e,{years:t=0,months:r=0,weeks:o=0,days:n=0},a,i){const{year:s,day:l,monthCode:d}=e,m=this.adjustCalendarDate({year:s+t,monthCode:d,day:l},i),c=this.addMonthsCalendar(m,r,a,i),h=n+7*o;return this.addDaysCalendar(c,h,i)}untilCalendar(e,t,r,o){let n=0,a=0,i=0,s=0;switch(r){case"day":n=this.calendarDaysUntil(e,t,o);break;case"week":{const r=this.calendarDaysUntil(e,t,o);n=r%7,a=(r-n)/7;break}case"month":case"year":{const a=t.year-e.year,l=t.month-e.month,d=t.day-e.day,m=this.compareCalendarDates(t,e);if(!m)return{years:0,months:0,weeks:0,days:0};if("year"===r&&a){s=l*m<0||0===l&&d*m<0?a-m:a}let c,h=s?this.addCalendar(e,{years:s},"constrain",o):e;do{i+=m,c=h,h=this.addMonthsCalendar(c,m,"constrain",o),h.day!==e.day&&(h=this.regulateDate({...h,day:e.day},"constrain",o))}while(this.compareCalendarDates(t,h)*m>=0);i-=m;n=this.calendarDaysUntil(c,t,o);break}}return{years:s,months:i,weeks:a,days:n}}daysInMonth(e,t){const{day:r}=e,o=this.maximumMonthLength(e),n=this.minimumMonthLength(e);if(n===o)return n;const a=r<=o-n?o:n,i=this.calendarToIsoDate(e,"constrain",t),s=this.addDaysIso(i,a),l=this.isoToCalendarDate(s,t),d=this.addDaysIso(s,-l.day);return this.isoToCalendarDate(d,t).day}daysInPreviousMonth(e,t){const{day:r,month:o,year:n}=e;let a={year:o>1?n:n-1,month:o,day:1};const i=o>1?o-1:this.monthsInYear(a,t);a={...a,month:i};const s=this.minimumMonthLength(a),l=this.maximumMonthLength(a);if(s===l)return l;const d=this.calendarToIsoDate(e,"constrain",t),m=this.addDaysIso(d,-r);return this.isoToCalendarDate(m,t).day}startOfCalendarYear(e){return{year:e.year,month:1,monthCode:"M01",day:1}}startOfCalendarMonth(e){return{year:e.year,month:e.month,day:1}}calendarDaysUntil(e,t,r){const o=this.calendarToIsoDate(e,"constrain",r),n=this.calendarToIsoDate(t,"constrain",r);return this.isoDaysUntil(o,n)}isoDaysUntil(e,t){return DifferenceISODate(e.year,e.month,e.day,t.year,t.month,t.day,"day").days}monthDayFromFields(e,t,r){let o,n,a,i,s,{year:l,month:d,monthCode:m,day:c,era:h,eraYear:u}=e;if(void 0===m){if(void 0===l&&(void 0===h||void 0===u))throw new TypeError("`monthCode`, `year`, or `era` and `eraYear` is required");({monthCode:m,year:l}=this.adjustCalendarDate({year:l,month:d,monthCode:m,day:c,era:h,eraYear:u},r,t))}const{year:T}=this.isoToCalendarDate({year:1972,month:1,day:1},r);for(let e=0;e<100;e++){const l=this.adjustCalendarDate({day:c,monthCode:m,year:T-e},r),d=this.calendarToIsoDate(l,"constrain",r),h=this.isoToCalendarDate(d,r);if(({year:o,month:n,day:a}=d),h.monthCode===m&&h.day===c)return{month:n,day:a,year:o};"constrain"===t&&(void 0===i||h.monthCode===i.monthCode&&h.day>i.day)&&(i=h,s=d)}if("constrain"===t&&void 0!==s)return s;throw new RangeError(`No recent ${this.id} year with monthCode ${m} and day ${c}`)}}class HebrewHelper extends HelperBase{constructor(){super(...arguments),this.id="hebrew",this.calendarType="lunisolar",this.months={Tishri:{leap:1,regular:1,monthCode:"M01",days:30},Heshvan:{leap:2,regular:2,monthCode:"M02",days:{min:29,max:30}},Kislev:{leap:3,regular:3,monthCode:"M03",days:{min:29,max:30}},Tevet:{leap:4,regular:4,monthCode:"M04",days:29},Shevat:{leap:5,regular:5,monthCode:"M05",days:30},Adar:{leap:void 0,regular:6,monthCode:"M06",days:29},"Adar I":{leap:6,regular:void 0,monthCode:"M05L",days:30},"Adar II":{leap:7,regular:void 0,monthCode:"M06",days:29},Nisan:{leap:8,regular:7,monthCode:"M07",days:30},Iyar:{leap:9,regular:8,monthCode:"M08",days:29},Sivan:{leap:10,regular:9,monthCode:"M09",days:30},Tamuz:{leap:11,regular:10,monthCode:"M10",days:29},Av:{leap:12,regular:11,monthCode:"M11",days:30},Elul:{leap:13,regular:12,monthCode:"M12",days:29}},this.hasEra=!1}inLeapYear(e){const{year:t}=e;return(7*t+1)%19<7}monthsInYear(e){return this.inLeapYear(e)?13:12}minimumMonthLength(e){return this.minMaxMonthLength(e,"min")}maximumMonthLength(e){return this.minMaxMonthLength(e,"max")}minMaxMonthLength(e,t){const{month:r,year:o}=e,n=this.getMonthCode(o,r),a=ct(this.months).find((e=>e[1].monthCode===n));if(void 0===a)throw new RangeError(`unmatched Hebrew month: ${r}`);const i=a[1].days;return"number"==typeof i?i:i[t]}estimateIsoDate(e){const{year:t}=e;return{year:t-3760,month:1,day:1}}getMonthCode(e,t){return this.inLeapYear({year:e})?6===t?buildMonthCode(5,!0):buildMonthCode(t<6?t:t-1):buildMonthCode(t)}adjustCalendarDate(e,t,r="constrain",o=!1){let{year:n,eraYear:a,month:i,monthCode:s,day:l,monthExtra:d}=e;if(void 0===n&&void 0!==a&&(n=a),void 0===a&&void 0!==n&&(a=n),o){if(d){const e=this.months[d];if(!e)throw new RangeError(`Unrecognized month from formatToParts: ${d}`);i=this.inLeapYear({year:n})?e.leap:e.regular}s=this.getMonthCode(n,i);return{year:n,month:i,day:l,era:void 0,eraYear:a,monthCode:s}}if(this.validateCalendarDate(e),void 0===i)if(s.endsWith("L")){if("M05L"!==s)throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${s}`);if(i=6,!this.inLeapYear({year:n})){if("reject"===r)throw new RangeError(`Hebrew monthCode M05L is invalid in year ${n} which is not a leap year`);i=5,l=30,s="M05"}}else{i=monthCodeNumberPart(s),this.inLeapYear({year:n})&&i>=6&&i++;const e=this.monthsInYear({year:n});if(i<1||i>e)throw new RangeError(`Invalid monthCode: ${s}`)}else if("reject"===r?(RejectToRange(i,1,this.monthsInYear({year:n})),RejectToRange(l,1,this.maximumMonthLength({year:n,month:i}))):(i=ConstrainToRange(i,1,this.monthsInYear({year:n})),l=ConstrainToRange(l,1,this.maximumMonthLength({year:n,month:i}))),void 0===s)s=this.getMonthCode(n,i);else{if(this.getMonthCode(n,i)!==s)throw new RangeError(`monthCode ${s} doesn't correspond to month ${i} in Hebrew year ${n}`)}return{...e,day:l,month:i,monthCode:s,year:n,eraYear:a}}}class IslamicBaseHelper extends HelperBase{constructor(){super(...arguments),this.calendarType="lunar",this.DAYS_PER_ISLAMIC_YEAR=354+11/30,this.DAYS_PER_ISO_YEAR=365.2425,this.constantEra="ah"}inLeapYear(e,t){return 30===this.daysInMonth({year:e.year,month:12,day:1},t)}monthsInYear(){return 12}minimumMonthLength(){return 29}maximumMonthLength(){return 30}estimateIsoDate(e){const{year:t}=this.adjustCalendarDate(e);return{year:mt(t*this.DAYS_PER_ISLAMIC_YEAR/this.DAYS_PER_ISO_YEAR)+622,month:1,day:1}}}class IslamicHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic"}}class IslamicUmalquraHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-umalqura"}}class IslamicTblaHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-tbla"}}class IslamicCivilHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-civil"}}class IslamicRgsaHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamic-rgsa"}}class IslamicCcHelper extends IslamicBaseHelper{constructor(){super(...arguments),this.id="islamicc"}}class PersianHelper extends HelperBase{constructor(){super(...arguments),this.id="persian",this.calendarType="solar",this.constantEra="ap"}inLeapYear(e,t){return IslamicHelper.prototype.inLeapYear.call(this,e,t)}monthsInYear(){return 12}minimumMonthLength(e){const{month:t}=e;return 12===t?29:t<=6?31:30}maximumMonthLength(e){const{month:t}=e;return 12===t?30:t<=6?31:30}estimateIsoDate(e){const{year:t}=this.adjustCalendarDate(e);return{year:t+621,month:1,day:1}}}class IndianHelper extends HelperBase{constructor(){super(...arguments),this.id="indian",this.calendarType="solar",this.constantEra="saka",this.months={1:{length:30,month:3,day:22,leap:{length:31,month:3,day:21}},2:{length:31,month:4,day:21},3:{length:31,month:5,day:22},4:{length:31,month:6,day:22},5:{length:31,month:7,day:23},6:{length:31,month:8,day:23},7:{length:30,month:9,day:23},8:{length:30,month:10,day:23},9:{length:30,month:11,day:22},10:{length:30,month:12,day:22},11:{length:30,month:1,nextYear:!0,day:21},12:{length:30,month:2,nextYear:!0,day:20}},this.vulnerableToBceBug="10/11/-79 Saka"!==new Date("0000-01-01T00:00Z").toLocaleDateString("en-US-u-ca-indian",{timeZone:"UTC"})}inLeapYear(e){return isGregorianLeapYear(e.year+78)}monthsInYear(){return 12}minimumMonthLength(e){return this.getMonthInfo(e).length}maximumMonthLength(e){return this.getMonthInfo(e).length}getMonthInfo(e){const{month:t}=e;let r=this.months[t];if(void 0===r)throw new RangeError(`Invalid month: ${t}`);return this.inLeapYear(e)&&r.leap&&(r=r.leap),r}estimateIsoDate(e){const t=this.adjustCalendarDate(e),r=this.getMonthInfo(t);return AddISODate(t.year+78+(r.nextYear?1:0),r.month,r.day,0,0,0,t.day-1,"constrain")}checkIcuBugs(e){if(this.vulnerableToBceBug&&e.year<1)throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01 (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)`)}}function isGregorianLeapYear(e){return e%4==0&&(e%100!=0||e%400==0)}class GregorianBaseHelper extends HelperBase{constructor(e,t){super(),this.calendarType="solar",this.v8IsVulnerableToJulianBug=new Date("+001001-01-01T00:00Z").toLocaleDateString("en-US-u-ca-japanese",{timeZone:"UTC"}).startsWith("12"),this.calendarIsVulnerableToJulianBug=!1,this.id=e;const{eras:r,anchorEra:o}=function adjustEras(e){let t,r=e;if(0===r.length)throw new RangeError("Invalid era data: eras are required");if(1===r.length&&r[0].reverseOf)throw new RangeError("Invalid era data: anchor era cannot count years backwards");if(1===r.length&&!r[0].name)throw new RangeError("Invalid era data: at least one named era is required");if(r.filter((e=>null!=e.reverseOf)).length>1)throw new RangeError("Invalid era data: only one era can count years backwards");r.forEach((e=>{if(e.isAnchor||!e.anchorEpoch&&!e.reverseOf){if(t)throw new RangeError("Invalid era data: cannot have multiple anchor eras");t=e,e.anchorEpoch={year:e.hasYearZero?0:1}}else if(!e.name)throw new RangeError("If era name is blank, it must be the anchor era")})),r=r.filter((e=>e.name)),r.forEach((e=>{const{reverseOf:t}=e;if(t){const o=r.find((e=>e.name===t));if(void 0===o)throw new RangeError(`Invalid era data: unmatched reverseOf era: ${t}`);e.reverseOf=o,e.anchorEpoch=o.anchorEpoch,e.isoEpoch=o.isoEpoch}void 0===e.anchorEpoch.month&&(e.anchorEpoch.month=1),void 0===e.anchorEpoch.day&&(e.anchorEpoch.day=1)})),lt.call(r,((e,t)=>{if(e.reverseOf)return 1;if(t.reverseOf)return-1;if(!e.isoEpoch||!t.isoEpoch)throw new RangeError("Invalid era data: missing ISO epoch");return t.isoEpoch.year-e.isoEpoch.year}));const o=r[r.length-1].reverseOf;if(o&&o!==r[r.length-2])throw new RangeError("Invalid era data: invalid reverse-sign era");return r.forEach(((e,t)=>{e.genericName="era"+(r.length-1-t)})),{eras:r,anchorEra:t||r[0]}}(t);this.anchorEra=o,this.eras=r}inLeapYear(e){const{year:t}=this.estimateIsoDate({month:1,day:1,year:e.year});return isGregorianLeapYear(t)}monthsInYear(){return 12}minimumMonthLength(e){const{month:t}=e;return 2===t?this.inLeapYear(e)?29:28:[4,6,9,11].indexOf(t)>=0?30:31}maximumMonthLength(e){return this.minimumMonthLength(e)}completeEraYear(e){const checkField=(t,r)=>{const o=e[t];if(null!=o&&o!=r)throw new RangeError(`Input ${t} ${o} doesn't match calculated value ${r}`)},eraFromYear=t=>{let r;const o={...e,year:t},n=this.eras.find(((e,n)=>{if(n===this.eras.length-1){if(e.reverseOf){if(t>0)throw new RangeError(`Signed year ${t} is invalid for era ${e.name}`);return r=e.anchorEpoch.year-t,!0}return r=t-e.anchorEpoch.year+(e.hasYearZero?0:1),!0}return this.compareCalendarDates(o,e.anchorEpoch)>=0&&(r=t-e.anchorEpoch.year+(e.hasYearZero?0:1),!0)}));if(!n)throw new RangeError(`Year ${t} was not matched by any era`);return{eraYear:r,era:n.name}};let{year:t,eraYear:r,era:o}=e;if(null!=t)({eraYear:r,era:o}=eraFromYear(t)),checkField("era",o),checkField("eraYear",r);else{if(null==r)throw new RangeError("Either `year` or `eraYear` and `era` are required");{const e=void 0===o?void 0:this.eras.find((e=>e.name===o||e.genericName===o));if(!e)throw new RangeError(`Era ${o} (ISO year ${r}) was not matched by any era`);if(r<1&&e.reverseOf)throw new RangeError(`Years in ${o} era must be positive, not ${t}`);t=e.reverseOf?e.anchorEpoch.year-r:r+e.anchorEpoch.year-(e.hasYearZero?0:1),checkField("year",t),({eraYear:r,era:o}=eraFromYear(t))}}return{...e,year:t,eraYear:r,era:o}}adjustCalendarDate(e,t,r="constrain"){let o=e;const{month:n,monthCode:a}=o;return void 0===n&&(o={...o,month:monthCodeNumberPart(a)}),this.validateCalendarDate(o),o=this.completeEraYear(o),super.adjustCalendarDate(o,t,r)}estimateIsoDate(e){const t=this.adjustCalendarDate(e),{year:r,month:o,day:n}=t,{anchorEra:a}=this;return RegulateISODate(r+a.isoEpoch.year-(a.hasYearZero?0:1),o,n,"constrain")}checkIcuBugs(e){if(this.calendarIsVulnerableToJulianBug&&this.v8IsVulnerableToJulianBug){if(CompareISODate(e.year,e.month,e.day,1582,10,15)<0)throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15 (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)`)}}}class OrthodoxBaseHelper extends GregorianBaseHelper{constructor(e,t){super(e,t)}inLeapYear(e){const{year:t}=e;return(t+1)%4==0}monthsInYear(){return 13}minimumMonthLength(e){const{month:t}=e;return 13===t?this.inLeapYear(e)?6:5:30}maximumMonthLength(e){return this.minimumMonthLength(e)}}class EthioaaHelper extends OrthodoxBaseHelper{constructor(){super("ethioaa",[{name:"era0",isoEpoch:{year:-5492,month:7,day:17}}])}}class CopticHelper extends OrthodoxBaseHelper{constructor(){super("coptic",[{name:"era1",isoEpoch:{year:284,month:8,day:29}},{name:"era0",reverseOf:"era1"}])}}class EthiopicHelper extends OrthodoxBaseHelper{constructor(){super("ethiopic",[{name:"era0",isoEpoch:{year:-5492,month:7,day:17}},{name:"era1",isoEpoch:{year:8,month:8,day:27},anchorEpoch:{year:5501}}])}}class RocHelper extends GregorianBaseHelper{constructor(){super("roc",[{name:"minguo",isoEpoch:{year:1912,month:1,day:1}},{name:"before-roc",reverseOf:"minguo"}]),this.calendarIsVulnerableToJulianBug=!0}}class BuddhistHelper extends GregorianBaseHelper{constructor(){super("buddhist",[{name:"be",hasYearZero:!0,isoEpoch:{year:-543,month:1,day:1}}]),this.calendarIsVulnerableToJulianBug=!0}}class GregoryHelper extends GregorianBaseHelper{constructor(){super("gregory",[{name:"ce",isoEpoch:{year:1,month:1,day:1}},{name:"bce",reverseOf:"ce"}])}reviseIntlEra(e){let{era:t,eraYear:r}=e;return"bc"!==t&&"b"!==t||(t="bce"),"ad"!==t&&"a"!==t||(t="ce"),{era:t,eraYear:r}}}class JapaneseHelper extends GregorianBaseHelper{constructor(){super("japanese",[{name:"reiwa",isoEpoch:{year:2019,month:5,day:1},anchorEpoch:{year:2019,month:5,day:1}},{name:"heisei",isoEpoch:{year:1989,month:1,day:8},anchorEpoch:{year:1989,month:1,day:8}},{name:"showa",isoEpoch:{year:1926,month:12,day:25},anchorEpoch:{year:1926,month:12,day:25}},{name:"taisho",isoEpoch:{year:1912,month:7,day:30},anchorEpoch:{year:1912,month:7,day:30}},{name:"meiji",isoEpoch:{year:1868,month:9,day:8},anchorEpoch:{year:1868,month:9,day:8}},{name:"ce",isoEpoch:{year:1,month:1,day:1}},{name:"bce",reverseOf:"ce"}]),this.calendarIsVulnerableToJulianBug=!0,this.eraLength="long"}reviseIntlEra(e,t){const{era:r,eraYear:o}=e,{year:n}=t;return this.eras.find((e=>e.name===r))?{era:r,eraYear:o}:n<1?{era:"bce",eraYear:1-n}:{era:"ce",eraYear:n}}}class ChineseBaseHelper extends HelperBase{constructor(){super(...arguments),this.calendarType="lunisolar",this.hasEra=!1}inLeapYear(e,t){const r=this.getMonthList(e.year,t);return 13===ct(r).length}monthsInYear(e,t){return this.inLeapYear(e,t)?13:12}minimumMonthLength(){return 29}maximumMonthLength(){return 30}getMonthList(e,t){if(void 0===e)throw new TypeError("Missing year");const r=JSON.stringify({func:"getMonthList",calendarYear:e,id:this.id}),o=t.get(r);if(o)return o;const n=this.getFormatter(),getCalendarDate=(e,t)=>{const r=toUtcIsoDateString({isoYear:e,isoMonth:2,isoDay:1}),o=new Date(r);o.setUTCDate(t+1);const a=n.formatToParts(o),i=a.find((e=>"month"===e.type)).value,s=+a.find((e=>"day"===e.type)).value;let l=a.find((e=>"relatedYear"===e.type));if(void 0===l)throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);return l=+l.value,{calendarMonthString:i,calendarDay:s,calendarYearToVerify:l}};let a=17,{calendarMonthString:i,calendarDay:s,calendarYearToVerify:l}=getCalendarDate(e,a);"1"!==i&&(a+=29,({calendarMonthString:i,calendarDay:s}=getCalendarDate(e,a))),a-=s-5;const d={};let m,c,h=1,u=!1;do{({calendarMonthString:i,calendarDay:s,calendarYearToVerify:l}=getCalendarDate(e,a)),m&&(d[c].daysInMonth=m+30-s),l!==e?u=!0:(d[i]={monthIndex:h++},a+=30),m=s,c=i}while(!u);return d[c].daysInMonth=m+30-s,t.set(r,d),d}estimateIsoDate(e){const{year:t,month:r}=e;return{year:t,month:r>=12?12:r+1,day:1}}adjustCalendarDate(e,t,r="constrain",o=!1){let{year:n,month:a,monthExtra:i,day:s,monthCode:l,eraYear:d}=e;if(o){if(n=d,i&&"bis"!==i)throw new RangeError(`Unexpected leap month suffix: ${i}`);const e=buildMonthCode(a,void 0!==i),r=`${a}${i||""}`,o=this.getMonthList(n,t)[r];if(void 0===o)throw new RangeError(`Unmatched month ${r} in Chinese year ${n}`);return a=o.monthIndex,{year:n,month:a,day:s,era:void 0,eraYear:d,monthCode:e}}if(this.validateCalendarDate(e),void 0===n&&(n=d),void 0===d&&(d=n),void 0===a){const e=this.getMonthList(n,t);let o=l.replace("L","bis").slice(1);"0"===o[0]&&(o=o.slice(1));let i=e[o];if(a=i&&i.monthIndex,void 0===a&&l.endsWith("L")&&!at.call(["M01L","M12L","M13L"],l)&&"constrain"===r){let t=l.slice(1,-1);"0"===t[0]&&(t=t.slice(1)),i=e[t],i&&(({daysInMonth:s,monthIndex:a}=i),l=buildMonthCode(t))}if(void 0===a)throw new RangeError(`Unmatched month ${l} in Chinese year ${n}`)}else if(void 0===l){const e=this.getMonthList(n,t),o=ct(e),i=o.length;"reject"===r?(RejectToRange(a,1,i),RejectToRange(s,1,this.maximumMonthLength())):(a=ConstrainToRange(a,1,i),s=ConstrainToRange(s,1,this.maximumMonthLength()));const d=o.find((([,e])=>e.monthIndex===a));if(void 0===d)throw new RangeError(`Invalid month ${a} in Chinese year ${n}`);l=buildMonthCode(d[0].replace("bis",""),-1!==d[0].indexOf("bis"))}else{const e=this.getMonthList(n,t);let r=l.replace("L","bis").slice(1);"0"===r[0]&&(r=r.slice(1));const o=e[r];if(!o)throw new RangeError(`Unmatched monthCode ${l} in Chinese year ${n}`);if(a!==o.monthIndex)throw new RangeError(`monthCode ${l} doesn't correspond to month ${a} in Chinese year ${n}`)}return{...e,year:n,eraYear:d,month:a,monthCode:l,day:s}}}class ChineseHelper extends ChineseBaseHelper{constructor(){super(...arguments),this.id="chinese"}}class DangiHelper extends ChineseBaseHelper{constructor(){super(...arguments),this.id="dangi"}}const Tt={helper:void 0,dateFromFields(e,t,r){const o=ToTemporalOverflow(t),n=new OneObjectCache,a=PrepareTemporalFields(e,["day","era","eraYear","month","monthCode","year"],["day"]),{year:i,month:s,day:l}=this.helper.calendarToIsoDate(a,o,n),d=CreateTemporalDate(i,s,l,r);return n.setObject(d),d},yearMonthFromFields(e,t,r){const o=ToTemporalOverflow(t),n=new OneObjectCache,a=PrepareTemporalFields(e,["era","eraYear","month","monthCode","year"],[]),{year:i,month:s,day:l}=this.helper.calendarToIsoDate({...a,day:1},o,n),d=CreateTemporalYearMonth(i,s,r,l);return n.setObject(d),d},monthDayFromFields(e,t,r){const o=ToTemporalOverflow(t),n=new OneObjectCache,a=PrepareTemporalFields(e,["day","era","eraYear","month","monthCode","year"],["day"]),{year:i,month:s,day:l}=this.helper.monthDayFromFields(a,o,n),d=CreateTemporalMonthDay(s,l,r,i);return n.setObject(d),d},fields(e){let t=e;return at.call(t,"year")&&(t=[...t,"era","eraYear"]),t},mergeFields(e,t){const r={...e},o={...t},{month:n,monthCode:a,year:i,era:s,eraYear:l,...d}=r,{month:m,monthCode:c,year:h,era:u,eraYear:T}=o;return void 0===m&&void 0===c&&(d.month=n,d.monthCode=a),void 0===h&&void 0===u&&void 0===T&&(d.year=i),{...d,...o}},dateAdd(e,t,r,o,n,a,i){const s=OneObjectCache.getCacheForObject(e),l=this.helper.temporalToCalendarDate(e,s),d=this.helper.addCalendar(l,{years:t,months:r,weeks:o,days:n},a,s),m=this.helper.calendarToIsoDate(d,"constrain",s),{year:c,month:h,day:u}=m,T=CreateTemporalDate(c,h,u,i);return new OneObjectCache(s).setObject(T),T},dateUntil(e,t,r){const o=OneObjectCache.getCacheForObject(e),n=OneObjectCache.getCacheForObject(t),a=this.helper.temporalToCalendarDate(e,o),i=this.helper.temporalToCalendarDate(t,n);return this.helper.untilCalendar(a,i,r,o)},year(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).year},month(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).month},day(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).day},era(e){if(!this.helper.hasEra)return;const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).era},eraYear(e){if(!this.helper.hasEra)return;const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).eraYear},monthCode(e){const t=OneObjectCache.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).monthCode},dayOfWeek:e=>ut.iso8601.dayOfWeek(e),dayOfYear(e){const t=OneObjectCache.getCacheForObject(e),r=this.helper.isoToCalendarDate(e,t),o=this.helper.startOfCalendarYear(r);return this.helper.calendarDaysUntil(o,r,t)+1},weekOfYear:e=>ut.iso8601.weekOfYear(e),daysInWeek:e=>ut.iso8601.daysInWeek(e),daysInMonth(e){const t=OneObjectCache.getCacheForObject(e),r=this.helper.temporalToCalendarDate(e,t),o=this.helper.maximumMonthLength(r);if(o===this.helper.minimumMonthLength(r))return o;const n=this.helper.startOfCalendarMonth(r),a=this.helper.addMonthsCalendar(n,1,"constrain",t);return this.helper.calendarDaysUntil(n,a,t)},daysInYear(e){let t=e;HasSlot(t,n)||(t=ToTemporalDate(t));const r=OneObjectCache.getCacheForObject(t),o=this.helper.temporalToCalendarDate(t,r),a=this.helper.startOfCalendarYear(o),i=this.helper.addCalendar(a,{years:1},"constrain",r);return this.helper.calendarDaysUntil(a,i,r)},monthsInYear(e){const t=OneObjectCache.getCacheForObject(e),r=this.helper.temporalToCalendarDate(e,t);return this.helper.monthsInYear(r,t)},inLeapYear(e){let t=e;HasSlot(t,n)||(t=ToTemporalDate(t));const r=OneObjectCache.getCacheForObject(t),o=this.helper.temporalToCalendarDate(t,r);return this.helper.inLeapYear(o,r)}};for(const e of[HebrewHelper,PersianHelper,EthiopicHelper,EthioaaHelper,CopticHelper,ChineseHelper,DangiHelper,RocHelper,IndianHelper,BuddhistHelper,GregoryHelper,JapaneseHelper,IslamicHelper,IslamicUmalquraHelper,IslamicTblaHelper,IslamicCivilHelper,IslamicRgsaHelper,IslamicCcHelper]){const t=new e;ut[t.id]={...Tt,helper:t}}class PlainDate{constructor(e,t,r,o=GetISO8601Calendar()){const n=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToIntegerThrowOnInfinity(r),s=ToTemporalCalendar(o);if(arguments.length<3)throw new RangeError("missing argument: isoYear, isoMonth and isoDay are required");CreateTemporalDateSlots(this,n,a,i,s)}get calendar(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}get era(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,u),this)}get eraYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,u),this)}get year(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,u),this)}get month(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,u),this)}get monthCode(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,u),this)}get day(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,u),this)}get dayOfWeek(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,u),this)}get dayOfYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,u),this)}get weekOfYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,u),this)}get daysInWeek(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,u),this)}get daysInMonth(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,u),this)}get daysInYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,u),this)}get monthsInYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,u),this)}get inLeapYear(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,u),this)}with(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetSlot(this,u),o=CalendarFields(r,["day","month","monthCode","year"]),n=PrepareTemporalFields(e,o,"partial");if(!n)throw new TypeError("invalid date-like");let a=PrepareTemporalFields(this,o,[]);a=CalendarMergeFields(r,a,n),a=PrepareTemporalFields(a,o,[]);return CalendarDateFromFields(r,a,GetOptionsObject(t))}withCalendar(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const t=ToTemporalCalendar(e);return new PlainDate(GetSlot(this,n),GetSlot(this,a),GetSlot(this,i),t)}add(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const r=ToTemporalDuration(e),o=GetOptionsObject(t);return CalendarDateAdd(GetSlot(this,u),this,r,o)}subtract(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const r=CreateNegatedTemporalDuration(ToTemporalDuration(e)),o=GetOptionsObject(t);return CalendarDateAdd(GetSlot(this,u),this,r,o)}until(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDate("until",this,e,t)}since(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDate("since",this,e,t)}equals(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e);for(const e of[n,a,i]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,u),GetSlot(t,u))}toString(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return TemporalDateToString(this,ToShowCalendarOption(GetOptionsObject(e)))}toJSON(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return TemporalDateToString(this)}toLocaleString(e,t){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainDate")}toPlainDateTime(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const t=GetSlot(this,n),r=GetSlot(this,a),o=GetSlot(this,i),T=GetSlot(this,u);if(void 0===e)return CreateTemporalDateTime(t,r,o,0,0,0,0,0,0,T);const p=ToTemporalTime(e);return CreateTemporalDateTime(t,r,o,GetSlot(p,s),GetSlot(p,l),GetSlot(p,d),GetSlot(p,m),GetSlot(p,c),GetSlot(p,h),T)}toZonedDateTime(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");let t,o;if(IsObject(e)){const r=e.timeZone;void 0===r?t=ToTemporalTimeZone(e):(t=ToTemporalTimeZone(r),o=e.plainTime)}else t=ToTemporalTimeZone(e);const T=GetSlot(this,n),p=GetSlot(this,a),f=GetSlot(this,i),y=GetSlot(this,u);let S=0,w=0,g=0,I=0,D=0,G=0;void 0!==o&&(o=ToTemporalTime(o),S=GetSlot(o,s),w=GetSlot(o,l),g=GetSlot(o,d),I=GetSlot(o,m),D=GetSlot(o,c),G=GetSlot(o,h));return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(t,CreateTemporalDateTime(T,p,f,S,w,g,I,D,G,y),"compatible"),r),t,y)}toPlainYearMonth(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const e=GetSlot(this,u);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}toPlainMonthDay(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");const e=GetSlot(this,u);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}getISOFields(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,u),isoDay:GetSlot(this,i),isoMonth:GetSlot(this,a),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalDate(e)?(ToTemporalOverflow(r),CreateTemporalDate(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(e,u))):ToTemporalDate(e,r)}static compare(e,t){const r=ToTemporalDate(e),o=ToTemporalDate(t);return CompareISODate(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(o,n),GetSlot(o,a),GetSlot(o,i))}}MakeIntrinsicClass(PlainDate,"Temporal.PlainDate");class PlainDateTime{constructor(e,t,r,o=0,n=0,a=0,i=0,s=0,l=0,d=GetISO8601Calendar()){const m=ToIntegerThrowOnInfinity(e),c=ToIntegerThrowOnInfinity(t),h=ToIntegerThrowOnInfinity(r),u=ToIntegerThrowOnInfinity(o),T=ToIntegerThrowOnInfinity(n),p=ToIntegerThrowOnInfinity(a),f=ToIntegerThrowOnInfinity(i),y=ToIntegerThrowOnInfinity(s),S=ToIntegerThrowOnInfinity(l),w=ToTemporalCalendar(d);if(arguments.length<3)throw new RangeError("missing argument: isoYear, isoMonth and isoDay are required");CreateTemporalDateTimeSlots(this,m,c,h,u,T,p,f,y,S,w)}get calendar(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}get year(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,u),this)}get month(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,u),this)}get monthCode(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,u),this)}get day(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,u),this)}get hour(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,s)}get minute(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,l)}get second(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,d)}get millisecond(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,m)}get microsecond(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,c)}get nanosecond(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}get era(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,u),this)}get eraYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,u),this)}get dayOfWeek(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,u),this)}get dayOfYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,u),this)}get weekOfYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,u),this)}get daysInWeek(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,u),this)}get daysInYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,u),this)}get daysInMonth(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,u),this)}get monthsInYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,u),this)}get inLeapYear(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,u),this)}with(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetOptionsObject(t),o=GetSlot(this,u),n=CalendarFields(o,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),a=PrepareTemporalFields(e,n,"partial");if(!a)throw new TypeError("invalid date-time-like");let i=PrepareTemporalFields(this,n,[]);i=CalendarMergeFields(o,i,a),i=PrepareTemporalFields(i,n,[]);const{year:s,month:l,day:d,hour:m,minute:c,second:h,millisecond:T,microsecond:p,nanosecond:f}=InterpretTemporalDateTimeFields(o,i,r);return CreateTemporalDateTime(s,l,d,m,c,h,T,p,f,o)}withPlainTime(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,n),r=GetSlot(this,a),o=GetSlot(this,i),T=GetSlot(this,u);if(void 0===e)return CreateTemporalDateTime(t,r,o,0,0,0,0,0,0,T);const p=ToTemporalTime(e);return CreateTemporalDateTime(t,r,o,GetSlot(p,s),GetSlot(p,l),GetSlot(p,d),GetSlot(p,m),GetSlot(p,c),GetSlot(p,h),T)}withPlainDate(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e),r=GetSlot(t,n),o=GetSlot(t,a),T=GetSlot(t,i);let p=GetSlot(t,u);const f=GetSlot(this,s),y=GetSlot(this,l),S=GetSlot(this,d),w=GetSlot(this,m),g=GetSlot(this,c),I=GetSlot(this,h);return p=ConsolidateCalendars(GetSlot(this,u),p),CreateTemporalDateTime(r,o,T,f,y,S,w,g,I,p)}withCalendar(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalCalendar(e);return new PlainDateTime(GetSlot(this,n),GetSlot(this,a),GetSlot(this,i),GetSlot(this,s),GetSlot(this,l),GetSlot(this,d),GetSlot(this,m),GetSlot(this,c),GetSlot(this,h),t)}add(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainDateTime("add",this,e,t)}subtract(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainDateTime("subtract",this,e,t)}until(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDateTime("until",this,e,t)}since(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDateTime("since",this,e,t)}round(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");const t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",je,["day"]),o=ToTemporalRoundingMode(t,"halfExpand"),T=ToTemporalRoundingIncrement(t,{day:1,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[r],!1);let p=GetSlot(this,n),f=GetSlot(this,a),y=GetSlot(this,i),S=GetSlot(this,s),w=GetSlot(this,l),g=GetSlot(this,d),I=GetSlot(this,m),D=GetSlot(this,c),G=GetSlot(this,h);return({year:p,month:f,day:y,hour:S,minute:w,second:g,millisecond:I,microsecond:D,nanosecond:G}=RoundISODateTime(p,f,y,S,w,g,I,D,G,T,r,o)),CreateTemporalDateTime(p,f,y,S,w,g,I,D,G,GetSlot(this,u))}equals(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDateTime(e);for(const e of[n,a,i,s,l,d,m,c,h]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,u),GetSlot(t,u))}toString(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t);return TemporalDateTimeToString(this,r,ToShowCalendarOption(t),{unit:o,increment:n,roundingMode:ToTemporalRoundingMode(t,"trunc")})}toJSON(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToString(this,"auto")}toLocaleString(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainDateTime")}toZonedDateTime(e,t){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const o=ToTemporalTimeZone(e);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(o,this,ToTemporalDisambiguation(GetOptionsObject(t))),r),o,GetSlot(this,u))}toPlainDate(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToDate(this)}toPlainYearMonth(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,u);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}toPlainMonthDay(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,u);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}toPlainTime(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToTime(this)}getISOFields(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,u),isoDay:GetSlot(this,i),isoHour:GetSlot(this,s),isoMicrosecond:GetSlot(this,c),isoMillisecond:GetSlot(this,m),isoMinute:GetSlot(this,l),isoMonth:GetSlot(this,a),isoNanosecond:GetSlot(this,h),isoSecond:GetSlot(this,d),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalDateTime(e)?(ToTemporalOverflow(r),CreateTemporalDateTime(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,h),GetSlot(e,u))):ToTemporalDateTime(e,r)}static compare(e,t){const r=ToTemporalDateTime(e),o=ToTemporalDateTime(t);for(const e of[n,a,i,s,l,d,m,c,h]){const t=GetSlot(r,e),n=GetSlot(o,e);if(t!==n)return ComparisonResult(t-n)}return 0}}MakeIntrinsicClass(PlainDateTime,"Temporal.PlainDateTime");class Duration{constructor(e=0,t=0,r=0,o=0,n=0,a=0,i=0,s=0,l=0,d=0){const m=ToIntegerWithoutRounding(e),c=ToIntegerWithoutRounding(t),h=ToIntegerWithoutRounding(r),u=ToIntegerWithoutRounding(o),T=ToIntegerWithoutRounding(n),p=ToIntegerWithoutRounding(a),C=ToIntegerWithoutRounding(i),E=ToIntegerWithoutRounding(s),b=ToIntegerWithoutRounding(l),M=ToIntegerWithoutRounding(d);RejectDuration(m,c,h,u,T,p,C,E,b,M),CreateSlots(this),SetSlot(this,f,m),SetSlot(this,y,c),SetSlot(this,S,h),SetSlot(this,w,u),SetSlot(this,g,T),SetSlot(this,I,p),SetSlot(this,D,C),SetSlot(this,G,E),SetSlot(this,v,b),SetSlot(this,O,M)}get years(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}get months(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,y)}get weeks(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,S)}get days(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,w)}get hours(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,g)}get minutes(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,I)}get seconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,D)}get milliseconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,G)}get microseconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,v)}get nanoseconds(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,O)}get sign(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return DurationSign(GetSlot(this,f),GetSlot(this,y),GetSlot(this,S),GetSlot(this,w),GetSlot(this,g),GetSlot(this,I),GetSlot(this,D),GetSlot(this,G),GetSlot(this,v),GetSlot(this,O))}get blank(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return 0===DurationSign(GetSlot(this,f),GetSlot(this,y),GetSlot(this,S),GetSlot(this,w),GetSlot(this,g),GetSlot(this,I),GetSlot(this,D),GetSlot(this,G),GetSlot(this,v),GetSlot(this,O))}with(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");const t=PrepareTemporalFields(e,["days","hours","microseconds","milliseconds","minutes","months","nanoseconds","seconds","weeks","years"],"partial");if(!t)throw new TypeError("invalid duration-like");const{years:r=GetSlot(this,f),months:o=GetSlot(this,y),weeks:n=GetSlot(this,S),days:a=GetSlot(this,w),hours:i=GetSlot(this,g),minutes:s=GetSlot(this,I),seconds:l=GetSlot(this,D),milliseconds:d=GetSlot(this,G),microseconds:m=GetSlot(this,v),nanoseconds:c=GetSlot(this,O)}=t;return new Duration(r,o,n,a,i,s,l,d,m,c)}negated(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return CreateNegatedTemporalDuration(this)}abs(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return new Duration(Math.abs(GetSlot(this,f)),Math.abs(GetSlot(this,y)),Math.abs(GetSlot(this,S)),Math.abs(GetSlot(this,w)),Math.abs(GetSlot(this,g)),Math.abs(GetSlot(this,I)),Math.abs(GetSlot(this,D)),Math.abs(GetSlot(this,G)),Math.abs(GetSlot(this,v)),Math.abs(GetSlot(this,O)))}add(e,t){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromDuration("add",this,e,t)}subtract(e,t){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromDuration("subtract",this,e,t)}round(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");let t=GetSlot(this,f),r=GetSlot(this,y),o=GetSlot(this,S),n=GetSlot(this,w),a=GetSlot(this,g),i=GetSlot(this,I),s=GetSlot(this,D),l=GetSlot(this,G),d=GetSlot(this,v),m=GetSlot(this,O),c=DefaultTemporalLargestUnit(t,r,o,n,a,i,s,l,d,m);const h="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e);let T=GetTemporalUnit(h,"smallestUnit","datetime",void 0),p=!0;T||(p=!1,T="nanosecond"),c=LargerOfTwoTemporalUnits(c,T);let C=GetTemporalUnit(h,"largestUnit","datetime",void 0,["auto"]),E=!0;if(C||(E=!1,C=c),"auto"===C&&(C=c),!p&&!E)throw new RangeError("at least one of smallestUnit or largestUnit is required");if(LargerOfTwoTemporalUnits(C,T)!==C)throw new RangeError(`largestUnit ${C} cannot be smaller than smallestUnit ${T}`);const b=ToTemporalRoundingMode(h,"halfExpand"),M=ToTemporalDateTimeRoundingIncrement(h,T);let R=ToRelativeTemporalObject(h);return({years:t,months:r,weeks:o,days:n}=UnbalanceDurationRelative(t,r,o,n,C,R)),({years:t,months:r,weeks:o,days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=RoundDuration(t,r,o,n,a,i,s,l,d,m,M,T,b,R)),({years:t,months:r,weeks:o,days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=AdjustRoundedDurationDays(t,r,o,n,a,i,s,l,d,m,M,T,b,R)),({years:t,months:r,weeks:o,days:n}=function BalanceDurationRelative(e,t,r,o,n,a){let i=e,s=t,l=r,d=o;const m=GetIntrinsic("%Temporal.Duration%"),c=DurationSign(i,s,l,d,0,0,0,0,0,0);if(0===c)return{years:i,months:s,weeks:l,days:d};let h,T;a&&(T=ToTemporalDate(a),h=GetSlot(T,u));const p=new m(c),f=new m(0,c),S=new m(0,0,c);switch(n){case"year":{if(!h)throw new RangeError("a starting point is required for years balancing");let e,t,r;for(({relativeTo:e,days:t}=MoveRelativeDate(h,T,p));K(d)>=K(t);)d-=t,i+=c,T=e,({relativeTo:e,days:t}=MoveRelativeDate(h,T,p));for(({relativeTo:e,days:r}=MoveRelativeDate(h,T,f));K(d)>=K(r);)d-=r,s+=c,T=e,({relativeTo:e,days:r}=MoveRelativeDate(h,T,f));const o=h.dateAdd;e=CalendarDateAdd(h,T,p,void 0,o);const n=h.dateUntil,a=le(null);a.largestUnit="month";let l=CalendarDateUntil(h,T,e,a,n),m=GetSlot(l,y);for(;K(s)>=K(m);){s-=m,i+=c,T=e,e=CalendarDateAdd(h,T,p,void 0,o);const t=le(null);t.largestUnit="month",l=CalendarDateUntil(h,T,e,t,n),m=GetSlot(l,y)}break}case"month":{if(!h)throw new RangeError("a starting point is required for months balancing");let e,t;for(({relativeTo:e,days:t}=MoveRelativeDate(h,T,f));K(d)>=K(t);)d-=t,s+=c,T=e,({relativeTo:e,days:t}=MoveRelativeDate(h,T,f));break}case"week":{if(!h)throw new RangeError("a starting point is required for weeks balancing");let e,t;for(({relativeTo:e,days:t}=MoveRelativeDate(h,T,S));K(d)>=K(t);)d-=t,l+=c,T=e,({relativeTo:e,days:t}=MoveRelativeDate(h,T,S));break}}return{years:i,months:s,weeks:l,days:d}}(t,r,o,n,C,R)),IsTemporalZonedDateTime(R)&&(R=MoveRelativeZonedDateTime(R,t,r,o,0)),({days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=BalanceDuration(n,a,i,s,l,d,m,C,R)),new Duration(t,r,o,n,a,i,s,l,d,m)}total(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");let t=GetSlot(this,f),r=GetSlot(this,y),o=GetSlot(this,S),n=GetSlot(this,w),a=GetSlot(this,g),i=GetSlot(this,I),s=GetSlot(this,D),l=GetSlot(this,G),d=GetSlot(this,v),m=GetSlot(this,O);if(void 0===e)throw new TypeError("options argument is required");const c="string"==typeof e?CreateOnePropObject("unit",e):GetOptionsObject(e),h=GetTemporalUnit(c,"unit","datetime",je),u=ToRelativeTemporalObject(c);let T;({years:t,months:r,weeks:o,days:n}=UnbalanceDurationRelative(t,r,o,n,h,u)),IsTemporalZonedDateTime(u)&&(T=MoveRelativeZonedDateTime(u,t,r,o,0)),({days:n,hours:a,minutes:i,seconds:s,milliseconds:l,microseconds:d,nanoseconds:m}=BalanceDuration(n,a,i,s,l,d,m,h,T));const{total:p}=RoundDuration(t,r,o,n,a,i,s,l,d,m,1,h,"trunc",u);return p}toString(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t);if("minute"===r)throw new RangeError('smallestUnit must not be "minute"');return TemporalDurationToString(this,r,{unit:o,increment:n,roundingMode:ToTemporalRoundingMode(t,"trunc")})}toJSON(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return TemporalDurationToString(this)}toLocaleString(e,t){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return"undefined"!=typeof Intl&&void 0!==Intl.DurationFormat?new Intl.DurationFormat(e,t).format(this):(console.warn("Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat."),TemporalDurationToString(this))}valueOf(){throw new TypeError("use compare() to compare Temporal.Duration")}static from(e){return IsTemporalDuration(e)?new Duration(GetSlot(e,f),GetSlot(e,y),GetSlot(e,S),GetSlot(e,w),GetSlot(e,g),GetSlot(e,I),GetSlot(e,D),GetSlot(e,G),GetSlot(e,v),GetSlot(e,O)):ToTemporalDuration(e)}static compare(t,r,o){const n=ToTemporalDuration(t),a=ToTemporalDuration(r),i=ToRelativeTemporalObject(GetOptionsObject(o)),s=GetSlot(n,f),l=GetSlot(n,y),d=GetSlot(n,S);let m=GetSlot(n,w);const c=GetSlot(n,g),h=GetSlot(n,I),u=GetSlot(n,D),T=GetSlot(n,G),p=GetSlot(n,v);let C=GetSlot(n,O);const E=GetSlot(a,f),b=GetSlot(a,y),M=GetSlot(a,S);let R=GetSlot(a,w);const Z=GetSlot(a,g),P=GetSlot(a,I),F=GetSlot(a,D),Y=GetSlot(a,G),j=GetSlot(a,v);let $=GetSlot(a,O);const B=CalculateOffsetShift(i,s,l,d,m),N=CalculateOffsetShift(i,E,b,M,R);0===s&&0===E&&0===l&&0===b&&0===d&&0===M||(({days:m}=UnbalanceDurationRelative(s,l,d,m,"day",i)),({days:R}=UnbalanceDurationRelative(E,b,M,R,"day",i)));const k=TotalDurationNanoseconds(m,c,h,u,T,p,C,B),A=TotalDurationNanoseconds(R,Z,P,F,Y,j,$,N);return ComparisonResult(e.toNumber(e.subtract(k,A)))}}MakeIntrinsicClass(Duration,"Temporal.Duration");const pt=Object.create;class PlainMonthDay{constructor(e,t,r=GetISO8601Calendar(),o=1972){const n=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToTemporalCalendar(r),s=ToIntegerThrowOnInfinity(o);if(arguments.length<2)throw new RangeError("missing argument: isoMonth and isoDay are required");CreateTemporalMonthDaySlots(this,n,a,i,s)}get monthCode(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,u),this)}get day(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,u),this)}get calendar(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}with(e,t){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetSlot(this,u),o=CalendarFields(r,["day","month","monthCode","year"]),n=PrepareTemporalFields(e,o,"partial");if(!n)throw new TypeError("invalid month-day-like");let a=PrepareTemporalFields(this,o,[]);a=CalendarMergeFields(r,a,n),a=PrepareTemporalFields(a,o,[]);return CalendarMonthDayFromFields(r,a,GetOptionsObject(t))}equals(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");const t=ToTemporalMonthDay(e);for(const e of[a,i,n]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,u),GetSlot(t,u))}toString(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return TemporalMonthDayToString(this,ToShowCalendarOption(GetOptionsObject(e)))}toJSON(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return TemporalMonthDayToString(this)}toLocaleString(e,t){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use equals() to compare Temporal.PlainMonthDay")}toPlainDate(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("argument should be an object");const t=GetSlot(this,u),r=CalendarFields(t,["day","monthCode"]),o=PrepareTemporalFields(this,r,[]),n=CalendarFields(t,["year"]);let a=CalendarMergeFields(t,o,PrepareTemporalFields(e,n,[]));a=PrepareTemporalFields(a,[...new Set([...r,...n])],[]);const i=pt(null);return i.overflow="reject",CalendarDateFromFields(t,a,i)}getISOFields(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,u),isoDay:GetSlot(this,i),isoMonth:GetSlot(this,a),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalMonthDay(e)?(ToTemporalOverflow(r),CreateTemporalMonthDay(GetSlot(e,a),GetSlot(e,i),GetSlot(e,u),GetSlot(e,n))):ToTemporalMonthDay(e,r)}}MakeIntrinsicClass(PlainMonthDay,"Temporal.PlainMonthDay");const instant=()=>new(GetIntrinsic("%Temporal.Instant%"))($e()),plainDateTime=(e,t=timeZone())=>{const r=ToTemporalTimeZone(t),o=ToTemporalCalendar(e);return BuiltinTimeZoneGetPlainDateTimeFor(r,instant(),o)},plainDateTimeISO=(e=timeZone())=>{const t=ToTemporalTimeZone(e),r=GetISO8601Calendar();return BuiltinTimeZoneGetPlainDateTimeFor(t,instant(),r)},zonedDateTime=(e,t=timeZone())=>{const r=ToTemporalTimeZone(t),o=ToTemporalCalendar(e);return CreateTemporalZonedDateTime($e(),r,o)},timeZone=()=>function SystemTimeZone(){const e=new J("en-us");return new(GetIntrinsic("%Temporal.TimeZone%"))(ParseTemporalTimeZone(e.resolvedOptions().timeZone))}(),ft={instant,plainDateTime,plainDateTimeISO,plainDate:(e,t=timeZone())=>TemporalDateTimeToDate(plainDateTime(e,t)),plainDateISO:(e=timeZone())=>TemporalDateTimeToDate(plainDateTimeISO(e)),plainTimeISO:(e=timeZone())=>TemporalDateTimeToTime(plainDateTimeISO(e)),timeZone,zonedDateTime,zonedDateTimeISO:(e=timeZone())=>zonedDateTime(GetISO8601Calendar(),e),[Symbol.toStringTag]:"Temporal.Now"};Object.defineProperty(ft,Symbol.toStringTag,{value:"Temporal.Now",writable:!1,enumerable:!1,configurable:!0});const yt=Object.assign;function TemporalTimeToString(e,t,r){let o=GetSlot(e,s),n=GetSlot(e,l),a=GetSlot(e,d),i=GetSlot(e,m),u=GetSlot(e,c),T=GetSlot(e,h);if(r){const{unit:e,increment:t,roundingMode:s}=r;({hour:o,minute:n,second:a,millisecond:i,microsecond:u,nanosecond:T}=RoundTime(o,n,a,i,u,T,t,e,s))}return`${ISODateTimePartString(o)}:${ISODateTimePartString(n)}${FormatSecondsStringPart(a,i,u,T,t)}`}class PlainTime{constructor(e=0,t=0,r=0,o=0,n=0,a=0){const i=ToIntegerThrowOnInfinity(e),T=ToIntegerThrowOnInfinity(t),p=ToIntegerThrowOnInfinity(r),f=ToIntegerThrowOnInfinity(o),y=ToIntegerThrowOnInfinity(n),S=ToIntegerThrowOnInfinity(a);RejectTime(i,T,p,f,y,S),CreateSlots(this),SetSlot(this,s,i),SetSlot(this,l,T),SetSlot(this,d,p),SetSlot(this,m,f),SetSlot(this,c,y),SetSlot(this,h,S),SetSlot(this,u,GetISO8601Calendar())}get calendar(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}get hour(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,s)}get minute(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,l)}get second(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,d)}get millisecond(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,m)}get microsecond(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,c)}get nanosecond(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}with(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=ToTemporalTimeRecord(e,"partial"),o=ToTemporalOverflow(GetOptionsObject(t)),n=ToTemporalTimeRecord(this);let{hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=yt(n,r);return({hour:a,minute:i,second:s,millisecond:l,microsecond:d,nanosecond:m}=RegulateTime(a,i,s,l,d,m,o)),new PlainTime(a,i,s,l,d,m)}add(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainTime("add",this,e)}subtract(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainTime("subtract",this,e)}until(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainTime("until",this,e,t)}since(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainTime("since",this,e,t)}round(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");const t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",je),o=ToTemporalRoundingMode(t,"halfExpand"),n=ToTemporalRoundingIncrement(t,{hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[r],!1);let a=GetSlot(this,s),i=GetSlot(this,l),u=GetSlot(this,d),T=GetSlot(this,m),p=GetSlot(this,c),f=GetSlot(this,h);return({hour:a,minute:i,second:u,millisecond:T,microsecond:p,nanosecond:f}=RoundTime(a,i,u,T,p,f,n,r,o)),new PlainTime(a,i,u,T,p,f)}equals(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");const t=ToTemporalTime(e);for(const e of[s,l,d,m,c,h]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return!0}toString(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t);return TemporalTimeToString(this,r,{unit:o,increment:n,roundingMode:ToTemporalRoundingMode(t,"trunc")})}toJSON(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return TemporalTimeToString(this,"auto")}toLocaleString(e,t){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainTime")}toPlainDateTime(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e),r=GetSlot(t,n),o=GetSlot(t,a),T=GetSlot(t,i),p=GetSlot(t,u);return CreateTemporalDateTime(r,o,T,GetSlot(this,s),GetSlot(this,l),GetSlot(this,d),GetSlot(this,m),GetSlot(this,c),GetSlot(this,h),p)}toZonedDateTime(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");const t=e.plainDate;if(void 0===t)throw new TypeError("missing date property");const o=ToTemporalDate(t),T=e.timeZone;if(void 0===T)throw new TypeError("missing timeZone property");const p=ToTemporalTimeZone(T),f=GetSlot(o,n),y=GetSlot(o,a),S=GetSlot(o,i),w=GetSlot(o,u),g=GetSlot(this,s),I=GetSlot(this,l),D=GetSlot(this,d),G=GetSlot(this,m),v=GetSlot(this,c),O=GetSlot(this,h);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(p,new(GetIntrinsic("%Temporal.PlainDateTime%"))(f,y,S,g,I,D,G,v,O,w),"compatible"),r),p,w)}getISOFields(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,u),isoHour:GetSlot(this,s),isoMicrosecond:GetSlot(this,c),isoMillisecond:GetSlot(this,m),isoMinute:GetSlot(this,l),isoNanosecond:GetSlot(this,h),isoSecond:GetSlot(this,d)}}static from(e,t){const r=ToTemporalOverflow(GetOptionsObject(t));return IsTemporalTime(e)?new PlainTime(GetSlot(e,s),GetSlot(e,l),GetSlot(e,d),GetSlot(e,m),GetSlot(e,c),GetSlot(e,h)):ToTemporalTime(e,r)}static compare(e,t){const r=ToTemporalTime(e),o=ToTemporalTime(t);for(const e of[s,l,d,m,c,h]){const t=GetSlot(r,e),n=GetSlot(o,e);if(t!==n)return ComparisonResult(t-n)}return 0}}MakeIntrinsicClass(PlainTime,"Temporal.PlainTime");class TimeZone{constructor(e){if(arguments.length<1)throw new RangeError("missing argument: identifier is required");const t=GetCanonicalTimeZoneIdentifier(e);CreateSlots(this),SetSlot(this,o,t)}get id(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(this)}getOffsetNanosecondsFor(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const t=ToTemporalInstant(e),n=GetSlot(this,o);return TestTimeZoneOffsetString(n)?ParseTimeZoneOffsetString(n):GetIANATimeZoneOffsetNanoseconds(GetSlot(t,r),n)}getOffsetStringFor(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetOffsetStringFor(this,ToTemporalInstant(e))}getPlainDateTimeFor(e,t=GetISO8601Calendar()){return BuiltinTimeZoneGetPlainDateTimeFor(this,ToTemporalInstant(e),ToTemporalCalendar(t))}getInstantFor(e,t){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetInstantFor(this,ToTemporalDateTime(e),ToTemporalDisambiguation(GetOptionsObject(t)))}getPossibleInstantsFor(t){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const r=ToTemporalDateTime(t),u=GetIntrinsic("%Temporal.Instant%"),T=GetSlot(this,o);if(TestTimeZoneOffsetString(T)){const t=GetEpochFromISOParts(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(r,s),GetSlot(r,l),GetSlot(r,d),GetSlot(r,m),GetSlot(r,c),GetSlot(r,h));if(null===t)throw new RangeError("DateTime outside of supported range");const o=ParseTimeZoneOffsetString(T);return[new u(e.subtract(t,e.BigInt(o)))]}return function GetIANATimeZoneEpochValue(t,r,o,n,a,i,s,l,d,m){const c=GetEpochFromISOParts(r,o,n,a,i,s,l,d,m);if(null===c)throw new RangeError("DateTime outside of supported range");let h=e.subtract(c,we);e.lessThan(h,ge)&&(h=c);let u=e.add(c,we);e.greaterThan(u,Ie)&&(u=c);const T=GetIANATimeZoneOffsetNanoseconds(h,t),p=GetIANATimeZoneOffsetNanoseconds(u,t);return(T===p?[T]:[T,p]).map((h=>{const u=e.subtract(c,e.BigInt(h)),T=GetIANATimeZoneDateTimeParts(u,t);if(r===T.year&&o===T.month&&n===T.day&&a===T.hour&&i===T.minute&&s===T.second&&l===T.millisecond&&d===T.microsecond&&m===T.nanosecond)return u})).filter((e=>void 0!==e))}(T,GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(r,s),GetSlot(r,l),GetSlot(r,d),GetSlot(r,m),GetSlot(r,c),GetSlot(r,h)).map((e=>new u(e)))}getNextTransition(t){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const n=ToTemporalInstant(t),a=GetSlot(this,o);if(TestTimeZoneOffsetString(a)||"UTC"===a)return null;let i=GetSlot(n,r);const s=GetIntrinsic("%Temporal.Instant%");return i=function GetIANATimeZoneNextTransition(t,r){const o=e.add(t,ve),n=maxJSBI(afterLatestPossibleTzdbRuleChange(),o);let a=maxJSBI(De,t);const i=GetIANATimeZoneOffsetNanoseconds(a,r);let s=a,l=i;for(;i===l&&e.lessThan(e.BigInt(a),n);)s=e.add(a,Oe),l=GetIANATimeZoneOffsetNanoseconds(s,r),i===l&&(a=s);return i===l?null:bisect((e=>GetIANATimeZoneOffsetNanoseconds(e,r)),a,s,i,l)}(i,a),null===i?null:new s(i)}getPreviousTransition(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");const t=ToTemporalInstant(e),n=GetSlot(this,o);if(TestTimeZoneOffsetString(n)||"UTC"===n)return null;let a=GetSlot(t,r);const i=GetIntrinsic("%Temporal.Instant%");return a=GetIANATimeZonePreviousTransition(a,n),null===a?null:new i(a)}toString(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(GetSlot(this,o))}toJSON(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(this)}static from(e){return ToTemporalTimeZone(e)}}MakeIntrinsicClass(TimeZone,"Temporal.TimeZone");const St=Object.create;class PlainYearMonth{constructor(e,t,r=GetISO8601Calendar(),o=1){const n=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToTemporalCalendar(r),s=ToIntegerThrowOnInfinity(o);if(arguments.length<2)throw new RangeError("missing argument: isoYear and isoMonth are required");CreateTemporalYearMonthSlots(this,n,a,i,s)}get year(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,u),this)}get month(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,u),this)}get monthCode(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,u),this)}get calendar(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}get era(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,u),this)}get eraYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,u),this)}get daysInMonth(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,u),this)}get daysInYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,u),this)}get monthsInYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,u),this)}get inLeapYear(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,u),this)}with(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);const r=GetSlot(this,u),o=CalendarFields(r,["month","monthCode","year"]),n=PrepareTemporalFields(e,o,"partial");if(!n)throw new TypeError("invalid year-month-like");let a=PrepareTemporalFields(this,o,[]);a=CalendarMergeFields(r,a,n),a=PrepareTemporalFields(a,o,[]);return CalendarYearMonthFromFields(r,a,GetOptionsObject(t))}add(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainYearMonth("add",this,e,t)}subtract(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainYearMonth("subtract",this,e,t)}until(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainYearMonth("until",this,e,t)}since(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainYearMonth("since",this,e,t)}equals(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");const t=ToTemporalYearMonth(e);for(const e of[n,a,i]){if(GetSlot(this,e)!==GetSlot(t,e))return!1}return CalendarEquals(GetSlot(this,u),GetSlot(t,u))}toString(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return TemporalYearMonthToString(this,ToShowCalendarOption(GetOptionsObject(e)))}toJSON(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return TemporalYearMonthToString(this)}toLocaleString(e,t){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainYearMonth")}toPlainDate(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("argument should be an object");const t=GetSlot(this,u),r=CalendarFields(t,["monthCode","year"]),o=PrepareTemporalFields(this,r,[]),n=CalendarFields(t,["day"]);let a=CalendarMergeFields(t,o,PrepareTemporalFields(e,n,[]));a=PrepareTemporalFields(a,[...new Set([...r,...n])],[]);const i=St(null);return i.overflow="reject",CalendarDateFromFields(t,a,i)}getISOFields(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,u),isoDay:GetSlot(this,i),isoMonth:GetSlot(this,a),isoYear:GetSlot(this,n)}}static from(e,t){const r=GetOptionsObject(t);return IsTemporalYearMonth(e)?(ToTemporalOverflow(r),CreateTemporalYearMonth(GetSlot(e,n),GetSlot(e,a),GetSlot(e,u),GetSlot(e,i))):ToTemporalYearMonth(e,r)}static compare(e,t){const r=ToTemporalYearMonth(e),o=ToTemporalYearMonth(t);return CompareISODate(GetSlot(r,n),GetSlot(r,a),GetSlot(r,i),GetSlot(o,n),GetSlot(o,a),GetSlot(o,i))}}MakeIntrinsicClass(PlainYearMonth,"Temporal.PlainYearMonth");class ZonedDateTime{constructor(e,t,r=GetISO8601Calendar()){if(arguments.length<1)throw new TypeError("missing argument: epochNanoseconds is required");CreateTemporalZonedDateTimeSlots(this,ToBigInt(e),ToTemporalTimeZone(t),ToTemporalCalendar(r))}get calendar(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}get timeZone(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,p)}get year(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,u),dateTime(this))}get month(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,u),dateTime(this))}get monthCode(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,u),dateTime(this))}get day(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,u),dateTime(this))}get hour(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),s)}get minute(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),l)}get second(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),d)}get millisecond(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),m)}get microsecond(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),c)}get nanosecond(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),h)}get era(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,u),dateTime(this))}get eraYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,u),dateTime(this))}get epochSeconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return e.toNumber(e.divide(t,ye))}get epochMilliseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return e.toNumber(e.divide(t,fe))}get epochMicroseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetSlot(this,r);return ToBigIntExternal(e.divide(t,pe))}get epochNanoseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return ToBigIntExternal(GetSlot(this,r))}get dayOfWeek(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,u),dateTime(this))}get dayOfYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,u),dateTime(this))}get weekOfYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,u),dateTime(this))}get hoursInDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=dateTime(this),o=GetIntrinsic("%Temporal.PlainDateTime%"),s=GetSlot(t,n),l=GetSlot(t,a),d=GetSlot(t,i),m=new o(s,l,d,0,0,0,0,0,0),c=AddISODate(s,l,d,0,0,0,1,"reject"),h=new o(c.year,c.month,c.day,0,0,0,0,0,0),u=GetSlot(this,p),T=GetSlot(BuiltinTimeZoneGetInstantFor(u,m,"compatible"),r),f=GetSlot(BuiltinTimeZoneGetInstantFor(u,h,"compatible"),r);return e.toNumber(e.subtract(f,T))/36e11}get daysInWeek(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,u),dateTime(this))}get daysInMonth(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,u),dateTime(this))}get daysInYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,u),dateTime(this))}get monthsInYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,u),dateTime(this))}get inLeapYear(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,u),dateTime(this))}get offset(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetOffsetStringFor(GetSlot(this,p),GetSlot(this,T))}get offsetNanoseconds(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetOffsetNanosecondsFor(GetSlot(this,p),GetSlot(this,T))}with(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid zoned-date-time-like");RejectObjectWithCalendarOrTimeZone(e);const r=GetOptionsObject(t),o=ToTemporalDisambiguation(r),n=ToTemporalOffset(r,"prefer"),a=GetSlot(this,p),i=GetSlot(this,u),s=ArrayPush(CalendarFields(i,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),"offset"),l=PrepareTemporalFields(e,s,"partial"),d=ArrayPush(s,"timeZone");let m=PrepareTemporalFields(this,d,["timeZone","offset"]);m=CalendarMergeFields(i,m,l),m=PrepareTemporalFields(m,d,["timeZone","offset"]);let{year:c,month:h,day:T,hour:f,minute:y,second:S,millisecond:w,microsecond:g,nanosecond:I}=InterpretTemporalDateTimeFields(i,m,r);return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(c,h,T,f,y,S,w,g,I,"option",ParseTimeZoneOffsetString(m.offset),a,o,n,!1),GetSlot(this,p),i)}withPlainDate(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalDate(e),o=GetSlot(t,n),T=GetSlot(t,a),f=GetSlot(t,i);let y=GetSlot(t,u);const S=dateTime(this),w=GetSlot(S,s),g=GetSlot(S,l),I=GetSlot(S,d),D=GetSlot(S,m),G=GetSlot(S,c),v=GetSlot(S,h);y=ConsolidateCalendars(GetSlot(this,u),y);const O=GetSlot(this,p);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(O,new(GetIntrinsic("%Temporal.PlainDateTime%"))(o,T,f,w,g,I,D,G,v,y),"compatible"),r),O,y)}withPlainTime(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetIntrinsic("%Temporal.PlainTime%"),o=void 0===e?new t:ToTemporalTime(e),T=dateTime(this),f=GetSlot(T,n),y=GetSlot(T,a),S=GetSlot(T,i),w=GetSlot(this,u),g=GetSlot(o,s),I=GetSlot(o,l),D=GetSlot(o,d),G=GetSlot(o,m),v=GetSlot(o,c),O=GetSlot(o,h),C=GetSlot(this,p);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(C,new(GetIntrinsic("%Temporal.PlainDateTime%"))(f,y,S,g,I,D,G,v,O,w),"compatible"),r),C,w)}withTimeZone(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalTimeZone(e);return CreateTemporalZonedDateTime(GetSlot(this,r),t,GetSlot(this,u))}withCalendar(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=ToTemporalCalendar(e);return CreateTemporalZonedDateTime(GetSlot(this,r),GetSlot(this,p),t)}add(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromZonedDateTime("add",this,e,t)}subtract(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromZonedDateTime("subtract",this,e,t)}until(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalZonedDateTime("until",this,e,t)}since(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalZonedDateTime("since",this,e,t)}round(t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");if(void 0===t)throw new TypeError("options parameter is required");const o="string"==typeof t?CreateOnePropObject("smallestUnit",t):GetOptionsObject(t),f=GetTemporalUnit(o,"smallestUnit","time",je,["day"]),y=ToTemporalRoundingMode(o,"halfExpand"),S=ToTemporalRoundingIncrement(o,{day:1,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[f],!1),w=dateTime(this);let g=GetSlot(w,n),I=GetSlot(w,a),D=GetSlot(w,i),G=GetSlot(w,s),v=GetSlot(w,l),O=GetSlot(w,d),C=GetSlot(w,m),E=GetSlot(w,c),b=GetSlot(w,h);const M=GetIntrinsic("%Temporal.PlainDateTime%"),R=GetSlot(this,p),Z=GetSlot(this,u),P=BuiltinTimeZoneGetInstantFor(R,new M(GetSlot(w,n),GetSlot(w,a),GetSlot(w,i),0,0,0,0,0,0),"compatible"),F=AddZonedDateTime(P,R,Z,0,0,0,1,0,0,0,0,0,0),Y=e.subtract(F,e.BigInt(GetSlot(P,r)));if(e.equal(Y,he))throw new RangeError("cannot round a ZonedDateTime in a calendar with zero-length days");({year:g,month:I,day:D,hour:G,minute:v,second:O,millisecond:C,microsecond:E,nanosecond:b}=RoundISODateTime(g,I,D,G,v,O,C,E,b,S,f,y,e.toNumber(Y)));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(g,I,D,G,v,O,C,E,b,"option",GetOffsetNanosecondsFor(R,GetSlot(this,T)),R,"compatible","prefer",!1),R,GetSlot(this,u))}equals(t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const o=ToTemporalZonedDateTime(t),n=GetSlot(this,r),a=GetSlot(o,r);return!!e.equal(e.BigInt(n),e.BigInt(a))&&(!!TimeZoneEquals(GetSlot(this,p),GetSlot(o,p))&&CalendarEquals(GetSlot(this,u),GetSlot(o,u)))}toString(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const t=GetOptionsObject(e),{precision:r,unit:o,increment:n}=ToSecondsStringPrecision(t),a=ToTemporalRoundingMode(t,"trunc");return TemporalZonedDateTimeToString(this,r,ToShowCalendarOption(t),function ToShowTimeZoneNameOption(e){return GetOption(e,"timeZoneName",["auto","never"],"auto")}(t),function ToShowOffsetOption(e){return GetOption(e,"offset",["auto","never"],"auto")}(t),{unit:o,increment:n,roundingMode:a})}toLocaleString(e,t){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return new ot(e,t).format(this)}toJSON(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalZonedDateTimeToString(this,"auto")}valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.ZonedDateTime")}startOfDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=dateTime(this),t=GetIntrinsic("%Temporal.PlainDateTime%"),o=GetSlot(this,u),s=new t(GetSlot(e,n),GetSlot(e,a),GetSlot(e,i),0,0,0,0,0,0,o),l=GetSlot(this,p);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(l,s,"compatible"),r),l,o)}toInstant(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(this,r))}toPlainDate(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToDate(dateTime(this))}toPlainTime(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToTime(dateTime(this))}toPlainDateTime(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return dateTime(this)}toPlainYearMonth(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,u);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}toPlainMonthDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=GetSlot(this,u);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}getISOFields(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");const e=dateTime(this),t=GetSlot(this,p);return{calendar:GetSlot(this,u),isoDay:GetSlot(e,i),isoHour:GetSlot(e,s),isoMicrosecond:GetSlot(e,c),isoMillisecond:GetSlot(e,m),isoMinute:GetSlot(e,l),isoMonth:GetSlot(e,a),isoNanosecond:GetSlot(e,h),isoSecond:GetSlot(e,d),isoYear:GetSlot(e,n),offset:BuiltinTimeZoneGetOffsetStringFor(t,GetSlot(this,T)),timeZone:t}}static from(e,t){const o=GetOptionsObject(t);return IsTemporalZonedDateTime(e)?(ToTemporalOverflow(o),ToTemporalDisambiguation(o),ToTemporalOffset(o,"reject"),CreateTemporalZonedDateTime(GetSlot(e,r),GetSlot(e,p),GetSlot(e,u))):ToTemporalZonedDateTime(e,o)}static compare(t,o){const n=ToTemporalZonedDateTime(t),a=ToTemporalZonedDateTime(o),i=GetSlot(n,r),s=GetSlot(a,r);return e.lessThan(e.BigInt(i),e.BigInt(s))?-1:e.greaterThan(e.BigInt(i),e.BigInt(s))?1:0}}function dateTime(e){return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(e,p),GetSlot(e,T),GetSlot(e,u))}MakeIntrinsicClass(ZonedDateTime,"Temporal.ZonedDateTime");var wt=Object.freeze({__proto__:null,Instant,Calendar,PlainDate,PlainDateTime,Duration,PlainMonthDay,Now:ft,PlainTime,TimeZone,PlainYearMonth,ZonedDateTime});function toTemporalInstant(){const t=e.multiply(e.BigInt(+this),fe);return new Instant(ToBigInt(t))}const gt=[Instant,Calendar,PlainDate,PlainDateTime,Duration,PlainMonthDay,PlainTime,TimeZone,PlainYearMonth,ZonedDateTime];for(const e of gt){const t=Object.getOwnPropertyDescriptor(e,"prototype");(t.configurable||t.enumerable||t.writable)&&(t.configurable=!1,t.enumerable=!1,t.writable=!1,Object.defineProperty(e,"prototype",t))}export{nt as Intl,wt as Temporal,toTemporalInstant}; ++import JSBI from 'jsbi'; ++ ++const INTRINSICS = {}; ++const customUtilInspectFormatters = { ++ ['Temporal.Duration'](depth, options) { ++ const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special'); ++ if (depth < 1) ++ return descr; ++ const entries = []; ++ for (const prop of [ ++ 'years', ++ 'months', ++ 'weeks', ++ 'days', ++ 'hours', ++ 'minutes', ++ 'seconds', ++ 'milliseconds', ++ 'microseconds', ++ 'nanoseconds' ++ ]) { ++ if (this[prop] !== 0) ++ entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`); ++ } ++ return descr + ' {\n' + entries.join(',\n') + '\n}'; ++ } ++}; ++function defaultUtilInspectFormatter(depth, options) { ++ return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special'); ++} ++function MakeIntrinsicClass(Class, name) { ++ Object.defineProperty(Class.prototype, Symbol.toStringTag, { ++ value: name, ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ { ++ Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), { ++ value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter, ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ } ++ for (const prop of Object.getOwnPropertyNames(Class)) { ++ // we know that `prop` is present, so the descriptor is never undefined ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const desc = Object.getOwnPropertyDescriptor(Class, prop); ++ if (!desc.configurable || !desc.enumerable) ++ continue; ++ desc.enumerable = false; ++ Object.defineProperty(Class, prop, desc); ++ } ++ for (const prop of Object.getOwnPropertyNames(Class.prototype)) { ++ // we know that `prop` is present, so the descriptor is never undefined ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop); ++ if (!desc.configurable || !desc.enumerable) ++ continue; ++ desc.enumerable = false; ++ Object.defineProperty(Class.prototype, prop, desc); ++ } ++ DefineIntrinsic(name, Class); ++ DefineIntrinsic(`${name}.prototype`, Class.prototype); ++} ++function DefineIntrinsic(name, value) { ++ const key = `%${name}%`; ++ if (INTRINSICS[key] !== undefined) ++ throw new Error(`intrinsic ${name} already exists`); ++ INTRINSICS[key] = value; ++} ++function GetIntrinsic(intrinsic) { ++ return INTRINSICS[intrinsic]; ++} ++ ++// Instant ++const EPOCHNANOSECONDS = 'slot-epochNanoSeconds'; ++// TimeZone ++const TIMEZONE_ID = 'slot-timezone-identifier'; ++// DateTime, Date, Time, YearMonth, MonthDay ++const ISO_YEAR = 'slot-year'; ++const ISO_MONTH = 'slot-month'; ++const ISO_DAY = 'slot-day'; ++const ISO_HOUR = 'slot-hour'; ++const ISO_MINUTE = 'slot-minute'; ++const ISO_SECOND = 'slot-second'; ++const ISO_MILLISECOND = 'slot-millisecond'; ++const ISO_MICROSECOND = 'slot-microsecond'; ++const ISO_NANOSECOND = 'slot-nanosecond'; ++const CALENDAR = 'slot-calendar'; ++// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed: ++const DATE_BRAND = 'slot-date-brand'; ++const YEAR_MONTH_BRAND = 'slot-year-month-brand'; ++const MONTH_DAY_BRAND = 'slot-month-day-brand'; ++// ZonedDateTime ++const INSTANT = 'slot-cached-instant'; ++const TIME_ZONE = 'slot-time-zone'; ++// Duration ++const YEARS = 'slot-years'; ++const MONTHS = 'slot-months'; ++const WEEKS = 'slot-weeks'; ++const DAYS = 'slot-days'; ++const HOURS = 'slot-hours'; ++const MINUTES = 'slot-minutes'; ++const SECONDS = 'slot-seconds'; ++const MILLISECONDS = 'slot-milliseconds'; ++const MICROSECONDS = 'slot-microseconds'; ++const NANOSECONDS = 'slot-nanoseconds'; ++// Calendar ++const CALENDAR_ID = 'slot-calendar-identifier'; ++const slots = new WeakMap(); ++function CreateSlots(container) { ++ slots.set(container, Object.create(null)); ++} ++function GetSlots(container) { ++ return slots.get(container); ++} ++function HasSlot(container, ...ids) { ++ if (!container || 'object' !== typeof container) ++ return false; ++ const myslots = GetSlots(container); ++ return !!myslots && ids.reduce((all, id) => all && id in myslots, true); ++} ++function GetSlot(container, id) { ++ const value = GetSlots(container)[id]; ++ if (value === undefined) ++ throw new TypeError(`Missing internal slot ${id}`); ++ return value; ++} ++function SetSlot(container, id, value) { ++ GetSlots(container)[id] = value; ++} ++ ++const tzComponent = /\.[-A-Za-z_]|\.\.[-A-Za-z._]{1,12}|\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/; ++const offsetNoCapture = /(?:[+\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\d{1,9})?)?)?)/; ++const timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\d{1,2}|${offsetNoCapture.source})`); ++const calComponent = /[A-Za-z0-9]{3,8}/; ++const calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`); ++const yearpart = /(?:[+\u2212-]\d{6}|\d{4})/; ++const monthpart = /(?:0[1-9]|1[0-2])/; ++const daypart = /(?:0[1-9]|[12]\d|3[01])/; ++const datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`); ++const timesplit = /(\d{2})(?::(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?|(\d{2})(?:(\d{2})(?:[.,](\d{1,9}))?)?)?/; ++const offset = /([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?/; ++const zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\[(${timeZoneID.source})\\])?`); ++const calendar = new RegExp(`\\[u-ca=(${calendarID.source})\\]`); ++const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i'); ++const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i'); ++// The short forms of YearMonth and MonthDay are only for the ISO calendar. ++// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate, ++// with the reference fields. ++// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by ++// RFC 3339 and we don't allow 2-digit years, so we allow it. ++// Not ambiguous with HHMMSS because that requires a 'T' prefix ++const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`); ++const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`); ++const fraction = /(\d+)(?:[.,](\d{1,9}))?/; ++const durationDate = /(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)W)?(?:(\d+)D)?/; ++const durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`); ++const duration = new RegExp(`^([+\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i'); ++ ++const ArrayIncludes$1 = Array.prototype.includes; ++const ArrayPrototypePush$1 = Array.prototype.push; ++const IntlDateTimeFormat$2 = globalThis.Intl.DateTimeFormat; ++const MathMin = Math.min; ++const MathMax = Math.max; ++const MathAbs$1 = Math.abs; ++const MathFloor$1 = Math.floor; ++const MathSign = Math.sign; ++const MathTrunc = Math.trunc; ++const NumberIsNaN = Number.isNaN; ++const NumberIsFinite = Number.isFinite; ++const NumberCtor = Number; ++const StringCtor = String; ++const NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER; ++const ObjectAssign$2 = Object.assign; ++const ObjectCreate$2 = Object.create; ++const ObjectDefineProperty = Object.defineProperty; ++const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; ++const ObjectIs = Object.is; ++const ReflectApply$1 = Reflect.apply; ++const ZERO = JSBI.BigInt(0); ++const ONE = JSBI.BigInt(1); ++const SIXTY = JSBI.BigInt(60); ++const THOUSAND = JSBI.BigInt(1e3); ++const MILLION = JSBI.BigInt(1e6); ++const BILLION = JSBI.BigInt(1e9); ++const NEGATIVE_ONE = JSBI.BigInt(-1); ++const DAY_SECONDS = 86400; ++const DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION); ++const NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17)); ++const NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17)); ++const YEAR_MIN = -271821; ++const YEAR_MAX = 275760; ++const BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z ++const ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10)); ++const ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1)); ++const TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7)); ++const BUILTIN_CALENDAR_IDS = [ ++ 'iso8601', ++ 'hebrew', ++ 'islamic', ++ 'islamic-umalqura', ++ 'islamic-tbla', ++ 'islamic-civil', ++ 'islamic-rgsa', ++ 'islamicc', ++ 'persian', ++ 'ethiopic', ++ 'ethioaa', ++ 'coptic', ++ 'chinese', ++ 'dangi', ++ 'roc', ++ 'indian', ++ 'buddhist', ++ 'japanese', ++ 'gregory' ++]; ++function IsInteger(value) { ++ if (typeof value !== 'number' || !NumberIsFinite(value)) ++ return false; ++ const abs = MathAbs$1(value); ++ return MathFloor$1(abs) === abs; ++} ++function IsObject(value) { ++ return (typeof value === 'object' && value !== null) || typeof value === 'function'; ++} ++function ToNumber(value) { ++ if (typeof value === 'bigint') ++ throw new TypeError('Cannot convert BigInt to number'); ++ return NumberCtor(value); ++} ++function ToInteger(value) { ++ const num = ToNumber(value); ++ if (NumberIsNaN(num)) ++ return 0; ++ const integer = MathTrunc(num); ++ if (num === 0) ++ return 0; ++ return integer; ++} ++function ToString(value) { ++ if (typeof value === 'symbol') { ++ throw new TypeError('Cannot convert a Symbol value to a String'); ++ } ++ return StringCtor(value); ++} ++function ToIntegerThrowOnInfinity(value) { ++ const integer = ToInteger(value); ++ if (!NumberIsFinite(integer)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ return integer; ++} ++function ToPositiveInteger(valueParam, property) { ++ const value = ToInteger(valueParam); ++ if (!NumberIsFinite(value)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ if (value < 1) { ++ if (property !== undefined) { ++ throw new RangeError(`property '${property}' cannot be a a number less than one`); ++ } ++ throw new RangeError('Cannot convert a number less than one to a positive integer'); ++ } ++ return value; ++} ++function ToIntegerWithoutRounding(valueParam) { ++ const value = ToNumber(valueParam); ++ if (NumberIsNaN(value)) ++ return 0; ++ if (!NumberIsFinite(value)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ if (!IsInteger(value)) { ++ throw new RangeError(`unsupported fractional value ${value}`); ++ } ++ return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0 ++} ++function divmod(x, y) { ++ const quotient = JSBI.divide(x, y); ++ const remainder = JSBI.remainder(x, y); ++ return { quotient, remainder }; ++} ++function abs(x) { ++ if (JSBI.lessThan(x, ZERO)) ++ return JSBI.multiply(x, NEGATIVE_ONE); ++ return x; ++} ++function ArrayPush(arr, ...newItem) { ++ ArrayPrototypePush$1.apply(arr, newItem); ++ return arr; ++} ++const BUILTIN_CASTS = new Map([ ++ ['year', ToIntegerThrowOnInfinity], ++ ['month', ToPositiveInteger], ++ ['monthCode', ToString], ++ ['day', ToPositiveInteger], ++ ['hour', ToIntegerThrowOnInfinity], ++ ['minute', ToIntegerThrowOnInfinity], ++ ['second', ToIntegerThrowOnInfinity], ++ ['millisecond', ToIntegerThrowOnInfinity], ++ ['microsecond', ToIntegerThrowOnInfinity], ++ ['nanosecond', ToIntegerThrowOnInfinity], ++ ['years', ToIntegerWithoutRounding], ++ ['months', ToIntegerWithoutRounding], ++ ['weeks', ToIntegerWithoutRounding], ++ ['days', ToIntegerWithoutRounding], ++ ['hours', ToIntegerWithoutRounding], ++ ['minutes', ToIntegerWithoutRounding], ++ ['seconds', ToIntegerWithoutRounding], ++ ['milliseconds', ToIntegerWithoutRounding], ++ ['microseconds', ToIntegerWithoutRounding], ++ ['nanoseconds', ToIntegerWithoutRounding], ++ ['era', ToString], ++ ['eraYear', ToInteger], ++ ['offset', ToString] ++]); ++const BUILTIN_DEFAULTS = new Map([ ++ ['hour', 0], ++ ['minute', 0], ++ ['second', 0], ++ ['millisecond', 0], ++ ['microsecond', 0], ++ ['nanosecond', 0] ++]); ++// each item is [plural, singular, category] ++const SINGULAR_PLURAL_UNITS = [ ++ ['years', 'year', 'date'], ++ ['months', 'month', 'date'], ++ ['weeks', 'week', 'date'], ++ ['days', 'day', 'date'], ++ ['hours', 'hour', 'time'], ++ ['minutes', 'minute', 'time'], ++ ['seconds', 'second', 'time'], ++ ['milliseconds', 'millisecond', 'time'], ++ ['microseconds', 'microsecond', 'time'], ++ ['nanoseconds', 'nanosecond', 'time'] ++]; ++const SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]])); ++const PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p])); ++const UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s); ++const DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort(); ++const IntlDateTimeFormatEnUsCache = new Map(); ++function getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) { ++ let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier); ++ if (instance === undefined) { ++ instance = new IntlDateTimeFormat$2('en-us', { ++ timeZone: StringCtor(timeZoneIdentifier), ++ hour12: false, ++ era: 'short', ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance); ++ } ++ return instance; ++} ++function IsTemporalInstant(item) { ++ return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR); ++} ++function IsTemporalTimeZone(item) { ++ return HasSlot(item, TIMEZONE_ID); ++} ++function IsTemporalCalendar(item) { ++ return HasSlot(item, CALENDAR_ID); ++} ++function IsTemporalDuration(item) { ++ return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS); ++} ++function IsTemporalDate(item) { ++ return HasSlot(item, DATE_BRAND); ++} ++function IsTemporalTime(item) { ++ return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) && ++ !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY)); ++} ++function IsTemporalDateTime(item) { ++ return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND); ++} ++function IsTemporalYearMonth(item) { ++ return HasSlot(item, YEAR_MONTH_BRAND); ++} ++function IsTemporalMonthDay(item) { ++ return HasSlot(item, MONTH_DAY_BRAND); ++} ++function IsTemporalZonedDateTime(item) { ++ return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR); ++} ++function RejectObjectWithCalendarOrTimeZone(item) { ++ if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) { ++ throw new TypeError('with() does not support a calendar or timeZone property'); ++ } ++ if (item.calendar !== undefined) { ++ throw new TypeError('with() does not support a calendar property'); ++ } ++ if (item.timeZone !== undefined) { ++ throw new TypeError('with() does not support a timeZone property'); ++ } ++} ++function ParseTemporalTimeZone(stringIdent) { ++ let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent); ++ if (ianaName) ++ return ianaName; ++ if (z) ++ return 'UTC'; ++ return offset; // if !ianaName && !z then offset must be present ++} ++function FormatCalendarAnnotation(id, showCalendar) { ++ if (showCalendar === 'never') ++ return ''; ++ if (showCalendar === 'auto' && id === 'iso8601') ++ return ''; ++ return `[u-ca=${id}]`; ++} ++function ParseISODateTime(isoString) { ++ // ZDT is the superset of fields for every other Temporal type ++ const match = zoneddatetime.exec(isoString); ++ if (!match) ++ throw new RangeError(`invalid ISO 8601 string: ${isoString}`); ++ let yearString = match[1]; ++ if (yearString[0] === '\u2212') ++ yearString = `-${yearString.slice(1)}`; ++ if (yearString === '-000000') ++ throw new RangeError(`invalid ISO 8601 string: ${isoString}`); ++ const year = ToInteger(yearString); ++ const month = ToInteger(match[2] || match[4]); ++ const day = ToInteger(match[3] || match[5]); ++ const hour = ToInteger(match[6]); ++ const hasTime = match[6] !== undefined; ++ const minute = ToInteger(match[7] || match[10]); ++ let second = ToInteger(match[8] || match[11]); ++ if (second === 60) ++ second = 59; ++ const fraction = (match[9] || match[12]) + '000000000'; ++ const millisecond = ToInteger(fraction.slice(0, 3)); ++ const microsecond = ToInteger(fraction.slice(3, 6)); ++ const nanosecond = ToInteger(fraction.slice(6, 9)); ++ let offset; ++ let z = false; ++ if (match[13]) { ++ offset = undefined; ++ z = true; ++ } ++ else if (match[14] && match[15]) { ++ const offsetSign = match[14] === '-' || match[14] === '\u2212' ? '-' : '+'; ++ const offsetHours = match[15] || '00'; ++ const offsetMinutes = match[16] || '00'; ++ const offsetSeconds = match[17] || '00'; ++ let offsetFraction = match[18] || '0'; ++ offset = `${offsetSign}${offsetHours}:${offsetMinutes}`; ++ if (+offsetFraction) { ++ while (offsetFraction.endsWith('0')) ++ offsetFraction = offsetFraction.slice(0, -1); ++ offset += `:${offsetSeconds}.${offsetFraction}`; ++ } ++ else if (+offsetSeconds) { ++ offset += `:${offsetSeconds}`; ++ } ++ if (offset === '-00:00') ++ offset = '+00:00'; ++ } ++ let ianaName = match[19]; ++ if (ianaName) { ++ try { ++ // Canonicalize name if it is an IANA link name or is capitalized wrong ++ ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString(); ++ } ++ catch { ++ // Not an IANA name, may be a custom ID, pass through unchanged ++ } ++ } ++ const calendar = match[20]; ++ RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ return { ++ year, ++ month, ++ day, ++ hasTime, ++ hour, ++ minute, ++ second, ++ millisecond, ++ microsecond, ++ nanosecond, ++ ianaName, ++ offset, ++ z, ++ calendar ++ }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalInstantString(isoString) { ++ const result = ParseISODateTime(isoString); ++ if (!result.z && !result.offset) ++ throw new RangeError('Temporal.Instant requires a time zone offset'); ++ return result; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalZonedDateTimeString(isoString) { ++ const result = ParseISODateTime(isoString); ++ if (!result.ianaName) ++ throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets'); ++ return result; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalDateTimeString(isoString) { ++ return ParseISODateTime(isoString); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalDateString(isoString) { ++ return ParseISODateTime(isoString); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalTimeString(isoString) { ++ const match = time.exec(isoString); ++ let hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ if (match) { ++ hour = ToInteger(match[1]); ++ minute = ToInteger(match[2] || match[5]); ++ second = ToInteger(match[3] || match[6]); ++ if (second === 60) ++ second = 59; ++ const fraction = (match[4] || match[7]) + '000000000'; ++ millisecond = ToInteger(fraction.slice(0, 3)); ++ microsecond = ToInteger(fraction.slice(3, 6)); ++ nanosecond = ToInteger(fraction.slice(6, 9)); ++ calendar = match[15]; ++ } ++ else { ++ let z, hasTime; ++ ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } = ++ ParseISODateTime(isoString)); ++ if (!hasTime) ++ throw new RangeError(`time is missing in string: ${isoString}`); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainTime'); ++ } ++ // if it's a date-time string, OK ++ if (/[tT ][0-9][0-9]/.test(isoString)) { ++ return { hour, minute, second, millisecond, microsecond, nanosecond, calendar }; ++ } ++ // slow but non-grammar-dependent way to ensure that time-only strings that ++ // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to ++ // assertion in spec text ++ try { ++ const { month, day } = ParseTemporalMonthDayString(isoString); ++ RejectISODate(1972, month, day); ++ } ++ catch { ++ try { ++ const { year, month } = ParseTemporalYearMonthString(isoString); ++ RejectISODate(year, month, 1); ++ } ++ catch { ++ return { hour, minute, second, millisecond, microsecond, nanosecond, calendar }; ++ } ++ } ++ throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalYearMonthString(isoString) { ++ const match = yearmonth.exec(isoString); ++ let year, month, calendar, referenceISODay; ++ if (match) { ++ let yearString = match[1]; ++ if (yearString[0] === '\u2212') ++ yearString = `-${yearString.slice(1)}`; ++ if (yearString === '-000000') ++ throw new RangeError(`invalid ISO 8601 string: ${isoString}`); ++ year = ToInteger(yearString); ++ month = ToInteger(match[2]); ++ calendar = match[3]; ++ } ++ else { ++ let z; ++ ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString)); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainYearMonth'); ++ } ++ return { year, month, calendar, referenceISODay }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalMonthDayString(isoString) { ++ const match = monthday.exec(isoString); ++ let month, day, calendar, referenceISOYear; ++ if (match) { ++ month = ToInteger(match[1]); ++ day = ToInteger(match[2]); ++ } ++ else { ++ let z; ++ ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString)); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainMonthDay'); ++ } ++ return { month, day, calendar, referenceISOYear }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalTimeZoneString(stringIdent) { ++ try { ++ let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent); ++ if (canonicalIdent) ++ return { ianaName: canonicalIdent.toString() }; ++ } ++ catch { ++ // fall through ++ } ++ try { ++ // Try parsing ISO string instead ++ const result = ParseISODateTime(stringIdent); ++ if (result.z || result.offset || result.ianaName) { ++ return result; ++ } ++ } ++ catch { ++ // fall through ++ } ++ throw new RangeError(`Invalid time zone: ${stringIdent}`); ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalDurationString(isoString) { ++ const match = duration.exec(isoString); ++ if (!match) ++ throw new RangeError(`invalid duration: ${isoString}`); ++ if (match.slice(2).every((element) => element === undefined)) { ++ throw new RangeError(`invalid duration: ${isoString}`); ++ } ++ const sign = match[1] === '-' || match[1] === '\u2212' ? -1 : 1; ++ const years = ToInteger(match[2]) * sign; ++ const months = ToInteger(match[3]) * sign; ++ const weeks = ToInteger(match[4]) * sign; ++ const days = ToInteger(match[5]) * sign; ++ const hours = ToInteger(match[6]) * sign; ++ let fHours = match[7]; ++ let minutes = ToInteger(match[8]) * sign; ++ let fMinutes = match[9]; ++ let seconds = ToInteger(match[10]) * sign; ++ const fSeconds = match[11] + '000000000'; ++ let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign; ++ let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign; ++ let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign; ++ fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0; ++ fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0; ++ ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds)); ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++function ParseTemporalInstant(isoString) { ++ let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString); ++ if (!z && !offset) ++ throw new RangeError('Temporal.Instant requires a time zone offset'); ++ // At least one of z or offset is defined, but TS doesn't seem to understand ++ // that we only use offset if z is not defined (and thus offset must be defined). ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs)); ++ const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (epochNs === null) ++ throw new RangeError('DateTime outside of supported range'); ++ return epochNs; ++} ++function RegulateISODate(yearParam, monthParam, dayParam, overflow) { ++ let year = yearParam; ++ let month = monthParam; ++ let day = dayParam; ++ switch (overflow) { ++ case 'reject': ++ RejectISODate(year, month, day); ++ break; ++ case 'constrain': ++ ({ year, month, day } = ConstrainISODate(year, month, day)); ++ break; ++ } ++ return { year, month, day }; ++} ++function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) { ++ let hour = hourParam; ++ let minute = minuteParam; ++ let second = secondParam; ++ let millisecond = millisecondParam; ++ let microsecond = microsecondParam; ++ let nanosecond = nanosecondParam; ++ switch (overflow) { ++ case 'reject': ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ break; ++ case 'constrain': ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond)); ++ break; ++ } ++ return { hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function RegulateISOYearMonth(yearParam, monthParam, overflow) { ++ let year = yearParam; ++ let month = monthParam; ++ const referenceISODay = 1; ++ switch (overflow) { ++ case 'reject': ++ RejectISODate(year, month, referenceISODay); ++ break; ++ case 'constrain': ++ ({ year, month } = ConstrainISODate(year, month)); ++ break; ++ } ++ return { year, month }; ++} ++function DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) { ++ let fHours = fHoursParam; ++ let minutes = minutesParam; ++ let fMinutes = fMinutesParam; ++ let seconds = secondsParam; ++ let milliseconds = millisecondsParam; ++ let microseconds = microsecondsParam; ++ let nanoseconds = nanosecondsParam; ++ if (fHours !== 0) { ++ [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => { ++ if (val !== 0) ++ throw new RangeError('only the smallest unit can be fractional'); ++ }); ++ const mins = fHours * 60; ++ minutes = MathTrunc(mins); ++ fMinutes = mins % 1; ++ } ++ if (fMinutes !== 0) { ++ [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => { ++ if (val !== 0) ++ throw new RangeError('only the smallest unit can be fractional'); ++ }); ++ const secs = fMinutes * 60; ++ seconds = MathTrunc(secs); ++ const fSeconds = secs % 1; ++ if (fSeconds !== 0) { ++ const mils = fSeconds * 1000; ++ milliseconds = MathTrunc(mils); ++ const fMilliseconds = mils % 1; ++ if (fMilliseconds !== 0) { ++ const mics = fMilliseconds * 1000; ++ microseconds = MathTrunc(mics); ++ const fMicroseconds = mics % 1; ++ if (fMicroseconds !== 0) { ++ const nans = fMicroseconds * 1000; ++ nanoseconds = MathTrunc(nans); ++ } ++ } ++ } ++ } ++ return { minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function ToTemporalDurationRecord(item) { ++ if (!IsObject(item)) { ++ return ParseTemporalDurationString(ToString(item)); ++ } ++ if (IsTemporalDuration(item)) { ++ return { ++ years: GetSlot(item, YEARS), ++ months: GetSlot(item, MONTHS), ++ weeks: GetSlot(item, WEEKS), ++ days: GetSlot(item, DAYS), ++ hours: GetSlot(item, HOURS), ++ minutes: GetSlot(item, MINUTES), ++ seconds: GetSlot(item, SECONDS), ++ milliseconds: GetSlot(item, MILLISECONDS), ++ microseconds: GetSlot(item, MICROSECONDS), ++ nanoseconds: GetSlot(item, NANOSECONDS) ++ }; ++ } ++ const result = { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0, ++ hours: 0, ++ minutes: 0, ++ seconds: 0, ++ milliseconds: 0, ++ microseconds: 0, ++ nanoseconds: 0 ++ }; ++ let partial = ToTemporalPartialDurationRecord(item); ++ for (const property of DURATION_FIELDS) { ++ const value = partial[property]; ++ if (value !== undefined) { ++ result[property] = value; ++ } ++ } ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result; ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function ToTemporalPartialDurationRecord(temporalDurationLike) { ++ if (!IsObject(temporalDurationLike)) { ++ throw new TypeError('invalid duration-like'); ++ } ++ const result = { ++ years: undefined, ++ months: undefined, ++ weeks: undefined, ++ days: undefined, ++ hours: undefined, ++ minutes: undefined, ++ seconds: undefined, ++ milliseconds: undefined, ++ microseconds: undefined, ++ nanoseconds: undefined ++ }; ++ let any = false; ++ for (const property of DURATION_FIELDS) { ++ const value = temporalDurationLike[property]; ++ if (value !== undefined) { ++ any = true; ++ result[property] = ToIntegerWithoutRounding(value); ++ } ++ } ++ if (!any) { ++ throw new TypeError('invalid duration-like'); ++ } ++ return result; ++} ++function ToLimitedTemporalDuration(item, disallowedProperties) { ++ let record = ToTemporalDurationRecord(item); ++ for (const property of disallowedProperties) { ++ if (record[property] !== 0) { ++ throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`); ++ } ++ } ++ return record; ++} ++function ToTemporalOverflow(options) { ++ if (options === undefined) ++ return 'constrain'; ++ return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain'); ++} ++function ToTemporalDisambiguation(options) { ++ if (options === undefined) ++ return 'compatible'; ++ return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible'); ++} ++function ToTemporalRoundingMode(options, fallback) { ++ return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback); ++} ++function NegateTemporalRoundingMode(roundingMode) { ++ switch (roundingMode) { ++ case 'ceil': ++ return 'floor'; ++ case 'floor': ++ return 'ceil'; ++ default: ++ return roundingMode; ++ } ++} ++function ToTemporalOffset(options, fallback) { ++ if (options === undefined) ++ return fallback; ++ return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback); ++} ++function ToShowCalendarOption(options) { ++ return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto'); ++} ++function ToShowTimeZoneNameOption(options) { ++ return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto'); ++} ++function ToShowOffsetOption(options) { ++ return GetOption(options, 'offset', ['auto', 'never'], 'auto'); ++} ++function ToTemporalRoundingIncrement(options, dividend, inclusive) { ++ let maximum = Infinity; ++ if (dividend !== undefined) ++ maximum = dividend; ++ if (!inclusive && dividend !== undefined) ++ maximum = dividend > 1 ? dividend - 1 : 1; ++ const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1); ++ if (dividend !== undefined && dividend % increment !== 0) { ++ throw new RangeError(`Rounding increment must divide evenly into ${dividend}`); ++ } ++ return increment; ++} ++function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) { ++ const maximumIncrements = { ++ year: undefined, ++ month: undefined, ++ week: undefined, ++ day: undefined, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++} ++function ToSecondsStringPrecision(options) { ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined); ++ if (smallestUnit === 'hour') { ++ const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => { ++ // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains. ++ // Maybe this is fixed in later TS versions? ++ if (c === 'time' && s !== 'hour') { ++ allowed.push(s, p); ++ } ++ return allowed; ++ }, []); ++ throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`); ++ } ++ switch (smallestUnit) { ++ case 'minute': ++ return { precision: 'minute', unit: 'minute', increment: 1 }; ++ case 'second': ++ return { precision: 0, unit: 'second', increment: 1 }; ++ case 'millisecond': ++ return { precision: 3, unit: 'millisecond', increment: 1 }; ++ case 'microsecond': ++ return { precision: 6, unit: 'microsecond', increment: 1 }; ++ case 'nanosecond': ++ return { precision: 9, unit: 'nanosecond', increment: 1 }; ++ } ++ let digits = options.fractionalSecondDigits; ++ if (digits === undefined) ++ digits = 'auto'; ++ if (typeof digits !== 'number') { ++ const stringDigits = ToString(digits); ++ if (stringDigits === 'auto') ++ return { precision: 'auto', unit: 'nanosecond', increment: 1 }; ++ throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`); ++ } ++ if (NumberIsNaN(digits) || digits < 0 || digits > 9) { ++ throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`); ++ } ++ const precision = MathFloor$1(digits); ++ switch (precision) { ++ case 0: ++ return { precision, unit: 'second', increment: 1 }; ++ case 1: ++ case 2: ++ case 3: ++ return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) }; ++ case 4: ++ case 5: ++ case 6: ++ return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) }; ++ case 7: ++ case 8: ++ case 9: ++ return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) }; ++ default: ++ throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`); ++ } ++} ++const REQUIRED = Symbol('~required~'); ++// This signature of the function is NOT used in type-checking, so restricting ++// the default value via generic binding like the other overloads isn't ++// necessary. ++function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) { ++ const allowedSingular = []; ++ for (const [, singular, category] of SINGULAR_PLURAL_UNITS) { ++ if (unitGroup === 'datetime' || unitGroup === category) { ++ allowedSingular.push(singular); ++ } ++ } ++ allowedSingular.push(...extraValues); ++ let defaultVal = requiredOrDefault; ++ if (defaultVal === REQUIRED) { ++ defaultVal = undefined; ++ } ++ else if (defaultVal !== undefined) { ++ allowedSingular.push(defaultVal); ++ } ++ const allowedValues = [ ++ ...allowedSingular ++ ]; ++ for (const singular of allowedSingular) { ++ const plural = PLURAL_FOR.get(singular); ++ if (plural !== undefined) ++ allowedValues.push(plural); ++ } ++ let retval = GetOption(options, key, allowedValues, defaultVal); ++ if (retval === undefined && requiredOrDefault === REQUIRED) { ++ throw new RangeError(`${key} is required`); ++ } ++ // Coerce any plural units into their singular form ++ if (SINGULAR_FOR.has(retval)) { ++ // We just has-checked this, but tsc doesn't understand that. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ return SINGULAR_FOR.get(retval); ++ } ++ return retval; ++} ++function ToRelativeTemporalObject(options) { ++ const relativeTo = options.relativeTo; ++ if (relativeTo === undefined) ++ return relativeTo; ++ let offsetBehaviour = 'option'; ++ let matchMinutes = false; ++ let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset; ++ if (IsObject(relativeTo)) { ++ if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) ++ return relativeTo; ++ if (IsTemporalDateTime(relativeTo)) ++ return TemporalDateTimeToDate(relativeTo); ++ calendar = GetTemporalCalendarWithISODefault(relativeTo); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fields = PrepareTemporalFields(relativeTo, fieldNames, []); ++ const dateOptions = ObjectCreate$2(null); ++ dateOptions.overflow = 'constrain'; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions)); ++ // The `offset` and `timeZone` properties only exist on ZonedDateTime (or ++ // ZonedDateTimeLike-property bags). The assertions below are used to avoid ++ // TS errors while not diverging runtime code from proposal-temporal. ++ offset = relativeTo.offset; ++ if (offset === undefined) ++ offsetBehaviour = 'wall'; ++ timeZone = relativeTo.timeZone; ++ } ++ else { ++ let ianaName, z; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } = ++ ParseISODateTime(ToString(relativeTo))); ++ if (ianaName) ++ timeZone = ianaName; ++ if (z) { ++ offsetBehaviour = 'exact'; ++ } ++ else if (!offset) { ++ offsetBehaviour = 'wall'; ++ } ++ if (!calendar) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ matchMinutes = true; ++ } ++ if (timeZone !== undefined) { ++ timeZone = ToTemporalTimeZone(timeZone); ++ let offsetNs = 0; ++ if (offsetBehaviour === 'option') ++ offsetNs = ParseTimeZoneOffsetString(ToString(offset)); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++ } ++ return CreateTemporalDate(year, month, day, calendar); ++} ++function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) { ++ for (const [prop, v] of [ ++ ['years', years], ++ ['months', months], ++ ['weeks', weeks], ++ ['days', days], ++ ['hours', hours], ++ ['minutes', minutes], ++ ['seconds', seconds], ++ ['milliseconds', milliseconds], ++ ['microseconds', microseconds], ++ ['nanoseconds', nanoseconds] ++ ]) { ++ if (v !== 0) { ++ // All the above keys are definitely in SINGULAR_FOR ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ return SINGULAR_FOR.get(prop); ++ } ++ } ++ return 'nanosecond'; ++} ++function LargerOfTwoTemporalUnits(unit1, unit2) { ++ if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) ++ return unit2; ++ return unit1; ++} ++function MergeLargestUnitOption(optionsParam, largestUnit) { ++ let options = optionsParam; ++ if (options === undefined) ++ options = ObjectCreate$2(null); ++ return ObjectAssign$2(ObjectCreate$2(null), options, { largestUnit }); ++} ++function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) { ++ const result = ObjectCreate$2(null); ++ let any = false; ++ for (const property of fields) { ++ let value = bag[property]; ++ if (value !== undefined) { ++ any = true; ++ if (BUILTIN_CASTS.has(property)) { ++ // We just has-checked this map access, so there will definitely be a ++ // value. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ value = BUILTIN_CASTS.get(property)(value); ++ } ++ result[property] = value; ++ } ++ else if (requiredFields !== 'partial') { ++ // TODO: using .call in this way is not correctly type-checked by tsc. ++ // We might need a type-safe Call wrapper? ++ if (ArrayIncludes$1.call(requiredFields, property)) { ++ throw new TypeError(`required property '${property}' missing or undefined`); ++ } ++ value = BUILTIN_DEFAULTS.get(property); ++ result[property] = value; ++ } ++ } ++ if (requiredFields === 'partial' && !any) { ++ throw new TypeError(emptySourceErrorMessage); ++ } ++ if ((result.era === undefined) !== (result.eraYear === undefined)) { ++ throw new RangeError("properties 'era' and 'eraYear' must be provided together"); ++ } ++ return result; ++} ++function ToTemporalTimeRecord(bag, completeness = 'complete') { ++ // NOTE: Field order here is important. ++ const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second']; ++ const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' }); ++ const result = {}; ++ for (const field of fields) { ++ const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field); ++ if (valueDesc !== undefined) { ++ result[field] = valueDesc.value; ++ } ++ else if (completeness === 'complete') { ++ result[field] = 0; ++ } ++ } ++ return result; ++} ++function ToTemporalDate(itemParam, options) { ++ let item = itemParam; ++ if (IsObject(item)) { ++ if (IsTemporalDate(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ if (IsTemporalDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR)); ++ } ++ const calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ return CalendarDateFromFields(calendar, fields, options); ++ } ++ ToTemporalOverflow(options); // validate and ignore ++ const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item)); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainDate'); ++ const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%'); ++ return new TemporalPlainDate(year, month, day, calendar); // include validation ++} ++function InterpretTemporalDateTimeFields(calendar, fields, options) { ++ let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields); ++ const overflow = ToTemporalOverflow(options); ++ const date = CalendarDateFromFields(calendar, fields, options); ++ const year = GetSlot(date, ISO_YEAR); ++ const month = GetSlot(date, ISO_MONTH); ++ const day = GetSlot(date, ISO_DAY); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow)); ++ return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function ToTemporalDateTime(item, options) { ++ let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ if (IsObject(item)) { ++ if (IsTemporalDateTime(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ if (IsTemporalDate(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR)); ++ } ++ calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options)); ++ } ++ else { ++ ToTemporalOverflow(options); // validate and ignore ++ let z; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } = ++ ParseTemporalDateTimeString(ToString(item))); ++ if (z) ++ throw new RangeError('Z designator not supported for PlainDateTime'); ++ RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (calendar === undefined) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ } ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++} ++function ToTemporalDuration(item) { ++ if (IsTemporalDuration(item)) ++ return item; ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item); ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++} ++function ToTemporalInstant(item) { ++ if (IsTemporalInstant(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS)); ++ } ++ const ns = ParseTemporalInstant(ToString(item)); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(ns); ++} ++function ToTemporalMonthDay(itemParam, options) { ++ let item = itemParam; ++ if (IsObject(item)) { ++ if (IsTemporalMonthDay(item)) ++ return item; ++ let calendar, calendarAbsent; ++ if (HasSlot(item, CALENDAR)) { ++ calendar = GetSlot(item, CALENDAR); ++ calendarAbsent = false; ++ } ++ else { ++ let maybeStringCalendar = item.calendar; ++ calendarAbsent = maybeStringCalendar === undefined; ++ if (maybeStringCalendar === undefined) ++ maybeStringCalendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(maybeStringCalendar); ++ } ++ // HasSlot above adjusts the type of 'item' to include ++ // TypesWithCalendarUnits, which causes type-inference failures below. ++ // This is probably indicative of problems with HasSlot's typing. ++ item = item; ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ // Callers who omit the calendar are not writing calendar-independent ++ // code. In that case, `monthCode`/`year` can be omitted; `month` and ++ // `day` are sufficient. Add a `year` to satisfy calendar validation. ++ if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) { ++ fields.year = 1972; ++ } ++ return CalendarMonthDayFromFields(calendar, fields, options); ++ } ++ ToTemporalOverflow(options); // validate and ignore ++ let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item)); ++ let calendar = maybeStringCalendar; ++ if (calendar === undefined) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ if (referenceISOYear === undefined) { ++ RejectISODate(1972, month, day); ++ return CreateTemporalMonthDay(month, day, calendar); ++ } ++ const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear); ++ return CalendarMonthDayFromFields(calendar, result); ++} ++function ToTemporalTime(itemParam, overflow = 'constrain') { ++ let item = itemParam; ++ let hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ if (IsObject(item)) { ++ if (IsTemporalTime(item)) ++ return item; ++ if (IsTemporalZonedDateTime(item)) { ++ item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ if (IsTemporalDateTime(item)) { ++ const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND)); ++ } ++ calendar = GetTemporalCalendarWithISODefault(item); ++ if (ToString(calendar) !== 'iso8601') { ++ throw new RangeError('PlainTime can only have iso8601 calendar'); ++ } ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item)); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow)); ++ } ++ else { ++ ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item))); ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ if (calendar !== undefined && calendar !== 'iso8601') { ++ throw new RangeError('PlainTime can only have iso8601 calendar'); ++ } ++ } ++ const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function ToTemporalYearMonth(item, options) { ++ if (IsObject(item)) { ++ if (IsTemporalYearMonth(item)) ++ return item; ++ const calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']); ++ const fields = PrepareTemporalFields(item, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields, options); ++ } ++ ToTemporalOverflow(options); // validate and ignore ++ let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item)); ++ // TODO: replace with ternary? ++ let calendar = maybeStringCalendar; ++ if (calendar === undefined) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ if (referenceISODay === undefined) { ++ RejectISODate(year, month, 1); ++ return CreateTemporalYearMonth(year, month, calendar); ++ } ++ const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay); ++ return CalendarYearMonthFromFields(calendar, result); ++} ++function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) { ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') { ++ // Simple case: ISO string without a TZ offset (or caller wants to ignore ++ // the offset), so just convert DateTime to Instant in the given time zone ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation); ++ return GetSlot(instant, EPOCHNANOSECONDS); ++ } ++ // The caller wants the offset to always win ('use') OR the caller is OK ++ // with the offset winning ('prefer' or 'reject') as long as it's valid ++ // for this timezone and date/time. ++ if (offsetBehaviour === 'exact' || offsetOpt === 'use') { ++ // Calculate the instant for the input's date/time and offset ++ const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (epochNs === null) ++ throw new RangeError('ZonedDateTime outside of supported range'); ++ return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)); ++ } ++ // "prefer" or "reject" ++ const possibleInstants = GetPossibleInstantsFor(timeZone, dt); ++ for (const candidate of possibleInstants) { ++ const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate); ++ const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand')); ++ if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) { ++ return GetSlot(candidate, EPOCHNANOSECONDS); ++ } ++ } ++ // the user-provided offset doesn't match any instants for this time ++ // zone and date/time. ++ if (offsetOpt === 'reject') { ++ const offsetStr = FormatTimeZoneOffsetString(offsetNs); ++ const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone'; ++ // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT ++ // toString (which is invoked by Node when using template literals directly). ++ // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit ++ throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`); ++ } ++ // fall through: offsetOpt === 'prefer', but the offset doesn't match ++ // so fall back to use the time zone instead. ++ const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation); ++ return GetSlot(instant, EPOCHNANOSECONDS); ++} ++function ToTemporalZonedDateTime(item, options) { ++ let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar; ++ let matchMinute = false; ++ let offsetBehaviour = 'option'; ++ if (IsObject(item)) { ++ if (IsTemporalZonedDateTime(item)) ++ return item; ++ calendar = GetTemporalCalendarWithISODefault(item); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset'); ++ const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options)); ++ timeZone = ToTemporalTimeZone(fields.timeZone); ++ offset = fields.offset; ++ if (offset === undefined) { ++ offsetBehaviour = 'wall'; ++ } ++ else { ++ offset = ToString(offset); ++ } ++ } ++ else { ++ ToTemporalOverflow(options); // validate and ignore ++ let ianaName, z; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } = ++ ParseTemporalZonedDateTimeString(ToString(item))); ++ if (!ianaName) ++ throw new RangeError('time zone ID required in brackets'); ++ if (z) { ++ offsetBehaviour = 'exact'; ++ } ++ else if (!offset) { ++ offsetBehaviour = 'wall'; ++ } ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ timeZone = new TemporalTimeZone(ianaName); ++ if (!calendar) ++ calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ matchMinute = true; // ISO strings may specify offset with less precision ++ } ++ let offsetNs = 0; ++ // The code above guarantees that if offsetBehaviour === 'option', then ++ // `offset` is not undefined. ++ if (offsetBehaviour === 'option') ++ offsetNs = ParseTimeZoneOffsetString(offset); ++ const disambiguation = ToTemporalDisambiguation(options); ++ const offsetOpt = ToTemporalOffset(options, 'reject'); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++} ++function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) { ++ RejectISODate(isoYear, isoMonth, isoDay); ++ RejectDateRange(isoYear, isoMonth, isoDay); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, DATE_BRAND, true); ++ { ++ ObjectDefineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) { ++ const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%'); ++ const result = ObjectCreate$2(TemporalPlainDate.prototype); ++ CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar); ++ return result; ++} ++function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) { ++ RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns); ++ RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, ISO_HOUR, h); ++ SetSlot(result, ISO_MINUTE, min); ++ SetSlot(result, ISO_SECOND, s); ++ SetSlot(result, ISO_MILLISECOND, ms); ++ SetSlot(result, ISO_MICROSECOND, µs); ++ SetSlot(result, ISO_NANOSECOND, ns); ++ SetSlot(result, CALENDAR, calendar); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) { ++ const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const result = ObjectCreate$2(TemporalPlainDateTime.prototype); ++ CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar); ++ return result; ++} ++function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) { ++ RejectISODate(referenceISOYear, isoMonth, isoDay); ++ RejectDateRange(referenceISOYear, isoMonth, isoDay); ++ CreateSlots(result); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, ISO_YEAR, referenceISOYear); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, MONTH_DAY_BRAND, true); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) { ++ const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%'); ++ const result = ObjectCreate$2(TemporalPlainMonthDay.prototype); ++ CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear); ++ return result; ++} ++function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) { ++ RejectISODate(isoYear, isoMonth, referenceISODay); ++ RejectYearMonthRange(isoYear, isoMonth); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, referenceISODay); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, YEAR_MONTH_BRAND, true); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) { ++ const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%'); ++ const result = ObjectCreate$2(TemporalPlainYearMonth.prototype); ++ CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay); ++ return result; ++} ++function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) { ++ ValidateEpochNanoseconds(epochNanoseconds); ++ CreateSlots(result); ++ SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds); ++ SetSlot(result, TIME_ZONE, timeZone); ++ SetSlot(result, CALENDAR, calendar); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS)); ++ SetSlot(result, INSTANT, instant); ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++} ++function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) { ++ const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%'); ++ const result = ObjectCreate$2(TemporalZonedDateTime.prototype); ++ CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar); ++ return result; ++} ++function GetISO8601Calendar() { ++ const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%'); ++ return new TemporalCalendar('iso8601'); ++} ++// TODO: should (can?) we make this generic so the field names are checked ++// against the type that the calendar is a property of? ++function CalendarFields(calendar, fieldNamesParam) { ++ let fieldNames = fieldNamesParam; ++ if (calendar.fields) { ++ fieldNames = calendar.fields(fieldNames); ++ } ++ const result = []; ++ for (const name of fieldNames) { ++ if (typeof name !== 'string') ++ throw new TypeError('bad return from calendar.fields()'); ++ ArrayPrototypePush$1.call(result, name); ++ } ++ return result; ++} ++function CalendarMergeFields(calendar, fields, additionalFields) { ++ const calMergeFields = calendar.mergeFields; ++ if (!calMergeFields) { ++ return { ...fields, ...additionalFields }; ++ } ++ const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]); ++ if (!IsObject(result)) ++ throw new TypeError('bad return from calendar.mergeFields()'); ++ return result; ++} ++function CalendarDateAdd(calendar, date, duration, options, dateAddParam) { ++ let dateAdd = dateAddParam; ++ if (dateAdd === undefined) { ++ dateAdd = calendar.dateAdd; ++ } ++ const result = ReflectApply$1(dateAdd, calendar, [date, duration, options]); ++ if (!IsTemporalDate(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) { ++ let dateUntil = dateUntilParam; ++ if (dateUntil === undefined) { ++ dateUntil = calendar.dateUntil; ++ } ++ const result = ReflectApply$1(dateUntil, calendar, [date, otherDate, options]); ++ if (!IsTemporalDuration(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarYear(calendar, dateLike) { ++ const result = calendar.year(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar year result must be an integer'); ++ } ++ return ToIntegerThrowOnInfinity(result); ++} ++function CalendarMonth(calendar, dateLike) { ++ const result = calendar.month(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar month result must be a positive integer'); ++ } ++ return ToPositiveInteger(result); ++} ++function CalendarMonthCode(calendar, dateLike) { ++ const result = calendar.monthCode(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar monthCode result must be a string'); ++ } ++ return ToString(result); ++} ++function CalendarDay(calendar, dateLike) { ++ const result = calendar.day(dateLike); ++ if (result === undefined) { ++ throw new RangeError('calendar day result must be a positive integer'); ++ } ++ return ToPositiveInteger(result); ++} ++function CalendarEra(calendar, dateLike) { ++ let result = calendar.era(dateLike); ++ if (result !== undefined) { ++ result = ToString(result); ++ } ++ return result; ++} ++function CalendarEraYear(calendar, dateLike) { ++ let result = calendar.eraYear(dateLike); ++ if (result !== undefined) { ++ result = ToIntegerThrowOnInfinity(result); ++ } ++ return result; ++} ++function CalendarDayOfWeek(calendar, dateLike) { ++ return calendar.dayOfWeek(dateLike); ++} ++function CalendarDayOfYear(calendar, dateLike) { ++ return calendar.dayOfYear(dateLike); ++} ++function CalendarWeekOfYear(calendar, dateLike) { ++ return calendar.weekOfYear(dateLike); ++} ++function CalendarDaysInWeek(calendar, dateLike) { ++ return calendar.daysInWeek(dateLike); ++} ++function CalendarDaysInMonth(calendar, dateLike) { ++ return calendar.daysInMonth(dateLike); ++} ++function CalendarDaysInYear(calendar, dateLike) { ++ return calendar.daysInYear(dateLike); ++} ++function CalendarMonthsInYear(calendar, dateLike) { ++ return calendar.monthsInYear(dateLike); ++} ++function CalendarInLeapYear(calendar, dateLike) { ++ return calendar.inLeapYear(dateLike); ++} ++function ToTemporalCalendar(calendarLikeParam) { ++ let calendarLike = calendarLikeParam; ++ if (IsObject(calendarLike)) { ++ if (HasSlot(calendarLike, CALENDAR)) ++ return GetSlot(calendarLike, CALENDAR); ++ if (!('calendar' in calendarLike)) ++ return calendarLike; ++ calendarLike = calendarLike.calendar; ++ if (IsObject(calendarLike) && !('calendar' in calendarLike)) ++ return calendarLike; ++ } ++ const identifier = ToString(calendarLike); ++ const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%'); ++ if (IsBuiltinCalendar(identifier)) ++ return new TemporalCalendar(identifier); ++ let calendar; ++ try { ++ ({ calendar } = ParseISODateTime(identifier)); ++ } ++ catch { ++ throw new RangeError(`Invalid calendar: ${identifier}`); ++ } ++ if (!calendar) ++ calendar = 'iso8601'; ++ return new TemporalCalendar(calendar); ++} ++function GetTemporalCalendarWithISODefault(item) { ++ if (HasSlot(item, CALENDAR)) ++ return GetSlot(item, CALENDAR); ++ const { calendar } = item; ++ if (calendar === undefined) ++ return GetISO8601Calendar(); ++ return ToTemporalCalendar(calendar); ++} ++function CalendarEquals(one, two) { ++ if (one === two) ++ return true; ++ const cal1 = ToString(one); ++ const cal2 = ToString(two); ++ return cal1 === cal2; ++} ++function ConsolidateCalendars(one, two) { ++ if (one === two) ++ return two; ++ const sOne = ToString(one); ++ const sTwo = ToString(two); ++ if (sOne === sTwo || sOne === 'iso8601') { ++ return two; ++ } ++ else if (sTwo === 'iso8601') { ++ return one; ++ } ++ else { ++ throw new RangeError('irreconcilable calendars'); ++ } ++} ++function CalendarDateFromFields(calendar, fields, options) { ++ const result = calendar.dateFromFields(fields, options); ++ if (!IsTemporalDate(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarYearMonthFromFields(calendar, fields, options) { ++ const result = calendar.yearMonthFromFields(fields, options); ++ if (!IsTemporalYearMonth(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function CalendarMonthDayFromFields(calendar, fields, options) { ++ const result = calendar.monthDayFromFields(fields, options); ++ if (!IsTemporalMonthDay(result)) ++ throw new TypeError('invalid result'); ++ return result; ++} ++function ToTemporalTimeZone(temporalTimeZoneLikeParam) { ++ let temporalTimeZoneLike = temporalTimeZoneLikeParam; ++ if (IsObject(temporalTimeZoneLike)) { ++ if (IsTemporalZonedDateTime(temporalTimeZoneLike)) ++ return GetSlot(temporalTimeZoneLike, TIME_ZONE); ++ if (!('timeZone' in temporalTimeZoneLike)) ++ return temporalTimeZoneLike; ++ temporalTimeZoneLike = temporalTimeZoneLike.timeZone; ++ if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) { ++ return temporalTimeZoneLike; ++ } ++ } ++ const identifier = ToString(temporalTimeZoneLike); ++ const timeZone = ParseTemporalTimeZone(identifier); ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ return new TemporalTimeZone(timeZone); ++} ++function TimeZoneEquals(one, two) { ++ if (one === two) ++ return true; ++ const tz1 = ToString(one); ++ const tz2 = ToString(two); ++ return tz1 === tz2; ++} ++function TemporalDateTimeToDate(dateTime) { ++ return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR)); ++} ++function TemporalDateTimeToTime(dateTime) { ++ const Time = GetIntrinsic('%Temporal.PlainTime%'); ++ return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++} ++function GetOffsetNanosecondsFor(timeZone, instant) { ++ let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor; ++ if (typeof getOffsetNanosecondsFor !== 'function') { ++ throw new TypeError('getOffsetNanosecondsFor not callable'); ++ } ++ const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]); ++ if (typeof offsetNs !== 'number') { ++ throw new TypeError('bad return from getOffsetNanosecondsFor'); ++ } ++ if (!IsInteger(offsetNs) || MathAbs$1(offsetNs) > 86400e9) { ++ throw new RangeError('out-of-range return from getOffsetNanosecondsFor'); ++ } ++ return offsetNs; ++} ++function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) { ++ const offsetNs = GetOffsetNanosecondsFor(timeZone, instant); ++ return FormatTimeZoneOffsetString(offsetNs); ++} ++function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) { ++ const ns = GetSlot(instant, EPOCHNANOSECONDS); ++ const offsetNs = GetOffsetNanosecondsFor(timeZone, instant); ++ let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs)); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++} ++function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) { ++ const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime); ++ return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation); ++} ++function DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) { ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ const numInstants = possibleInstants.length; ++ if (numInstants === 1) ++ return possibleInstants[0]; ++ if (numInstants) { ++ switch (disambiguation) { ++ case 'compatible': ++ // fall through because 'compatible' means 'earlier' for "fall back" transitions ++ case 'earlier': ++ return possibleInstants[0]; ++ case 'later': ++ return possibleInstants[numInstants - 1]; ++ case 'reject': { ++ throw new RangeError('multiple instants found'); ++ } ++ } ++ } ++ const year = GetSlot(dateTime, ISO_YEAR); ++ const month = GetSlot(dateTime, ISO_MONTH); ++ const day = GetSlot(dateTime, ISO_DAY); ++ const hour = GetSlot(dateTime, ISO_HOUR); ++ const minute = GetSlot(dateTime, ISO_MINUTE); ++ const second = GetSlot(dateTime, ISO_SECOND); ++ const millisecond = GetSlot(dateTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(dateTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(dateTime, ISO_NANOSECOND); ++ const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (utcns === null) ++ throw new RangeError('DateTime outside of supported range'); ++ const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS)); ++ const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS)); ++ const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore); ++ const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter); ++ const nanoseconds = offsetAfter - offsetBefore; ++ switch (disambiguation) { ++ case 'earlier': { ++ const calendar = GetSlot(dateTime, CALENDAR); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined); ++ const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar); ++ return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0]; ++ } ++ case 'compatible': ++ // fall through because 'compatible' means 'later' for "spring forward" transitions ++ case 'later': { ++ const calendar = GetSlot(dateTime, CALENDAR); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined); ++ const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar); ++ const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime); ++ return possible[possible.length - 1]; ++ } ++ case 'reject': { ++ throw new RangeError('no such instant found'); ++ } ++ } ++} ++function GetPossibleInstantsFor(timeZone, dateTime) { ++ const possibleInstants = timeZone.getPossibleInstantsFor(dateTime); ++ const result = []; ++ for (const instant of possibleInstants) { ++ if (!IsTemporalInstant(instant)) { ++ throw new TypeError('bad return from getPossibleInstantsFor'); ++ } ++ ArrayPrototypePush$1.call(result, instant); ++ } ++ return result; ++} ++function ISOYearString(year) { ++ let yearString; ++ if (year < 0 || year > 9999) { ++ const sign = year < 0 ? '-' : '+'; ++ const yearNumber = MathAbs$1(year); ++ yearString = sign + `000000${yearNumber}`.slice(-6); ++ } ++ else { ++ yearString = `0000${year}`.slice(-4); ++ } ++ return yearString; ++} ++function ISODateTimePartString(part) { ++ return `00${part}`.slice(-2); ++} ++function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) { ++ if (precision === 'minute') ++ return ''; ++ const secs = `:${ISODateTimePartString(second)}`; ++ let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond; ++ let fraction; ++ if (precision === 'auto') { ++ if (fractionNumber === 0) ++ return secs; ++ fraction = `${fractionNumber}`.padStart(9, '0'); ++ while (fraction[fraction.length - 1] === '0') ++ fraction = fraction.slice(0, -1); ++ } ++ else { ++ if (precision === 0) ++ return secs; ++ fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision); ++ } ++ return `${secs}.${fraction}`; ++} ++function TemporalInstantToString(instant, timeZone, precision) { ++ let outputTimeZone = timeZone; ++ if (outputTimeZone === undefined) { ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ outputTimeZone = new TemporalTimeZone('UTC'); ++ } ++ const iso = GetISO8601Calendar(); ++ const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso); ++ const year = ISOYearString(GetSlot(dateTime, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY)); ++ const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR)); ++ const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE)); ++ const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision); ++ let timeZoneString = 'Z'; ++ if (timeZone !== undefined) { ++ const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant); ++ timeZoneString = FormatISOTimeZoneOffsetString(offsetNs); ++ } ++ return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`; ++} ++function TemporalDurationToString(duration, precision = 'auto', options = undefined) { ++ function formatNumber(num) { ++ if (num <= NumberMaxSafeInteger) ++ return num.toString(10); ++ return JSBI.BigInt(num).toString(10); ++ } ++ const years = GetSlot(duration, YEARS); ++ const months = GetSlot(duration, MONTHS); ++ const weeks = GetSlot(duration, WEEKS); ++ const days = GetSlot(duration, DAYS); ++ const hours = GetSlot(duration, HOURS); ++ const minutes = GetSlot(duration, MINUTES); ++ let seconds = GetSlot(duration, SECONDS); ++ let ms = GetSlot(duration, MILLISECONDS); ++ let µs = GetSlot(duration, MICROSECONDS); ++ let ns = GetSlot(duration, NANOSECONDS); ++ const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ ({ ++ seconds, ++ milliseconds: ms, ++ microseconds: µs, ++ nanoseconds: ns ++ } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode)); ++ } ++ const dateParts = []; ++ if (years) ++ dateParts.push(`${formatNumber(MathAbs$1(years))}Y`); ++ if (months) ++ dateParts.push(`${formatNumber(MathAbs$1(months))}M`); ++ if (weeks) ++ dateParts.push(`${formatNumber(MathAbs$1(weeks))}W`); ++ if (days) ++ dateParts.push(`${formatNumber(MathAbs$1(days))}D`); ++ const timeParts = []; ++ if (hours) ++ timeParts.push(`${formatNumber(MathAbs$1(hours))}H`); ++ if (minutes) ++ timeParts.push(`${formatNumber(MathAbs$1(minutes))}M`); ++ const secondParts = []; ++ let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0); ++ let nsBigInt, µsBigInt, msBigInt, secondsBigInt; ++ ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND)); ++ ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND)); ++ const fraction = MathAbs$1(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs$1(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs$1(JSBI.toNumber(nsBigInt)); ++ let decimalPart; ++ if (precision === 'auto') { ++ if (fraction !== 0) { ++ decimalPart = `${fraction}`.padStart(9, '0'); ++ while (decimalPart[decimalPart.length - 1] === '0') { ++ decimalPart = decimalPart.slice(0, -1); ++ } ++ } ++ } ++ else if (precision !== 0) { ++ decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision); ++ } ++ if (decimalPart) ++ secondParts.unshift('.', decimalPart); ++ if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') { ++ secondParts.unshift(abs(secondsBigInt).toString()); ++ } ++ if (secondParts.length) ++ timeParts.push(`${secondParts.join('')}S`); ++ if (timeParts.length) ++ timeParts.unshift('T'); ++ if (!dateParts.length && !timeParts.length) ++ return 'PT0S'; ++ return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`; ++} ++function TemporalDateToString(date, showCalendar = 'auto') { ++ const year = ISOYearString(GetSlot(date, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(date, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(date, ISO_DAY)); ++ const calendarID = ToString(GetSlot(date, CALENDAR)); ++ const calendar = FormatCalendarAnnotation(calendarID, showCalendar); ++ return `${year}-${month}-${day}${calendar}`; ++} ++function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) { ++ let year = GetSlot(dateTime, ISO_YEAR); ++ let month = GetSlot(dateTime, ISO_MONTH); ++ let day = GetSlot(dateTime, ISO_DAY); ++ let hour = GetSlot(dateTime, ISO_HOUR); ++ let minute = GetSlot(dateTime, ISO_MINUTE); ++ let second = GetSlot(dateTime, ISO_SECOND); ++ let millisecond = GetSlot(dateTime, ISO_MILLISECOND); ++ let microsecond = GetSlot(dateTime, ISO_MICROSECOND); ++ let nanosecond = GetSlot(dateTime, ISO_NANOSECOND); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode)); ++ } ++ const yearString = ISOYearString(year); ++ const monthString = ISODateTimePartString(month); ++ const dayString = ISODateTimePartString(day); ++ const hourString = ISODateTimePartString(hour); ++ const minuteString = ISODateTimePartString(minute); ++ const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision); ++ const calendarID = ToString(GetSlot(dateTime, CALENDAR)); ++ const calendar = FormatCalendarAnnotation(calendarID, showCalendar); ++ return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`; ++} ++function TemporalMonthDayToString(monthDay, showCalendar = 'auto') { ++ const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY)); ++ let resultString = `${month}-${day}`; ++ const calendar = GetSlot(monthDay, CALENDAR); ++ const calendarID = ToString(calendar); ++ if (showCalendar === 'always' || calendarID !== 'iso8601') { ++ const year = ISOYearString(GetSlot(monthDay, ISO_YEAR)); ++ resultString = `${year}-${resultString}`; ++ } ++ const calendarString = FormatCalendarAnnotation(calendarID, showCalendar); ++ if (calendarString) ++ resultString += calendarString; ++ return resultString; ++} ++function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') { ++ const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH)); ++ let resultString = `${year}-${month}`; ++ const calendar = GetSlot(yearMonth, CALENDAR); ++ const calendarID = ToString(calendar); ++ if (showCalendar === 'always' || calendarID !== 'iso8601') { ++ const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY)); ++ resultString += `-${day}`; ++ } ++ const calendarString = FormatCalendarAnnotation(calendarID, showCalendar); ++ if (calendarString) ++ resultString += calendarString; ++ return resultString; ++} ++function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) { ++ let instant = GetSlot(zdt, INSTANT); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ instant = new TemporalInstant(ns); ++ } ++ const tz = GetSlot(zdt, TIME_ZONE); ++ const iso = GetISO8601Calendar(); ++ const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso); ++ const year = ISOYearString(GetSlot(dateTime, ISO_YEAR)); ++ const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH)); ++ const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY)); ++ const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR)); ++ const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE)); ++ const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision); ++ let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`; ++ if (showOffset !== 'never') { ++ const offsetNs = GetOffsetNanosecondsFor(tz, instant); ++ result += FormatISOTimeZoneOffsetString(offsetNs); ++ } ++ if (showTimeZone !== 'never') ++ result += `[${tz}]`; ++ const calendarID = ToString(GetSlot(zdt, CALENDAR)); ++ result += FormatCalendarAnnotation(calendarID, showCalendar); ++ return result; ++} ++function TestTimeZoneOffsetString(string) { ++ return OFFSET.test(StringCtor(string)); ++} ++function ParseTimeZoneOffsetString(string) { ++ const match = OFFSET.exec(StringCtor(string)); ++ if (!match) { ++ throw new RangeError(`invalid time zone offset: ${string}`); ++ } ++ const sign = match[1] === '-' || match[1] === '\u2212' ? -1 : +1; ++ const hours = +match[2]; ++ const minutes = +(match[3] || 0); ++ const seconds = +(match[4] || 0); ++ const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9); ++ return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds); ++} ++function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) { ++ if (TestTimeZoneOffsetString(timeZoneIdentifier)) { ++ const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier); ++ return FormatTimeZoneOffsetString(offsetNs); ++ } ++ const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier)); ++ return formatter.resolvedOptions().timeZone; ++} ++function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) { ++ const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id); ++ const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (utc === null) ++ throw new RangeError('Date outside of supported range'); ++ return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds)); ++} ++function FormatTimeZoneOffsetString(offsetNanosecondsParam) { ++ const sign = offsetNanosecondsParam < 0 ? '-' : '+'; ++ const offsetNanoseconds = MathAbs$1(offsetNanosecondsParam); ++ const nanoseconds = offsetNanoseconds % 1e9; ++ const seconds = MathFloor$1(offsetNanoseconds / 1e9) % 60; ++ const minutes = MathFloor$1(offsetNanoseconds / 60e9) % 60; ++ const hours = MathFloor$1(offsetNanoseconds / 3600e9); ++ const hourString = ISODateTimePartString(hours); ++ const minuteString = ISODateTimePartString(minutes); ++ const secondString = ISODateTimePartString(seconds); ++ let post = ''; ++ if (nanoseconds) { ++ let fraction = `${nanoseconds}`.padStart(9, '0'); ++ while (fraction[fraction.length - 1] === '0') ++ fraction = fraction.slice(0, -1); ++ post = `:${secondString}.${fraction}`; ++ } ++ else if (seconds) { ++ post = `:${secondString}`; ++ } ++ return `${sign}${hourString}:${minuteString}${post}`; ++} ++function FormatISOTimeZoneOffsetString(offsetNanosecondsParam) { ++ let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand')); ++ const sign = offsetNanoseconds < 0 ? '-' : '+'; ++ offsetNanoseconds = MathAbs$1(offsetNanoseconds); ++ const minutes = (offsetNanoseconds / 60e9) % 60; ++ const hours = MathFloor$1(offsetNanoseconds / 3600e9); ++ const hourString = ISODateTimePartString(hours); ++ const minuteString = ISODateTimePartString(minutes); ++ return `${sign}${hourString}:${minuteString}`; ++} ++function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ // Note: Date.UTC() interprets one and two-digit years as being in the ++ // 20th century, so don't use it ++ const legacyDate = new Date(); ++ legacyDate.setUTCHours(hour, minute, second, millisecond); ++ legacyDate.setUTCFullYear(year, month - 1, day); ++ const ms = legacyDate.getTime(); ++ if (NumberIsNaN(ms)) ++ return null; ++ let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION); ++ ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND)); ++ ns = JSBI.add(ns, JSBI.BigInt(nanosecond)); ++ if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX)) ++ return null; ++ return ns; ++} ++function GetISOPartsFromEpoch(epochNanoseconds) { ++ const { quotient, remainder } = divmod(epochNanoseconds, MILLION); ++ let epochMilliseconds = JSBI.toNumber(quotient); ++ let nanos = JSBI.toNumber(remainder); ++ if (nanos < 0) { ++ nanos += 1e6; ++ epochMilliseconds -= 1; ++ } ++ const microsecond = MathFloor$1(nanos / 1e3) % 1e3; ++ const nanosecond = nanos % 1e3; ++ const item = new Date(epochMilliseconds); ++ const year = item.getUTCFullYear(); ++ const month = item.getUTCMonth() + 1; ++ const day = item.getUTCDate(); ++ const hour = item.getUTCHours(); ++ const minute = item.getUTCMinutes(); ++ const second = item.getUTCSeconds(); ++ const millisecond = item.getUTCMilliseconds(); ++ return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++// ts-prune-ignore-next TODO: remove this after tests are converted to TS ++function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) { ++ const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds); ++ const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds); ++ return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function maxJSBI(one, two) { ++ return JSBI.lessThan(one, two) ? two : one; ++} ++/** ++ * Our best guess at how far in advance new rules will be put into the TZDB for ++ * future offset transitions. We'll pick 10 years but can always revise it if ++ * we find that countries are being unusually proactive in their announcing ++ * of offset changes. ++ */ ++function afterLatestPossibleTzdbRuleChange() { ++ return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS); ++} ++function GetIANATimeZoneNextTransition(epochNanoseconds, id) { ++ // Decide how far in the future after `epochNanoseconds` we'll look for an ++ // offset change. There are two cases: ++ // 1. If it's a past date (or a date in the near future) then it's possible ++ // that the time zone may have newly added DST in the next few years. So ++ // we'll have to look from the provided time until a few years after the ++ // current system time. (Changes to DST policy are usually announced a few ++ // years in the future.) Note that the first DST anywhere started in 1847, ++ // so we'll start checks in 1847 instead of wasting cycles on years where ++ // there will never be transitions. ++ // 2. If it's a future date beyond the next few years, then we'll just assume ++ // that the latest DST policy in TZDB will still be in effect. In this ++ // case, we only need to look one year in the future to see if there are ++ // any DST transitions. We actually only need to look 9-10 months because ++ // DST has two transitions per year, but we'll use a year just to be safe. ++ const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS); ++ const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater); ++ // The first transition (in any timezone) recorded in the TZDB was in 1847, so ++ // start there if an earlier date is supplied. ++ let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds); ++ const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id); ++ let rightNanos = leftNanos; ++ let rightOffsetNs = leftOffsetNs; ++ while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) { ++ rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS); ++ rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id); ++ if (leftOffsetNs === rightOffsetNs) { ++ leftNanos = rightNanos; ++ } ++ } ++ if (leftOffsetNs === rightOffsetNs) ++ return null; ++ const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs); ++ return result; ++} ++function GetIANATimeZonePreviousTransition(epochNanoseconds, id) { ++ // If a time zone uses DST (at the time of `epochNanoseconds`), then we only ++ // have to look back one year to find a transition. But if it doesn't use DST, ++ // then we need to look all the way back to 1847 (the earliest rule in the ++ // TZDB) to see if it had other offset transitions in the past. Looping back ++ // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is ++ // also unnecessary because DST rules aren't put into the TZDB more than a few ++ // years in the future because the political changes in time zones happen with ++ // only a few years' warning. Therefore, if a far-future date is provided, ++ // then we'll run the check in two parts: ++ // 1. First, we'll look back for up to one year to see if the latest TZDB ++ // rules have DST. ++ // 2. If not, then we'll "fast-reverse" back to a few years later than the ++ // current system time, and then look back to 1847. This reduces the ++ // worst-case loop from 273K years to 175 years, for a ~1500x improvement ++ // in worst-case perf. ++ const afterLatestRule = afterLatestPossibleTzdbRuleChange(); ++ const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule); ++ const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION; ++ let rightNanos = JSBI.subtract(epochNanoseconds, ONE); ++ const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id); ++ let leftNanos = rightNanos; ++ let leftOffsetNs = rightOffsetNs; ++ while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) { ++ leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS); ++ leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id); ++ if (rightOffsetNs === leftOffsetNs) { ++ rightNanos = leftNanos; ++ } ++ } ++ if (rightOffsetNs === leftOffsetNs) { ++ if (isFarFuture) { ++ // There was no DST after looking back one year, which means that the most ++ // recent TZDB rules don't have any recurring transitions. To check for ++ // transitions in older rules, back up to a few years after the current ++ // date and then look all the way back to 1847. Note that we move back one ++ // day from the latest possible rule so that when the recursion runs it ++ // won't consider the new time to be "far future" because the system clock ++ // has advanced in the meantime. ++ const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS); ++ return GetIANATimeZonePreviousTransition(newTimeToCheck, id); ++ } ++ return null; ++ } ++ const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs); ++ return result; ++} ++// ts-prune-ignore-next TODO: remove this after tests are converted to TS ++function parseFromEnUsFormat(datetime) { ++ const parts = datetime.split(/[^\w]+/); ++ if (parts.length !== 7) { ++ throw new RangeError(`expected 7 parts in "${datetime}`); ++ } ++ const month = +parts[0]; ++ const day = +parts[1]; ++ let year = +parts[2]; ++ const era = parts[3].toUpperCase(); ++ if (era === 'B' || era === 'BC') { ++ year = -year + 1; ++ } ++ else if (era !== 'A' && era !== 'AD') { ++ throw new RangeError(`Unknown era ${era} in "${datetime}`); ++ } ++ let hour = +parts[4]; ++ if (hour === 24) { ++ // bugs.chromium.org/p/chromium/issues/detail?id=1045791 ++ hour = 0; ++ } ++ const minute = +parts[5]; ++ const second = +parts[6]; ++ if (!NumberIsFinite(year) || ++ !NumberIsFinite(month) || ++ !NumberIsFinite(day) || ++ !NumberIsFinite(hour) || ++ !NumberIsFinite(minute) || ++ !NumberIsFinite(second)) { ++ throw new RangeError(`Invalid number in "${datetime}`); ++ } ++ return { year, month, day, hour, minute, second }; ++} ++// ts-prune-ignore-next TODO: remove this after tests are converted to TS ++function GetFormatterParts(timeZone, epochMilliseconds) { ++ const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone); ++ // Using `format` instead of `formatToParts` for compatibility with older clients ++ const datetime = formatter.format(new Date(epochMilliseconds)); ++ return parseFromEnUsFormat(datetime); ++} ++function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (ns === null) ++ throw new RangeError('DateTime outside of supported range'); ++ let nsEarlier = JSBI.subtract(ns, DAY_NANOS); ++ if (JSBI.lessThan(nsEarlier, NS_MIN)) ++ nsEarlier = ns; ++ let nsLater = JSBI.add(ns, DAY_NANOS); ++ if (JSBI.greaterThan(nsLater, NS_MAX)) ++ nsLater = ns; ++ const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id); ++ const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id); ++ const found = earliest === latest ? [earliest] : [earliest, latest]; ++ return found ++ .map((offsetNanoseconds) => { ++ const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds)); ++ const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id); ++ if (year !== parts.year || ++ month !== parts.month || ++ day !== parts.day || ++ hour !== parts.hour || ++ minute !== parts.minute || ++ second !== parts.second || ++ millisecond !== parts.millisecond || ++ microsecond !== parts.microsecond || ++ nanosecond !== parts.nanosecond) { ++ return undefined; ++ } ++ return epochNanoseconds; ++ }) ++ .filter((x) => x !== undefined); ++} ++function LeapYear(year) { ++ if (undefined === year) ++ return false; ++ const isDiv4 = year % 4 === 0; ++ const isDiv100 = year % 100 === 0; ++ const isDiv400 = year % 400 === 0; ++ return isDiv4 && (!isDiv100 || isDiv400); ++} ++function ISODaysInMonth(year, month) { ++ const DoM = { ++ standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], ++ leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ++ }; ++ return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1]; ++} ++function DayOfWeek(year, month, day) { ++ const m = month + (month < 3 ? 10 : -2); ++ const Y = year - (month < 3 ? 1 : 0); ++ const c = MathFloor$1(Y / 100); ++ const y = Y - c * 100; ++ const d = day; ++ const pD = d; ++ const pM = MathFloor$1(2.6 * m - 0.2); ++ const pY = y + MathFloor$1(y / 4); ++ const pC = MathFloor$1(c / 4) - 2 * c; ++ const dow = (pD + pM + pY + pC) % 7; ++ return dow + (dow <= 0 ? 7 : 0); ++} ++function DayOfYear(year, month, day) { ++ let days = day; ++ for (let m = month - 1; m > 0; m--) { ++ days += ISODaysInMonth(year, m); ++ } ++ return days; ++} ++function WeekOfYear(year, month, day) { ++ const doy = DayOfYear(year, month, day); ++ const dow = DayOfWeek(year, month, day) || 7; ++ const doj = DayOfWeek(year, 1, 1); ++ const week = MathFloor$1((doy - dow + 10) / 7); ++ if (week < 1) { ++ if (doj === 5 || (doj === 6 && LeapYear(year - 1))) { ++ return 53; ++ } ++ else { ++ return 52; ++ } ++ } ++ if (week === 53) { ++ if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) { ++ return 1; ++ } ++ } ++ return week; ++} ++function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) { ++ for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) { ++ if (prop !== 0) ++ return prop < 0 ? -1 : 1; ++ } ++ return 0; ++} ++function BalanceISOYearMonth(yearParam, monthParam) { ++ let year = yearParam; ++ let month = monthParam; ++ if (!NumberIsFinite(year) || !NumberIsFinite(month)) ++ throw new RangeError('infinity is out of range'); ++ month -= 1; ++ year += MathFloor$1(month / 12); ++ month %= 12; ++ if (month < 0) ++ month += 12; ++ month += 1; ++ return { year, month }; ++} ++function BalanceISODate(yearParam, monthParam, dayParam) { ++ let year = yearParam; ++ let month = monthParam; ++ let day = dayParam; ++ if (!NumberIsFinite(day)) ++ throw new RangeError('infinity is out of range'); ++ ({ year, month } = BalanceISOYearMonth(year, month)); ++ let daysInYear = 0; ++ let testYear = month > 2 ? year : year - 1; ++ while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) { ++ year -= 1; ++ testYear -= 1; ++ day += daysInYear; ++ } ++ testYear += 1; ++ while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) { ++ year += 1; ++ testYear += 1; ++ day -= daysInYear; ++ } ++ while (day < 1) { ++ ({ year, month } = BalanceISOYearMonth(year, month - 1)); ++ day += ISODaysInMonth(year, month); ++ } ++ while (day > ISODaysInMonth(year, month)) { ++ day -= ISODaysInMonth(year, month); ++ ({ year, month } = BalanceISOYearMonth(year, month + 1)); ++ } ++ return { year, month, day }; ++} ++function BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam); ++ const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays); ++ return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ let hour = hourParam; ++ let minute = minuteParam; ++ let second = secondParam; ++ let millisecond = millisecondParam; ++ let microsecond = microsecondParam; ++ let nanosecond = nanosecondParam; ++ if (!NumberIsFinite(hour) || ++ !NumberIsFinite(minute) || ++ !NumberIsFinite(second) || ++ !NumberIsFinite(millisecond) || ++ !NumberIsFinite(microsecond) || ++ !NumberIsFinite(nanosecond)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ microsecond += MathFloor$1(nanosecond / 1000); ++ nanosecond = NonNegativeModulo(nanosecond, 1000); ++ millisecond += MathFloor$1(microsecond / 1000); ++ microsecond = NonNegativeModulo(microsecond, 1000); ++ second += MathFloor$1(millisecond / 1000); ++ millisecond = NonNegativeModulo(millisecond, 1000); ++ minute += MathFloor$1(second / 60); ++ second = NonNegativeModulo(second, 60); ++ hour += MathFloor$1(minute / 60); ++ minute = NonNegativeModulo(minute, 60); ++ const deltaDays = MathFloor$1(hour / 24); ++ hour = NonNegativeModulo(hour, 24); ++ return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) { ++ const days = JSBI.BigInt(daysParam); ++ let nanoseconds = JSBI.BigInt(nanosecondsParam); ++ if (daysParam !== 0) ++ nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift)); ++ const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24))); ++ const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY)); ++ const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY)); ++ const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND)); ++ const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND)); ++ return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND)); ++} ++function NanosecondsToDays(nanosecondsParam, relativeTo) { ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const sign = MathSign(JSBI.toNumber(nanosecondsParam)); ++ let nanoseconds = JSBI.BigInt(nanosecondsParam); ++ let dayLengthNs = 86400e9; ++ if (sign === 0) ++ return { days: 0, nanoseconds: ZERO, dayLengthNs }; ++ if (!IsTemporalZonedDateTime(relativeTo)) { ++ let days; ++ ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs))); ++ return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs }; ++ } ++ const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS); ++ const start = GetSlot(relativeTo, INSTANT); ++ const endNs = JSBI.add(startNs, nanoseconds); ++ const end = new TemporalInstant(endNs); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ // Find the difference in days only. ++ const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar); ++ const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar); ++ let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate$2(null)); ++ let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0); ++ // may disambiguate ++ // If clock time after addition was in the middle of a skipped period, the ++ // endpoint was disambiguated to a later clock time. So it's possible that ++ // the resulting disambiguated result is later than endNs. If so, then back ++ // up one day and try again. Repeat if necessary (some transitions are ++ // > 24 hours) until either there's zero days left or the date duration is ++ // back inside the period where it belongs. Note that this case only can ++ // happen for positive durations because the only direction that ++ // `disambiguation: 'compatible'` can change clock time is forwards. ++ if (sign === 1) { ++ while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) { ++ --days; ++ intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0); ++ // may do disambiguation ++ } ++ } ++ nanoseconds = JSBI.subtract(endNs, intermediateNs); ++ let isOverflow = false; ++ let relativeInstant = new TemporalInstant(intermediateNs); ++ do { ++ // calculate length of the next day (day that contains the time remainder) ++ const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0); ++ const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS); ++ dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs)); ++ isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO); ++ if (isOverflow) { ++ nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)); ++ relativeInstant = new TemporalInstant(oneDayFartherNs); ++ days += sign; ++ } ++ } while (isOverflow); ++ return { days, nanoseconds, dayLengthNs: MathAbs$1(dayLengthNs) }; ++} ++function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) { ++ let days = daysParam; ++ let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt; ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam); ++ const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS); ++ nanosecondsBigInt = JSBI.subtract(endNs, startNs); ++ } ++ else { ++ nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0); ++ } ++ if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') { ++ ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo)); ++ } ++ else { ++ days = 0; ++ } ++ const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1; ++ nanosecondsBigInt = abs(nanosecondsBigInt); ++ microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO; ++ switch (largestUnit) { ++ case 'year': ++ case 'month': ++ case 'week': ++ case 'day': ++ case 'hour': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND)); ++ ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY)); ++ ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY)); ++ break; ++ case 'minute': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND)); ++ ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY)); ++ break; ++ case 'second': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND)); ++ break; ++ case 'millisecond': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND)); ++ break; ++ case 'microsecond': ++ ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND)); ++ break; ++ case 'nanosecond': ++ break; ++ default: ++ throw new Error('assert not reached'); ++ } ++ const hours = JSBI.toNumber(hoursBigInt) * sign; ++ const minutes = JSBI.toNumber(minutesBigInt) * sign; ++ const seconds = JSBI.toNumber(secondsBigInt) * sign; ++ const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign; ++ const microseconds = JSBI.toNumber(microsecondsBigInt) * sign; ++ const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign; ++ return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ let calendar; ++ let relativeTo; ++ if (relativeToParam) { ++ relativeTo = ToTemporalDate(relativeToParam); ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ const oneYear = new TemporalDuration(sign); ++ const oneMonth = new TemporalDuration(0, sign); ++ const oneWeek = new TemporalDuration(0, 0, sign); ++ switch (largestUnit) { ++ case 'year': ++ // no-op ++ break; ++ case 'month': ++ { ++ if (!calendar) ++ throw new RangeError('a starting point is required for months balancing'); ++ // balance years down to months ++ const dateAdd = calendar.dateAdd; ++ const dateUntil = calendar.dateUntil; ++ let relativeToDateOnly = relativeTo; ++ while (MathAbs$1(years) > 0) { ++ const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd); ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil); ++ const oneYearMonths = GetSlot(untilResult, MONTHS); ++ relativeToDateOnly = newRelativeTo; ++ months += oneYearMonths; ++ years -= sign; ++ } ++ } ++ break; ++ case 'week': ++ if (!calendar) ++ throw new RangeError('a starting point is required for weeks balancing'); ++ // balance years down to days ++ while (MathAbs$1(years) > 0) { ++ let oneYearDays; ++ ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ days += oneYearDays; ++ years -= sign; ++ } ++ // balance months down to days ++ while (MathAbs$1(months) > 0) { ++ let oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ days += oneMonthDays; ++ months -= sign; ++ } ++ break; ++ default: ++ // balance years down to days ++ while (MathAbs$1(years) > 0) { ++ if (!calendar) ++ throw new RangeError('a starting point is required for balancing calendar units'); ++ let oneYearDays; ++ ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ days += oneYearDays; ++ years -= sign; ++ } ++ // balance months down to days ++ while (MathAbs$1(months) > 0) { ++ if (!calendar) ++ throw new RangeError('a starting point is required for balancing calendar units'); ++ let oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ days += oneMonthDays; ++ months -= sign; ++ } ++ // balance weeks down to days ++ while (MathAbs$1(weeks) > 0) { ++ if (!calendar) ++ throw new RangeError('a starting point is required for balancing calendar units'); ++ let oneWeekDays; ++ ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ days += oneWeekDays; ++ weeks -= sign; ++ } ++ break; ++ } ++ return { years, months, weeks, days }; ++} ++function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ if (sign === 0) ++ return { years, months, weeks, days }; ++ let calendar; ++ let relativeTo; ++ if (relativeToParam) { ++ relativeTo = ToTemporalDate(relativeToParam); ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ const oneYear = new TemporalDuration(sign); ++ const oneMonth = new TemporalDuration(0, sign); ++ const oneWeek = new TemporalDuration(0, 0, sign); ++ switch (largestUnit) { ++ case 'year': { ++ if (!calendar) ++ throw new RangeError('a starting point is required for years balancing'); ++ // balance days up to years ++ let newRelativeTo, oneYearDays; ++ ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ while (MathAbs$1(days) >= MathAbs$1(oneYearDays)) { ++ days -= oneYearDays; ++ years += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear)); ++ } ++ // balance days up to months ++ let oneMonthDays; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ days -= oneMonthDays; ++ months += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ } ++ // balance months up to years ++ const dateAdd = calendar.dateAdd; ++ newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd); ++ const dateUntil = calendar.dateUntil; ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil); ++ let oneYearMonths = GetSlot(untilResult, MONTHS); ++ while (MathAbs$1(months) >= MathAbs$1(oneYearMonths)) { ++ months -= oneYearMonths; ++ years += sign; ++ relativeTo = newRelativeTo; ++ newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd); ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil); ++ oneYearMonths = GetSlot(untilResult, MONTHS); ++ } ++ break; ++ } ++ case 'month': { ++ if (!calendar) ++ throw new RangeError('a starting point is required for months balancing'); ++ // balance days up to months ++ let newRelativeTo, oneMonthDays; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ days -= oneMonthDays; ++ months += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ } ++ break; ++ } ++ case 'week': { ++ if (!calendar) ++ throw new RangeError('a starting point is required for weeks balancing'); ++ // balance days up to weeks ++ let newRelativeTo, oneWeekDays; ++ ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ while (MathAbs$1(days) >= MathAbs$1(oneWeekDays)) { ++ days -= oneWeekDays; ++ weeks += sign; ++ relativeTo = newRelativeTo; ++ ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ } ++ break; ++ } ++ } ++ return { years, months, weeks, days }; ++} ++function CalculateOffsetShift(relativeTo, y, mon, w, d) { ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ const instant = GetSlot(relativeTo, INSTANT); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant); ++ const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const instantAfter = new TemporalInstant(after); ++ const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter); ++ return offsetAfter - offsetBefore; ++ } ++ return 0; ++} ++function CreateNegatedTemporalDuration(duration) { ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS)); ++} ++function ConstrainToRange(value, min, max) { ++ // Math.Max accepts undefined values and returns NaN. Undefined values are ++ // used for optional params in the method below. ++ return MathMin(max, MathMax(min, value)); ++} ++function ConstrainISODate(year, monthParam, dayParam) { ++ const month = ConstrainToRange(monthParam, 1, 12); ++ const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month)); ++ return { year, month, day }; ++} ++function ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ const hour = ConstrainToRange(hourParam, 0, 23); ++ const minute = ConstrainToRange(minuteParam, 0, 59); ++ const second = ConstrainToRange(secondParam, 0, 59); ++ const millisecond = ConstrainToRange(millisecondParam, 0, 999); ++ const microsecond = ConstrainToRange(microsecondParam, 0, 999); ++ const nanosecond = ConstrainToRange(nanosecondParam, 0, 999); ++ return { hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function RejectToRange(value, min, max) { ++ if (value < min || value > max) ++ throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`); ++} ++function RejectISODate(year, month, day) { ++ RejectToRange(month, 1, 12); ++ RejectToRange(day, 1, ISODaysInMonth(year, month)); ++} ++function RejectDateRange(year, month, day) { ++ // Noon avoids trouble at edges of DateTime range (excludes midnight) ++ RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0); ++} ++function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectToRange(hour, 0, 23); ++ RejectToRange(minute, 0, 59); ++ RejectToRange(second, 0, 59); ++ RejectToRange(millisecond, 0, 999); ++ RejectToRange(microsecond, 0, 999); ++ RejectToRange(nanosecond, 0, 999); ++} ++function RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectISODate(year, month, day); ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectToRange(year, YEAR_MIN, YEAR_MAX); ++ // Reject any DateTime 24 hours or more outside the Instant range ++ if ((year === YEAR_MIN && ++ null == ++ GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) || ++ (year === YEAR_MAX && ++ null == ++ GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) { ++ throw new RangeError('DateTime outside of supported range'); ++ } ++} ++function ValidateEpochNanoseconds(epochNanoseconds) { ++ if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) { ++ throw new RangeError('Instant outside of supported range'); ++ } ++} ++function RejectYearMonthRange(year, month) { ++ RejectToRange(year, YEAR_MIN, YEAR_MAX); ++ if (year === YEAR_MIN) { ++ RejectToRange(month, 4, 12); ++ } ++ else if (year === YEAR_MAX) { ++ RejectToRange(month, 1, 9); ++ } ++} ++function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) { ++ const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns); ++ for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) { ++ if (!NumberIsFinite(prop)) ++ throw new RangeError('infinite values not allowed as duration fields'); ++ const propSign = MathSign(prop); ++ if (propSign !== 0 && propSign !== sign) ++ throw new RangeError('mixed-sign values not allowed as duration fields'); ++ } ++} ++function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) { ++ switch (largestUnit) { ++ case 'year': ++ case 'month': { ++ const sign = -CompareISODate(y1, m1, d1, y2, m2, d2); ++ if (sign === 0) ++ return { years: 0, months: 0, weeks: 0, days: 0 }; ++ const start = { year: y1, month: m1, day: d1 }; ++ const end = { year: y2, month: m2, day: d2 }; ++ let years = end.year - start.year; ++ let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain'); ++ let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2); ++ if (midSign === 0) { ++ return largestUnit === 'year' ++ ? { years, months: 0, weeks: 0, days: 0 } ++ : { years: 0, months: years * 12, weeks: 0, days: 0 }; ++ } ++ let months = end.month - start.month; ++ if (midSign !== sign) { ++ years -= sign; ++ months += sign * 12; ++ } ++ mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain'); ++ midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2); ++ if (midSign === 0) { ++ return largestUnit === 'year' ++ ? { years, months, weeks: 0, days: 0 } ++ : { years: 0, months: months + years * 12, weeks: 0, days: 0 }; ++ } ++ if (midSign !== sign) { ++ // The end date is later in the month than mid date (or earlier for ++ // negative durations). Back up one month. ++ months -= sign; ++ if (months === -sign) { ++ years -= sign; ++ months = 11 * sign; ++ } ++ mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain'); ++ } ++ let days = 0; ++ // If we get here, months and years are correct (no overflow), and `mid` ++ // is within the range from `start` to `end`. To count the days between ++ // `mid` and `end`, there are 3 cases: ++ // 1) same month: use simple subtraction ++ // 2) end is previous month from intermediate (negative duration) ++ // 3) end is next month from intermediate (positive duration) ++ if (mid.month === end.month) { ++ // 1) same month: use simple subtraction ++ days = end.day - mid.day; ++ } ++ else if (sign < 0) { ++ // 2) end is previous month from intermediate (negative duration) ++ // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2 ++ days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day); ++ } ++ else { ++ // 3) end is next month from intermediate (positive duration) ++ // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3 ++ days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day); ++ } ++ if (largestUnit === 'month') { ++ months += years * 12; ++ years = 0; ++ } ++ return { years, months, weeks: 0, days }; ++ } ++ case 'week': ++ case 'day': { ++ let larger, smaller, sign; ++ if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) { ++ smaller = { year: y1, month: m1, day: d1 }; ++ larger = { year: y2, month: m2, day: d2 }; ++ sign = 1; ++ } ++ else { ++ smaller = { year: y2, month: m2, day: d2 }; ++ larger = { year: y1, month: m1, day: d1 }; ++ sign = -1; ++ } ++ let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day); ++ for (let year = smaller.year; year < larger.year; ++year) { ++ days += LeapYear(year) ? 366 : 365; ++ } ++ let weeks = 0; ++ if (largestUnit === 'week') { ++ weeks = MathFloor$1(days / 7); ++ days %= 7; ++ } ++ weeks *= sign; ++ days *= sign; ++ return { years: 0, months: 0, weeks, days }; ++ } ++ default: ++ throw new Error('assert not reached'); ++ } ++} ++function DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) { ++ let hours = h2 - h1; ++ let minutes = min2 - min1; ++ let seconds = s2 - s1; ++ let milliseconds = ms2 - ms1; ++ let microseconds = µs2 - µs1; ++ let nanoseconds = ns2 - ns1; ++ const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ hours *= sign; ++ minutes *= sign; ++ seconds *= sign; ++ milliseconds *= sign; ++ microseconds *= sign; ++ nanoseconds *= sign; ++ let deltaDays = 0; ++ ({ ++ deltaDays, ++ hour: hours, ++ minute: minutes, ++ second: seconds, ++ millisecond: milliseconds, ++ microsecond: microseconds, ++ nanosecond: nanoseconds ++ } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds)); ++ if (deltaDays != 0) ++ throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0'); ++ hours *= sign; ++ minutes *= sign; ++ seconds *= sign; ++ milliseconds *= sign; ++ microseconds *= sign; ++ nanoseconds *= sign; ++ return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function DifferenceInstant(ns1, ns2, increment, unit, roundingMode) { ++ const diff = JSBI.subtract(ns2, ns1); ++ const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9)); ++ const wholeDays = JSBI.subtract(diff, remainder); ++ const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode); ++ const roundedDiff = JSBI.add(wholeDays, roundedRemainder); ++ const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND)); ++ const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND)); ++ const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND)); ++ const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION)); ++ return { seconds, milliseconds, microseconds, nanoseconds }; ++} ++function DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) { ++ let y1 = y1Param; ++ let mon1 = mon1Param; ++ let d1 = d1Param; ++ let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2); ++ const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1); ++ if (dateSign === -timeSign) { ++ ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ } ++ const date1 = CreateTemporalDate(y1, mon1, d1, calendar); ++ const date2 = CreateTemporalDate(y2, mon2, d2, calendar); ++ const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit); ++ const untilOptions = MergeLargestUnitOption(options, dateLargestUnit); ++ // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped? ++ // Type 'SmallestUnit | undefined' is not assignable to type ++ // 'SmallestUnit<"year" | "month" | "day" | "week"> | undefined'. ++ // Type '"hour"' is not assignable to type ++ // 'SmallestUnit<"year" | "month" | "day" | "week"> | undefined'.ts(2345) ++ let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions); ++ // Signs of date part and time part may not agree; balance them together ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) { ++ const nsDiff = JSBI.subtract(ns2, ns1); ++ if (JSBI.equal(nsDiff, ZERO)) { ++ return { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0, ++ hours: 0, ++ minutes: 0, ++ seconds: 0, ++ milliseconds: 0, ++ microseconds: 0, ++ nanoseconds: 0 ++ }; ++ } ++ // Find the difference in dates only. ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const start = new TemporalInstant(ns1); ++ const end = new TemporalInstant(ns2); ++ const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar); ++ const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar); ++ let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options); ++ const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0); ++ // may disambiguate ++ let timeRemainderNs = JSBI.subtract(ns2, intermediateNs); ++ const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar); ++ ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate)); ++ // Finally, merge the date and time durations and return the merged result. ++ const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++// TODO: does it make sense to explicitly union the other and options types for each operation? ++function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) { ++ const other = ToTemporalInstant(otherParam); ++ let first, second; ++ if (operation === 'until') { ++ [first, second] = [instant, other]; ++ } ++ else { ++ [first, second] = [other, instant]; ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ const MAX_DIFFERENCE_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false); ++ const onens = GetSlot(first, EPOCHNANOSECONDS); ++ const twons = GetSlot(second, EPOCHNANOSECONDS); ++ let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode); ++ let hours, minutes; ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++} ++function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalDate(otherParam); ++ const calendar = GetSlot(plainDate, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarId = ToString(calendar); ++ const otherCalendarId = ToString(otherCalendar); ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false); ++ const untilOptions = MergeLargestUnitOption(options, largestUnit); ++ let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions); ++ if (smallestUnit !== 'day' || roundingIncrement !== 1) { ++ ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate)); ++ } ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0); ++} ++function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalDateTime(otherParam); ++ const calendar = GetSlot(plainDateTime, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarId = ToString(calendar); ++ const otherCalendarId = ToString(otherCalendar); ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options); ++ const relativeTo = TemporalDateTimeToDate(plainDateTime); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo)); ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++} ++function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalTime(otherParam); ++ const options = GetOptionsObject(optionsParam); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = 'hour'; ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond'); ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const MAX_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false); ++ let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++} ++function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalYearMonth(otherParam); ++ const calendar = GetSlot(yearMonth, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarID = ToString(calendar); ++ const otherCalendarID = ToString(otherCalendar); ++ if (calendarID !== otherCalendarID) { ++ throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => { ++ if (c === 'date' && s !== 'week' && s !== 'day') ++ allowed.push(s, p); ++ return allowed; ++ }, []); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month'); ++ if (smallestUnit === 'week' || smallestUnit === 'day') { ++ throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`); ++ } ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'week' || largestUnit === 'day') { ++ throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`); ++ } ++ if (largestUnit === 'auto') ++ largestUnit = 'year'; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const otherFields = PrepareTemporalFields(other, fieldNames, []); ++ otherFields.day = 1; ++ const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []); ++ thisFields.day = 1; ++ // The calls to PrepareTemporalFields don't mark day as a required property, ++ // and TS doesn't automatically narrow the type of the object because of the ++ // assignments above, so we must "cast" the inputs. ++ const otherDate = CalendarDateFromFields(calendar, otherFields); ++ const thisDate = CalendarDateFromFields(calendar, thisFields); ++ const untilOptions = MergeLargestUnitOption(options, largestUnit); ++ let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions); ++ if (smallestUnit !== 'month' || roundingIncrement !== 1) { ++ ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate)); ++ } ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0); ++} ++function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) { ++ const sign = operation === 'since' ? -1 : 1; ++ const other = ToTemporalZonedDateTime(otherParam); ++ const calendar = GetSlot(zonedDateTime, CALENDAR); ++ const otherCalendar = GetSlot(other, CALENDAR); ++ const calendarId = ToString(calendar); ++ const otherCalendarId = ToString(otherCalendar); ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`); ++ } ++ const options = GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond'); ++ const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ let roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') ++ roundingMode = NegateTemporalRoundingMode(roundingMode); ++ const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS); ++ const ns2 = GetSlot(other, EPOCHNANOSECONDS); ++ let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds; ++ if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') { ++ // The user is only asking for a time difference, so return difference of instants. ++ years = 0; ++ months = 0; ++ weeks = 0; ++ days = 0; ++ ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, ++ // TODO this doesn't type-check as it includes >= day-size units ++ // This is probably safe as the typing for ToSmallestTemporalUnit isn't ++ // very good. ++ smallestUnit, roundingMode)); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ } ++ else { ++ const timeZone = GetSlot(zonedDateTime, TIME_ZONE); ++ if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) { ++ throw new RangeError("When calculating difference between time zones, largestUnit must be 'hours' " + ++ 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'); ++ } ++ const untilOptions = MergeLargestUnitOption(options, largestUnit); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime)); ++ } ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++} ++function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) { ++ let year = yearParam; ++ let month = monthParam; ++ let day = dayParam; ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ year += years; ++ month += months; ++ ({ year, month } = BalanceISOYearMonth(year, month)); ++ ({ year, month, day } = RegulateISODate(year, month, day, overflow)); ++ days += 7 * weeks; ++ day += days; ++ ({ year, month, day } = BalanceISODate(year, month, day)); ++ return { year, month, day }; ++} ++function AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) { ++ let hour = hourParam; ++ let minute = minuteParam; ++ let second = secondParam; ++ let millisecond = millisecondParam; ++ let microsecond = microsecondParam; ++ let nanosecond = nanosecondParam; ++ hour += hours; ++ minute += minutes; ++ second += seconds; ++ millisecond += milliseconds; ++ microsecond += microseconds; ++ nanosecond += nanoseconds; ++ let deltaDays = 0; ++ ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond)); ++ return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) { ++ const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1); ++ const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2); ++ const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2); ++ let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds; ++ if (!relativeTo) { ++ if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') { ++ throw new RangeError('relativeTo is required for years, months, or weeks arithmetic'); ++ } ++ years = months = weeks = 0; ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit)); ++ } ++ else if (IsTemporalDate(relativeTo)) { ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0); ++ const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0); ++ const dateAdd = calendar.dateAdd; ++ const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd); ++ const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd); ++ const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit); ++ const differenceOptions = ObjectCreate$2(null); ++ differenceOptions.largestUnit = dateLargestUnit; ++ ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions)); ++ // Signs of date part and time part may not agree; balance them together ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit)); ++ } ++ else { ++ // relativeTo is a ZonedDateTime ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1); ++ const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2); ++ if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') { ++ // The user is only asking for a time difference, so return difference of instants. ++ years = 0; ++ months = 0; ++ weeks = 0; ++ days = 0; ++ ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand')); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit)); ++ } ++ else { ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate$2(null))); ++ } ++ } ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) { ++ let sum = ZERO; ++ sum = JSBI.add(sum, JSBI.BigInt(ns)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9))); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9))); ++ const result = JSBI.add(epochNanoseconds, sum); ++ ValidateEpochNanoseconds(result); ++ return result; ++} ++function AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) { ++ let days = daysParam; ++ // Add the time part ++ let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ days += deltaDays; ++ // Delegate the date part addition to the calendar ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ const datePart = CreateTemporalDate(year, month, day, calendar); ++ const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options); ++ return { ++ year: GetSlot(addedDate, ISO_YEAR), ++ month: GetSlot(addedDate, ISO_MONTH), ++ day: GetSlot(addedDate, ISO_DAY), ++ hour, ++ minute, ++ second, ++ millisecond, ++ microsecond, ++ nanosecond ++ }; ++} ++function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) { ++ // If only time is to be added, then use Instant math. It's not OK to fall ++ // through to the date/time code below because compatible disambiguation in ++ // the PlainDateTime=>Instant conversion will change the offset of any ++ // ZonedDateTime in the repeated clock time after a backwards transition. ++ // When adding/subtracting time units and not dates, this disambiguation is ++ // not expected and so is avoided below via a fast path for time-only ++ // arithmetic. ++ // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`. ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) { ++ return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns); ++ } ++ // RFC 5545 requires the date portion to be added in calendar days and the ++ // time portion to be added in exact time. ++ const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar); ++ const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar); ++ const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options); ++ const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar); ++ // Note that 'compatible' is used below because this disambiguation behavior ++ // is required by RFC 5545. ++ const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible'); ++ return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns); ++} ++function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other); ++ const options = GetOptionsObject(optionsParam); ++ const relativeTo = ToRelativeTemporalObject(options); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo)); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++} ++function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [ ++ 'years', ++ 'months', ++ 'weeks', ++ 'days' ++ ]); ++ const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ return new Instant(ns); ++} ++function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike); ++ const options = GetOptionsObject(optionsParam); ++ const calendar = GetSlot(dateTime, CALENDAR); ++ const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++} ++function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike); ++ let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject')); ++ const PlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++} ++function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) { ++ let duration = ToTemporalDurationRecord(durationLike); ++ if (operation === 'subtract') { ++ duration = { ++ years: -duration.years, ++ months: -duration.months, ++ weeks: -duration.weeks, ++ days: -duration.days, ++ hours: -duration.hours, ++ minutes: -duration.minutes, ++ seconds: -duration.seconds, ++ milliseconds: -duration.milliseconds, ++ microseconds: -duration.microseconds, ++ nanoseconds: -duration.nanoseconds ++ }; ++ } ++ let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration; ++ ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day')); ++ const options = GetOptionsObject(optionsParam); ++ const calendar = GetSlot(yearMonth, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(yearMonth, fieldNames, []); ++ const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1; ++ // PrepareTemporalFields returns a type where 'day' is potentially undefined, ++ // and TS doesn't narrow the type as a result of the assignment above, so we ++ // cast the fields input to the new type. ++ const startDate = CalendarDateFromFields(calendar, fields); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const optionsCopy = ObjectAssign$2(ObjectCreate$2(null), options); ++ const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options); ++ const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy); ++} ++function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) { ++ const sign = operation === 'subtract' ? -1 : 1; ++ const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike); ++ const options = GetOptionsObject(optionsParam); ++ const timeZone = GetSlot(zonedDateTime, TIME_ZONE); ++ const calendar = GetSlot(zonedDateTime, CALENDAR); ++ const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++} ++function RoundNumberToIncrement(quantity, increment, mode) { ++ if (increment === 1) ++ return quantity; ++ let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment)); ++ if (JSBI.equal(remainder, ZERO)) ++ return quantity; ++ const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1; ++ switch (mode) { ++ case 'ceil': ++ if (sign > 0) ++ quotient = JSBI.add(quotient, JSBI.BigInt(sign)); ++ break; ++ case 'floor': ++ if (sign < 0) ++ quotient = JSBI.add(quotient, JSBI.BigInt(sign)); ++ break; ++ case 'trunc': ++ // no change needed, because divmod is a truncation ++ break; ++ case 'halfExpand': ++ // "half up away from zero" ++ if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) { ++ quotient = JSBI.add(quotient, JSBI.BigInt(sign)); ++ } ++ break; ++ } ++ return JSBI.multiply(quotient, JSBI.BigInt(increment)); ++} ++function RoundInstant(epochNs, increment, unit, roundingMode) { ++ // Note: NonNegativeModulo, but with BigInt ++ let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9)); ++ if (JSBI.lessThan(remainder, ZERO)) ++ remainder = JSBI.add(remainder, JSBI.BigInt(86400e9)); ++ const wholeDays = JSBI.subtract(epochNs, remainder); ++ const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode); ++ return JSBI.add(wholeDays, roundedRemainder); ++} ++function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) { ++ const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs); ++ const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays); ++ return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; ++} ++function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) { ++ let quantity = ZERO; ++ switch (unit) { ++ case 'day': ++ case 'hour': ++ quantity = JSBI.BigInt(hour); ++ // fall through ++ case 'minute': ++ quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute)); ++ // fall through ++ case 'second': ++ quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second)); ++ // fall through ++ case 'millisecond': ++ quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond)); ++ // fall through ++ case 'microsecond': ++ quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond)); ++ // fall through ++ case 'nanosecond': ++ quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond)); ++ } ++ const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit]; ++ const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode); ++ const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit))); ++ switch (unit) { ++ case 'day': ++ return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 }; ++ case 'hour': ++ return BalanceTime(result, 0, 0, 0, 0, 0); ++ case 'minute': ++ return BalanceTime(hour, result, 0, 0, 0, 0); ++ case 'second': ++ return BalanceTime(hour, minute, result, 0, 0, 0); ++ case 'millisecond': ++ return BalanceTime(hour, minute, second, result, 0, 0); ++ case 'microsecond': ++ return BalanceTime(hour, minute, second, millisecond, result, 0); ++ case 'nanosecond': ++ return BalanceTime(hour, minute, second, millisecond, microsecond, result); ++ default: ++ throw new Error(`Invalid unit ${unit}`); ++ } ++} ++function DaysUntil(earlier, later) { ++ return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days; ++} ++function MoveRelativeDate(calendar, relativeToParam, duration) { ++ const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined); ++ const days = DaysUntil(relativeToParam, later); ++ return { relativeTo: later, days }; ++} ++function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) { ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar); ++} ++function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ let hours = hoursParam; ++ let minutes = minutesParam; ++ let seconds = secondsParam; ++ let milliseconds = millisecondsParam; ++ let microseconds = microsecondsParam; ++ let nanoseconds = nanosecondsParam; ++ if (!IsTemporalZonedDateTime(relativeTo) || ++ unit === 'year' || ++ unit === 'month' || ++ unit === 'week' || ++ unit === 'day' || ++ (unit === 'nanosecond' && increment === 1)) { ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++ } ++ // There's one more round of rounding possible: if relativeTo is a ++ // ZonedDateTime, the time units could have rounded up into enough hours ++ // to exceed the day length. If this happens, grow the date part by a ++ // single day and re-run exact time rounding on the smaller remainder. DO ++ // NOT RECURSE, because once the extra hours are sucked up into the date ++ // duration, there's no way for another full day to come from the next ++ // round of rounding. And if it were possible (e.g. contrived calendar ++ // with 30-minute-long "days") then it'd risk an infinite loop. ++ let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0); ++ const direction = MathSign(JSBI.toNumber(timeRemainderNs)); ++ const timeZone = GetSlot(relativeTo, TIME_ZONE); ++ const calendar = GetSlot(relativeTo, CALENDAR); ++ const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0); ++ const dayLengthNs = JSBI.subtract(dayEnd, dayStart); ++ if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) { ++ ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo)); ++ timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode); ++ ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour')); ++ } ++ return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds }; ++} ++function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) { ++ let years = yearsParam; ++ let months = monthsParam; ++ let weeks = weeksParam; ++ let days = daysParam; ++ let hours = hoursParam; ++ let minutes = minutesParam; ++ let seconds = secondsParam; ++ let milliseconds = millisecondsParam; ++ let microseconds = microsecondsParam; ++ let nanoseconds = JSBI.BigInt(nanosecondsParam); ++ const TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ let calendar, zdtRelative; ++ // A cast is used below because relativeTo will be either PlainDate or ++ // undefined for the rest of this long method (after any ZDT=>PlainDate ++ // conversion below), and TS isn't smart enough to know that the type has ++ // changed. See https://github.com/microsoft/TypeScript/issues/27706. ++ let relativeTo = relativeToParam; ++ if (relativeTo) { ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ zdtRelative = relativeTo; ++ relativeTo = ToTemporalDate(relativeTo); ++ } ++ else if (!IsTemporalDate(relativeTo)) { ++ throw new TypeError('starting point must be PlainDate or ZonedDateTime'); ++ } ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ // First convert time units up to days, if rounding to days or higher units. ++ // If rounding relative to a ZonedDateTime, then some days may not be 24h. ++ // TS doesn't know that `dayLengthNs` is only used if the unit is day or ++ // larger. We'll cast away `undefined` when it's used lower down below. ++ let dayLengthNs; ++ if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') { ++ nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0); ++ let intermediate; ++ if (zdtRelative) { ++ intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days); ++ } ++ let deltaDays; ++ let dayLength; ++ ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate)); ++ dayLengthNs = JSBI.BigInt(dayLength); ++ days += deltaDays; ++ hours = minutes = seconds = milliseconds = microseconds = 0; ++ } ++ let total; ++ switch (unit) { ++ case 'year': { ++ if (!calendar) ++ throw new RangeError('A starting point is required for years rounding'); ++ // convert months and weeks to days by calculating difference( ++ // relativeTo + years, relativeTo + { years, months, weeks }) ++ const yearsDuration = new TemporalDuration(years); ++ const dateAdd = calendar.dateAdd; ++ const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd); ++ const yearsMonthsWeeks = new TemporalDuration(years, months, weeks); ++ const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd); ++ const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater); ++ relativeTo = yearsLater; ++ days += monthsWeeksInDays; ++ const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd); ++ const untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'year'; ++ const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years; ++ years += yearsPassed; ++ const oldRelativeTo = relativeTo; ++ relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd); ++ const daysPassed = DaysUntil(oldRelativeTo, relativeTo); ++ days -= daysPassed; ++ const oneYear = new TemporalDuration(days < 0 ? -1 : 1); ++ let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear); ++ // Note that `nanoseconds` below (here and in similar code for months, ++ // weeks, and days further below) isn't actually nanoseconds for the ++ // full date range. Instead, it's a BigInt representation of total ++ // days multiplied by the number of nanoseconds in the last day of ++ // the duration. This lets us do days-or-larger rounding using BigInt ++ // math which reduces precision loss. ++ oneYearDays = MathAbs$1(oneYearDays); ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs); ++ nanoseconds = JSBI.add( ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode); ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor); ++ years = JSBI.toNumber(JSBI.divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ months = weeks = days = 0; ++ break; ++ } ++ case 'month': { ++ if (!calendar) ++ throw new RangeError('A starting point is required for months rounding'); ++ // convert weeks to days by calculating difference(relativeTo + ++ // { years, months }, relativeTo + { years, months, weeks }) ++ const yearsMonths = new TemporalDuration(years, months); ++ const dateAdd = calendar.dateAdd; ++ const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd); ++ const yearsMonthsWeeks = new TemporalDuration(years, months, weeks); ++ const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd); ++ const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater); ++ relativeTo = yearsMonthsLater; ++ days += weeksInDays; ++ // Months may be different lengths of days depending on the calendar, ++ // convert days to months in a loop as described above under 'years'. ++ const sign = MathSign(days); ++ const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1); ++ let oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ months += sign; ++ days -= oneMonthDays; ++ ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth)); ++ } ++ oneMonthDays = MathAbs$1(oneMonthDays); ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs); ++ nanoseconds = JSBI.add( ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode); ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor); ++ months = JSBI.toNumber(JSBI.divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ weeks = days = 0; ++ break; ++ } ++ case 'week': { ++ if (!calendar) ++ throw new RangeError('A starting point is required for weeks rounding'); ++ // Weeks may be different lengths of days depending on the calendar, ++ // convert days to weeks in a loop as described above under 'years'. ++ const sign = MathSign(days); ++ const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1); ++ let oneWeekDays; ++ ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ while (MathAbs$1(days) >= MathAbs$1(oneWeekDays)) { ++ weeks += sign; ++ days -= oneWeekDays; ++ ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek)); ++ } ++ oneWeekDays = MathAbs$1(oneWeekDays); ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs); ++ nanoseconds = JSBI.add( ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode); ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor); ++ weeks = JSBI.toNumber(JSBI.divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ days = 0; ++ break; ++ } ++ case 'day': { ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ const divisor = dayLengthNs; ++ nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds); ++ const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode); ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor); ++ days = JSBI.toNumber(JSBI.divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ break; ++ } ++ case 'hour': { ++ const divisor = 3600e9; ++ let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9))); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI.add(allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor))); ++ nanoseconds = ZERO; ++ minutes = seconds = milliseconds = microseconds = 0; ++ break; ++ } ++ case 'minute': { ++ const divisor = 60e9; ++ let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI.add(allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor))); ++ nanoseconds = ZERO; ++ seconds = milliseconds = microseconds = 0; ++ break; ++ } ++ case 'second': { ++ const divisor = 1e9; ++ let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI.add(allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor))); ++ nanoseconds = ZERO; ++ milliseconds = microseconds = 0; ++ break; ++ } ++ case 'millisecond': { ++ const divisor = 1e6; ++ let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI.add(allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor))); ++ nanoseconds = ZERO; ++ microseconds = 0; ++ break; ++ } ++ case 'microsecond': { ++ const divisor = 1e3; ++ let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND); ++ allNanoseconds = JSBI.add(allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(allNanoseconds) / divisor; ++ const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode); ++ microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor))); ++ nanoseconds = ZERO; ++ break; ++ } ++ case 'nanosecond': { ++ total = JSBI.toNumber(nanoseconds); ++ nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode); ++ break; ++ } ++ } ++ return { ++ years, ++ months, ++ weeks, ++ days, ++ hours, ++ minutes, ++ seconds, ++ milliseconds, ++ microseconds, ++ nanoseconds: JSBI.toNumber(nanoseconds), ++ total ++ }; ++} ++function CompareISODate(y1, m1, d1, y2, m2, d2) { ++ for (const [x, y] of [ ++ [y1, y2], ++ [m1, m2], ++ [d1, d2] ++ ]) { ++ if (x !== y) ++ return ComparisonResult(x - y); ++ } ++ return 0; ++} ++function NonNegativeModulo(x, y) { ++ let result = x % y; ++ if (ObjectIs(result, -0)) ++ return 0; ++ if (result < 0) ++ result += y; ++ return result; ++} ++function ToBigIntExternal(arg) { ++ const jsbiBI = ToBigInt(arg); ++ if (typeof globalThis.BigInt !== 'undefined') ++ return globalThis.BigInt(jsbiBI.toString(10)); ++ return jsbiBI; ++} ++function ToBigInt(arg) { ++ if (arg instanceof JSBI) { ++ return arg; ++ } ++ let prim = arg; ++ if (typeof arg === 'object') { ++ const toPrimFn = arg[Symbol.toPrimitive]; ++ if (toPrimFn && typeof toPrimFn === 'function') { ++ prim = ReflectApply$1(toPrimFn, arg, ['number']); ++ } ++ } ++ switch (typeof prim) { ++ case 'undefined': ++ case 'object': ++ case 'number': ++ case 'symbol': ++ default: ++ throw new TypeError(`cannot convert ${typeof arg} to bigint`); ++ case 'string': ++ if (!prim.match(/^\s*(?:[+-]?\d+\s*)?$/)) { ++ throw new SyntaxError('invalid BigInt syntax'); ++ } ++ // eslint: no-fallthrough: false ++ case 'bigint': ++ try { ++ return JSBI.BigInt(prim.toString()); ++ } ++ catch (e) { ++ if (e instanceof Error && e.message.startsWith('Invalid integer')) ++ throw new SyntaxError(e.message); ++ throw e; ++ } ++ case 'boolean': ++ if (prim) { ++ return ONE; ++ } ++ else { ++ return ZERO; ++ } ++ } ++} ++// Note: This method returns values with bogus nanoseconds based on the previous iteration's ++// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be ++// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero. ++const SystemUTCEpochNanoSeconds = (() => { ++ let ns = JSBI.BigInt(Date.now() % 1e6); ++ return () => { ++ const ms = JSBI.BigInt(Date.now()); ++ const result = JSBI.add(JSBI.multiply(ms, MILLION), ns); ++ ns = JSBI.remainder(ms, MILLION); ++ if (JSBI.greaterThan(result, NS_MAX)) ++ return NS_MAX; ++ if (JSBI.lessThan(result, NS_MIN)) ++ return NS_MIN; ++ return result; ++ }; ++})(); ++function SystemTimeZone() { ++ const fmt = new IntlDateTimeFormat$2('en-us'); ++ const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone)); ++} ++function ComparisonResult(value) { ++ return value < 0 ? -1 : value > 0 ? 1 : value; ++} ++function GetOptionsObject(options) { ++ if (options === undefined) ++ return ObjectCreate$2(null); ++ if (IsObject(options) && options !== null) ++ return options; ++ throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`); ++} ++function CreateOnePropObject(propName, propValue) { ++ const o = ObjectCreate$2(null); ++ o[propName] = propValue; ++ return o; ++} ++function GetOption(options, property, allowedValues, fallback) { ++ let value = options[property]; ++ if (value !== undefined) { ++ value = ToString(value); ++ if (!allowedValues.includes(value)) { ++ throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`); ++ } ++ return value; ++ } ++ return fallback; ++} ++function GetNumberOption(options, property, minimum, maximum, fallback) { ++ let valueRaw = options[property]; ++ if (valueRaw === undefined) ++ return fallback; ++ const value = ToNumber(valueRaw); ++ if (NumberIsNaN(value) || value < minimum || value > maximum) { ++ throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`); ++ } ++ return MathFloor$1(value); ++} ++function IsBuiltinCalendar(id) { ++ return ArrayIncludes$1.call(BUILTIN_CALENDAR_IDS, id); ++} ++const OFFSET = new RegExp(`^${offset.source}$`); ++function bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) { ++ // This doesn't make much sense - why do these get converted unnecessarily? ++ let left = JSBI.BigInt(leftParam); ++ let right = JSBI.BigInt(rightParam); ++ let lstate = lstateParam; ++ let rstate = rstateParam; ++ while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) { ++ const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2)); ++ const mstate = getState(middle); ++ if (mstate === lstate) { ++ left = middle; ++ lstate = mstate; ++ } ++ else if (mstate === rstate) { ++ right = middle; ++ rstate = mstate; ++ } ++ else { ++ throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`); ++ } ++ } ++ return right; ++} ++const nsPerTimeUnit = { ++ hour: 3600e9, ++ minute: 60e9, ++ second: 1e9, ++ millisecond: 1e6, ++ microsecond: 1e3, ++ nanosecond: 1 ++}; ++ ++const DATE = Symbol('date'); ++const YM = Symbol('ym'); ++const MD = Symbol('md'); ++const TIME = Symbol('time'); ++const DATETIME = Symbol('datetime'); ++const ZONED = Symbol('zoneddatetime'); ++const INST = Symbol('instant'); ++const ORIGINAL = Symbol('original'); ++const TZ_RESOLVED = Symbol('timezone'); ++const TZ_GIVEN = Symbol('timezone-id-given'); ++const CAL_ID = Symbol('calendar-id'); ++const LOCALE = Symbol('locale'); ++const OPTIONS = Symbol('options'); ++const descriptor = (value) => { ++ return { ++ value, ++ enumerable: true, ++ writable: false, ++ configurable: true ++ }; ++}; ++const IntlDateTimeFormat$1 = globalThis.Intl.DateTimeFormat; ++const ObjectAssign$1 = Object.assign; ++const ObjectHasOwnProperty = Object.prototype.hasOwnProperty; ++const ReflectApply = Reflect.apply; ++// Construction of built-in Intl.DateTimeFormat objects is sloooooow, ++// so we'll only create those instances when we need them. ++// See https://bugs.chromium.org/p/v8/issues/detail?id=6528 ++function getPropLazy(obj, prop) { ++ let val = obj[prop]; ++ if (typeof val === 'function') { ++ // If we get here, `val` is an "amender function". It will take the user's ++ // options and transform them into suitable options to be passed into the ++ // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options ++ // will vary depending on the Temporal type, so that's why we store separate ++ // formatters in separate props on the polyfill's DateTimeFormat instances. ++ // The efficiency happens because we don't create an (expensive) formatter ++ // until the user calls toLocaleString for that Temporal type. ++ val = new IntlDateTimeFormat$1(obj[LOCALE], val(obj[OPTIONS])); ++ // TODO: can this be typed more cleanly? ++ obj[prop] = val; ++ } ++ return val; ++} ++// Similarly, lazy-init TimeZone instances. ++function getResolvedTimeZoneLazy(obj) { ++ let val = obj[TZ_RESOLVED]; ++ if (typeof val === 'string') { ++ val = ToTemporalTimeZone(val); ++ obj[TZ_RESOLVED] = val; ++ } ++ return val; ++} ++function DateTimeFormatImpl(locale = undefined, optionsParam = {}) { ++ if (!(this instanceof DateTimeFormatImpl)) { ++ return new DateTimeFormatImpl(locale, optionsParam); ++ } ++ const hasOptions = typeof optionsParam !== 'undefined'; ++ const options = hasOptions ? ObjectAssign$1({}, optionsParam) : {}; ++ // TODO: remove type assertion after Temporal types land in TS lib types ++ const original = new IntlDateTimeFormat$1(locale, options); ++ const ro = original.resolvedOptions(); ++ // DateTimeFormat instances are very expensive to create. Therefore, they will ++ // be lazily created only when needed, using the locale and options provided. ++ // But it's possible for callers to mutate those inputs before lazy creation ++ // happens. For this reason, we clone the inputs instead of caching the ++ // original objects. To avoid the complexity of deep cloning any inputs that ++ // are themselves objects (e.g. the locales array, or options property values ++ // that will be coerced to strings), we rely on `resolvedOptions()` to do the ++ // coercion and cloning for us. Unfortunately, we can't just use the resolved ++ // options as-is because our options-amending logic adds additional fields if ++ // the user doesn't supply any unit fields like year, month, day, hour, etc. ++ // Therefore, we limit the properties in the clone to properties that were ++ // present in the original input. ++ if (hasOptions) { ++ const clonedResolved = ObjectAssign$1({}, ro); ++ for (const prop in clonedResolved) { ++ if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) { ++ delete clonedResolved[prop]; ++ } ++ } ++ this[OPTIONS] = clonedResolved; ++ } ++ else { ++ this[OPTIONS] = options; ++ } ++ this[TZ_GIVEN] = options.timeZone ? options.timeZone : null; ++ this[LOCALE] = ro.locale; ++ this[ORIGINAL] = original; ++ this[TZ_RESOLVED] = ro.timeZone; ++ this[CAL_ID] = ro.calendar; ++ this[DATE] = dateAmend; ++ this[YM] = yearMonthAmend; ++ this[MD] = monthDayAmend; ++ this[TIME] = timeAmend; ++ this[DATETIME] = datetimeAmend; ++ this[ZONED] = zonedDateTimeAmend; ++ this[INST] = instantAmend; ++ return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way? ++} ++Object.defineProperty(DateTimeFormatImpl, 'name', { ++ writable: true, ++ value: 'DateTimeFormat' ++}); ++DateTimeFormatImpl.supportedLocalesOf = function (locales, options) { ++ return IntlDateTimeFormat$1.supportedLocalesOf(locales, options); ++}; ++const propertyDescriptors = { ++ resolvedOptions: descriptor(resolvedOptions), ++ format: descriptor(format), ++ formatRange: descriptor(formatRange) ++}; ++if ('formatToParts' in IntlDateTimeFormat$1.prototype) { ++ propertyDescriptors.formatToParts = descriptor(formatToParts); ++} ++if ('formatRangeToParts' in IntlDateTimeFormat$1.prototype) { ++ propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts); ++} ++DateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat$1.prototype, propertyDescriptors); ++// Ensure that the prototype isn't writeable. ++Object.defineProperty(DateTimeFormatImpl, 'prototype', { ++ writable: false, ++ enumerable: false, ++ configurable: false ++}); ++const DateTimeFormat = DateTimeFormatImpl; ++function resolvedOptions() { ++ return this[ORIGINAL].resolvedOptions(); ++} ++function adjustFormatterTimeZone(formatter, timeZone) { ++ if (!timeZone) ++ return formatter; ++ const options = formatter.resolvedOptions(); ++ if (options.timeZone === timeZone) ++ return formatter; ++ // Existing Intl isn't typed to accept Temporal-specific options and the lib ++ // types for resolved options are less restrictive than the types for options. ++ // For example, `weekday` is ++ // `'long' | 'short' | 'narrow'` in options but `string` in resolved options. ++ // TODO: investigate why, and file an issue against TS if it's a bug. ++ if (options['dateStyle'] || options['timeStyle']) { ++ // Unfortunately, Safari's resolvedOptions include parameters that will ++ // cause errors at runtime if passed along with ++ // dateStyle or timeStyle options as per ++ // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components. ++ // This has been fixed in newer versions of Safari: ++ // https://bugs.webkit.org/show_bug.cgi?id=231041 ++ delete options['weekday']; ++ delete options['era']; ++ delete options['year']; ++ delete options['month']; ++ delete options['day']; ++ delete options['hour']; ++ delete options['minute']; ++ delete options['second']; ++ delete options['timeZoneName']; ++ delete options['hourCycle']; ++ delete options['hour12']; ++ delete options['dayPeriod']; ++ } ++ return new IntlDateTimeFormat$1(options.locale, { ...options, timeZone }); ++} ++// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params? ++// And if so, why doesn't formatRange also accept extra params? ++function format(datetime, ...rest) { ++ let { instant, formatter, timeZone } = extractOverrides(datetime, this); ++ if (instant && formatter) { ++ formatter = adjustFormatterTimeZone(formatter, timeZone); ++ return formatter.format(instant.epochMilliseconds); ++ } ++ return this[ORIGINAL].format(datetime, ...rest); ++} ++function formatToParts(datetime, ...rest) { ++ let { instant, formatter, timeZone } = extractOverrides(datetime, this); ++ if (instant && formatter) { ++ formatter = adjustFormatterTimeZone(formatter, timeZone); ++ return formatter.formatToParts(instant.epochMilliseconds); ++ } ++ return this[ORIGINAL].formatToParts(datetime, ...rest); ++} ++function formatRange(a, b) { ++ if (isTemporalObject(a) || isTemporalObject(b)) { ++ if (!sameTemporalType(a, b)) { ++ throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type'); ++ } ++ const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this); ++ const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this); ++ if (atz && btz && atz !== btz) { ++ throw new RangeError('cannot format range between different time zones'); ++ } ++ if (aa && bb && aformatter && bformatter && aformatter === bformatter) { ++ const formatter = adjustFormatterTimeZone(aformatter, atz); ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds); ++ } ++ } ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return this[ORIGINAL].formatRange(a, b); ++} ++function formatRangeToParts(a, b) { ++ if (isTemporalObject(a) || isTemporalObject(b)) { ++ if (!sameTemporalType(a, b)) { ++ throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type'); ++ } ++ const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this); ++ const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this); ++ if (atz && btz && atz !== btz) { ++ throw new RangeError('cannot format range between different time zones'); ++ } ++ if (aa && bb && aformatter && bformatter && aformatter === bformatter) { ++ const formatter = adjustFormatterTimeZone(aformatter, atz); ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds); ++ } ++ } ++ // TODO: Remove type assertion after this method lands in TS lib types ++ return this[ORIGINAL].formatRangeToParts(a, b); ++} ++function amend(optionsParam = {}, amended = {}) { ++ const options = ObjectAssign$1({}, optionsParam); ++ for (const opt of [ ++ 'year', ++ 'month', ++ 'day', ++ 'hour', ++ 'minute', ++ 'second', ++ 'weekday', ++ 'dayPeriod', ++ 'timeZoneName', ++ 'dateStyle', ++ 'timeStyle' ++ ]) { ++ options[opt] = opt in amended ? amended[opt] : options[opt]; ++ if (options[opt] === false || options[opt] === undefined) ++ delete options[opt]; ++ } ++ return options; ++} ++function timeAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ year: false, ++ month: false, ++ day: false, ++ weekday: false, ++ timeZoneName: false, ++ dateStyle: false ++ }); ++ if (!hasTimeOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ return options; ++} ++function yearMonthAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ day: false, ++ hour: false, ++ minute: false, ++ second: false, ++ weekday: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ dateStyle: false, ++ timeStyle: false ++ }); ++ if (!('year' in options || 'month' in options)) { ++ options = ObjectAssign$1(options, { year: 'numeric', month: 'numeric' }); ++ } ++ return options; ++} ++function monthDayAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ year: false, ++ hour: false, ++ minute: false, ++ second: false, ++ weekday: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ dateStyle: false, ++ timeStyle: false ++ }); ++ if (!('month' in options || 'day' in options)) { ++ options = ObjectAssign$1({}, options, { month: 'numeric', day: 'numeric' }); ++ } ++ return options; ++} ++function dateAmend(optionsParam) { ++ let options = amend(optionsParam, { ++ hour: false, ++ minute: false, ++ second: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ timeStyle: false ++ }); ++ if (!hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric' ++ }); ++ } ++ return options; ++} ++function datetimeAmend(optionsParam) { ++ let options = amend(optionsParam, { timeZoneName: false }); ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ return options; ++} ++function zonedDateTimeAmend(optionsParam) { ++ let options = optionsParam; ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ if (options.timeZoneName === undefined) ++ options.timeZoneName = 'short'; ++ } ++ return options; ++} ++function instantAmend(optionsParam) { ++ let options = optionsParam; ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ return options; ++} ++function hasDateOptions(options) { ++ return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options; ++} ++function hasTimeOptions(options) { ++ return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options); ++} ++function isTemporalObject(obj) { ++ return (IsTemporalDate(obj) || ++ IsTemporalTime(obj) || ++ IsTemporalDateTime(obj) || ++ IsTemporalZonedDateTime(obj) || ++ IsTemporalYearMonth(obj) || ++ IsTemporalMonthDay(obj) || ++ IsTemporalInstant(obj)); ++} ++function sameTemporalType(x, y) { ++ if (!isTemporalObject(x) || !isTemporalObject(y)) ++ return false; ++ if (IsTemporalTime(x) && !IsTemporalTime(y)) ++ return false; ++ if (IsTemporalDate(x) && !IsTemporalDate(y)) ++ return false; ++ if (IsTemporalDateTime(x) && !IsTemporalDateTime(y)) ++ return false; ++ if (IsTemporalZonedDateTime(x) && !IsTemporalZonedDateTime(y)) ++ return false; ++ if (IsTemporalYearMonth(x) && !IsTemporalYearMonth(y)) ++ return false; ++ if (IsTemporalMonthDay(x) && !IsTemporalMonthDay(y)) ++ return false; ++ if (IsTemporalInstant(x) && !IsTemporalInstant(y)) ++ return false; ++ return true; ++} ++function extractOverrides(temporalObj, main) { ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ if (IsTemporalTime(temporalObj)) { ++ const hour = GetSlot(temporalObj, ISO_HOUR); ++ const minute = GetSlot(temporalObj, ISO_MINUTE); ++ const second = GetSlot(temporalObj, ISO_SECOND); ++ const millisecond = GetSlot(temporalObj, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalObj, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND); ++ const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, TIME) ++ }; ++ } ++ if (IsTemporalYearMonth(temporalObj)) { ++ const isoYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const referenceISODay = GetSlot(temporalObj, ISO_DAY); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, YM) ++ }; ++ } ++ if (IsTemporalMonthDay(temporalObj)) { ++ const referenceISOYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const isoDay = GetSlot(temporalObj, ISO_DAY); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, MD) ++ }; ++ } ++ if (IsTemporalDate(temporalObj)) { ++ const isoYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const isoDay = GetSlot(temporalObj, ISO_DAY); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, DATE) ++ }; ++ } ++ if (IsTemporalDateTime(temporalObj)) { ++ const isoYear = GetSlot(temporalObj, ISO_YEAR); ++ const isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ const isoDay = GetSlot(temporalObj, ISO_DAY); ++ const hour = GetSlot(temporalObj, ISO_HOUR); ++ const minute = GetSlot(temporalObj, ISO_MINUTE); ++ const second = GetSlot(temporalObj, ISO_SECOND); ++ const millisecond = GetSlot(temporalObj, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalObj, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND); ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ let datetime = temporalObj; ++ if (calendar === 'iso8601') { ++ datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]); ++ } ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, DATETIME) ++ }; ++ } ++ if (IsTemporalZonedDateTime(temporalObj)) { ++ const calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) { ++ throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`); ++ } ++ const timeZone = GetSlot(temporalObj, TIME_ZONE); ++ const objTimeZone = ToString(timeZone); ++ if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) { ++ throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`); ++ } ++ return { ++ instant: GetSlot(temporalObj, INSTANT), ++ formatter: getPropLazy(main, ZONED), ++ timeZone: objTimeZone ++ }; ++ } ++ if (IsTemporalInstant(temporalObj)) { ++ return { ++ instant: temporalObj, ++ formatter: getPropLazy(main, INST) ++ }; ++ } ++ return {}; ++} ++ ++var intl = /*#__PURE__*/Object.freeze({ ++ __proto__: null, ++ DateTimeFormat: DateTimeFormat ++}); ++ ++class Instant { ++ constructor(epochNanoseconds) { ++ // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only ++ // to improve the error message. ++ if (arguments.length < 1) { ++ throw new TypeError('missing argument: epochNanoseconds is required'); ++ } ++ const ns = ToBigInt(epochNanoseconds); ++ ValidateEpochNanoseconds(ns); ++ CreateSlots(this); ++ SetSlot(this, EPOCHNANOSECONDS, ns); ++ { ++ const repr = TemporalInstantToString(this, undefined, 'auto'); ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${repr}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get epochSeconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.divide(value, BILLION)); ++ } ++ get epochMilliseconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)); ++ return JSBI.toNumber(JSBI.divide(value, MILLION)); ++ } ++ get epochMicroseconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)); ++ return ToBigIntExternal(JSBI.divide(value, THOUSAND)); ++ } ++ get epochNanoseconds() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS))); ++ } ++ add(temporalDurationLike) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike); ++ } ++ subtract(temporalDurationLike) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalInstant('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalInstant('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const maximumIncrements = { ++ hour: 24, ++ minute: 1440, ++ second: 86400, ++ millisecond: 86400e3, ++ microsecond: 86400e6, ++ nanosecond: 86400e9 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true); ++ const ns = GetSlot(this, EPOCHNANOSECONDS); ++ const roundedNs = RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode); ++ return new Instant(roundedNs); ++ } ++ equals(otherParam) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalInstant(otherParam); ++ const one = GetSlot(this, EPOCHNANOSECONDS); ++ const two = GetSlot(other, EPOCHNANOSECONDS); ++ return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ let timeZone = options.timeZone; ++ if (timeZone !== undefined) ++ timeZone = ToTemporalTimeZone(timeZone); ++ // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ const ns = GetSlot(this, EPOCHNANOSECONDS); ++ const roundedNs = RoundInstant(ns, increment, unit, roundingMode); ++ const roundedInstant = new Instant(roundedNs); ++ return TemporalInstantToString(roundedInstant, timeZone, precision); ++ } ++ toJSON() { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalInstantToString(this, undefined, 'auto'); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.Instant'); ++ } ++ toZonedDateTime(item) { ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) { ++ throw new TypeError('invalid argument in toZonedDateTime'); ++ } ++ const calendarLike = item.calendar; ++ if (calendarLike === undefined) { ++ throw new TypeError('missing calendar property in toZonedDateTime'); ++ } ++ const calendar = ToTemporalCalendar(calendarLike); ++ const temporalTimeZoneLike = item.timeZone; ++ if (temporalTimeZoneLike === undefined) { ++ throw new TypeError('missing timeZone property in toZonedDateTime'); ++ } ++ const timeZone = ToTemporalTimeZone(temporalTimeZoneLike); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ toZonedDateTimeISO(itemParam) { ++ let item = itemParam; ++ if (!IsTemporalInstant(this)) ++ throw new TypeError('invalid receiver'); ++ if (IsObject(item)) { ++ const timeZoneProperty = item.timeZone; ++ if (timeZoneProperty !== undefined) { ++ item = timeZoneProperty; ++ } ++ } ++ const timeZone = ToTemporalTimeZone(item); ++ const calendar = GetISO8601Calendar(); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ static fromEpochSeconds(epochSecondsParam) { ++ const epochSeconds = ToNumber(epochSecondsParam); ++ const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static fromEpochMilliseconds(epochMillisecondsParam) { ++ const epochMilliseconds = ToNumber(epochMillisecondsParam); ++ const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static fromEpochMicroseconds(epochMicrosecondsParam) { ++ const epochMicroseconds = ToBigInt(epochMicrosecondsParam); ++ const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static fromEpochNanoseconds(epochNanosecondsParam) { ++ const epochNanoseconds = ToBigInt(epochNanosecondsParam); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ static from(item) { ++ if (IsTemporalInstant(item)) { ++ return new Instant(GetSlot(item, EPOCHNANOSECONDS)); ++ } ++ return ToTemporalInstant(item); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalInstant(oneParam); ++ const two = ToTemporalInstant(twoParam); ++ const oneNs = GetSlot(one, EPOCHNANOSECONDS); ++ const twoNs = GetSlot(two, EPOCHNANOSECONDS); ++ if (JSBI.lessThan(oneNs, twoNs)) ++ return -1; ++ if (JSBI.greaterThan(oneNs, twoNs)) ++ return 1; ++ return 0; ++ } ++} ++MakeIntrinsicClass(Instant, 'Temporal.Instant'); ++ ++const ArrayIncludes = Array.prototype.includes; ++const ArrayPrototypePush = Array.prototype.push; ++const IntlDateTimeFormat = globalThis.Intl.DateTimeFormat; ++const ArraySort = Array.prototype.sort; ++const MathAbs = Math.abs; ++const MathFloor = Math.floor; ++const ObjectEntries = Object.entries; ++const ObjectKeys = Object.keys; ++/** ++ * Implementations for each calendar. Non-ISO calendars have an extra `helper` ++ * property that provides additional per-calendar logic. ++ */ ++const impl = {}; ++/** ++ * Thin wrapper around the implementation of each built-in calendar. This ++ * class's methods follow a similar pattern: ++ * 1. Validate parameters ++ * 2. Fill in default options (for methods where options are present) ++ * 3. Simplify and/or normalize parameters. For example, some methods accept ++ * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to ++ * PlainDate. ++ * 4. Look up the ID of the built-in calendar ++ * 5. Fetch the implementation object for that ID. ++ * 6. Call the corresponding method in the implementation object. ++ */ ++class Calendar { ++ constructor(idParam) { ++ // Note: if the argument is not passed, IsBuiltinCalendar("undefined") will fail. This check ++ // exists only to improve the error message. ++ if (arguments.length < 1) { ++ throw new RangeError('missing argument: id is required'); ++ } ++ const id = ToString(idParam); ++ if (!IsBuiltinCalendar(id)) ++ throw new RangeError(`invalid calendar identifier ${id}`); ++ CreateSlots(this); ++ SetSlot(this, CALENDAR_ID, id); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${id}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get id() { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ dateFromFields(fields, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) ++ throw new TypeError('invalid fields'); ++ const options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this); ++ } ++ yearMonthFromFields(fields, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) ++ throw new TypeError('invalid fields'); ++ const options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this); ++ } ++ monthDayFromFields(fields, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) ++ throw new TypeError('invalid fields'); ++ const options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this); ++ } ++ fields(fields) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const fieldsArray = []; ++ const allowed = new Set([ ++ 'year', ++ 'month', ++ 'monthCode', ++ 'day', ++ 'hour', ++ 'minute', ++ 'second', ++ 'millisecond', ++ 'microsecond', ++ 'nanosecond' ++ ]); ++ for (const name of fields) { ++ if (typeof name !== 'string') ++ throw new TypeError('invalid fields'); ++ if (!allowed.has(name)) ++ throw new RangeError(`invalid field name ${name}`); ++ allowed.delete(name); ++ ArrayPrototypePush.call(fieldsArray, name); ++ } ++ return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray); ++ } ++ mergeFields(fields, additionalFields) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields); ++ } ++ dateAdd(dateParam, durationParam, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ const duration = ToTemporalDuration(durationParam); ++ const options = GetOptionsObject(optionsParam); ++ const overflow = ToTemporalOverflow(options); ++ const { days } = BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day'); ++ return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this); ++ } ++ dateUntil(oneParam, twoParam, optionsParam = undefined) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const one = ToTemporalDate(oneParam); ++ const two = ToTemporalDate(twoParam); ++ const options = GetOptionsObject(optionsParam); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'auto') ++ largestUnit = 'day'; ++ const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit); ++ const Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ } ++ year(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].year(date); ++ } ++ month(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (IsTemporalMonthDay(date)) ++ throw new TypeError('use monthCode on PlainMonthDay instead'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].month(date); ++ } ++ monthCode(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date) && !IsTemporalMonthDay(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].monthCode(date); ++ } ++ day(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalMonthDay(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].day(date); ++ } ++ era(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].era(date); ++ } ++ eraYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].eraYear(date); ++ } ++ dayOfWeek(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date); ++ } ++ dayOfYear(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date); ++ } ++ weekOfYear(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date); ++ } ++ daysInWeek(dateParam) { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ const date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date); ++ } ++ daysInMonth(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date); ++ } ++ daysInYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date); ++ } ++ monthsInYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date); ++ } ++ inLeapYear(dateParam) { ++ let date = dateParam; ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) ++ date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date); ++ } ++ toString() { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR_ID); ++ } ++ toJSON() { ++ if (!IsTemporalCalendar(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ static from(item) { ++ return ToTemporalCalendar(item); ++ } ++} ++MakeIntrinsicClass(Calendar, 'Temporal.Calendar'); ++DefineIntrinsic('Temporal.Calendar.from', Calendar.from); ++/** ++ * Implementation for the ISO 8601 calendar. This is the only calendar that's ++ * guaranteed to be supported by all ECMAScript implementations, including those ++ * without Intl (ECMA-402) support. ++ */ ++impl['iso8601'] = { ++ dateFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ let fields = PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']); ++ fields = resolveNonLunisolarMonth(fields); ++ let { year, month, day } = fields; ++ ({ year, month, day } = RegulateISODate(year, month, day, overflow)); ++ return CreateTemporalDate(year, month, day, calendar); ++ }, ++ yearMonthFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ let fields = PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']); ++ fields = resolveNonLunisolarMonth(fields); ++ let { year, month } = fields; ++ ({ year, month } = RegulateISOYearMonth(year, month, overflow)); ++ return CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1); ++ }, ++ monthDayFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ let fields = PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']); ++ if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) { ++ throw new TypeError('either year or monthCode required with month'); ++ } ++ const useYear = fields.monthCode === undefined; ++ const referenceISOYear = 1972; ++ fields = resolveNonLunisolarMonth(fields); ++ let { month, day, year } = fields; ++ ({ month, day } = RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow)); ++ return CreateTemporalMonthDay(month, day, calendar, referenceISOYear); ++ }, ++ fields(fields) { ++ return fields; ++ }, ++ mergeFields(fields, additionalFields) { ++ const merged = {}; ++ for (const nextKey of ObjectKeys(fields)) { ++ if (nextKey === 'month' || nextKey === 'monthCode') ++ continue; ++ merged[nextKey] = fields[nextKey]; ++ } ++ const newKeys = ObjectKeys(additionalFields); ++ for (const nextKey of newKeys) { ++ merged[nextKey] = additionalFields[nextKey]; ++ } ++ if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) { ++ const { month, monthCode } = fields; ++ if (month !== undefined) ++ merged.month = month; ++ if (monthCode !== undefined) ++ merged.monthCode = monthCode; ++ } ++ return merged; ++ }, ++ dateAdd(date, years, months, weeks, days, overflow, calendar) { ++ let year = GetSlot(date, ISO_YEAR); ++ let month = GetSlot(date, ISO_MONTH); ++ let day = GetSlot(date, ISO_DAY); ++ ({ year, month, day } = AddISODate(year, month, day, years, months, weeks, days, overflow)); ++ return CreateTemporalDate(year, month, day, calendar); ++ }, ++ dateUntil(one, two, largestUnit) { ++ return DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit); ++ }, ++ year(date) { ++ return GetSlot(date, ISO_YEAR); ++ }, ++ era() { ++ return undefined; ++ }, ++ eraYear() { ++ return undefined; ++ }, ++ month(date) { ++ return GetSlot(date, ISO_MONTH); ++ }, ++ monthCode(date) { ++ return buildMonthCode(GetSlot(date, ISO_MONTH)); ++ }, ++ day(date) { ++ return GetSlot(date, ISO_DAY); ++ }, ++ dayOfWeek(date) { ++ return DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ dayOfYear(date) { ++ return DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ weekOfYear(date) { ++ return WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ daysInWeek() { ++ return 7; ++ }, ++ daysInMonth(date) { ++ return ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH)); ++ }, ++ daysInYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ return LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365; ++ }, ++ monthsInYear() { ++ return 12; ++ }, ++ inLeapYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ return LeapYear(GetSlot(date, ISO_YEAR)); ++ } ++}; ++function monthCodeNumberPart(monthCode) { ++ if (!monthCode.startsWith('M')) { ++ throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`); ++ } ++ const month = +monthCode.slice(1); ++ if (isNaN(month)) ++ throw new RangeError(`Invalid month code: ${monthCode}`); ++ return month; ++} ++function buildMonthCode(month, leap = false) { ++ return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`; ++} ++/** ++ * Safely merge a month, monthCode pair into an integer month. ++ * If both are present, make sure they match. ++ * This logic doesn't work for lunisolar calendars! ++ * */ ++function resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) { ++ let { month, monthCode } = calendarDate; ++ if (monthCode === undefined) { ++ if (month === undefined) ++ throw new TypeError('Either month or monthCode are required'); ++ // The ISO calendar uses the default (undefined) value because it does ++ // constrain/reject after this method returns. Non-ISO calendars, however, ++ // rely on this function to constrain/reject out-of-range `month` values. ++ if (overflow === 'reject') ++ RejectToRange(month, 1, monthsPerYear); ++ if (overflow === 'constrain') ++ month = ConstrainToRange(month, 1, monthsPerYear); ++ monthCode = buildMonthCode(month); ++ } ++ else { ++ const numberPart = monthCodeNumberPart(monthCode); ++ if (month !== undefined && month !== numberPart) { ++ throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`); ++ } ++ if (monthCode !== buildMonthCode(numberPart)) { ++ throw new RangeError(`Invalid month code: ${monthCode}`); ++ } ++ month = numberPart; ++ if (month < 1 || month > monthsPerYear) ++ throw new RangeError(`Invalid monthCode: ${monthCode}`); ++ } ++ return { ...calendarDate, month, monthCode }; ++} ++/** ++ * This prototype implementation of non-ISO calendars makes many repeated calls ++ * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed ++ * up these repeat accesses. Each cache instance is associated (via a WeakMap) ++ * to a specific Temporal object, which speeds up multiple calendar calls on the ++ * same Temporal object instance. No invalidation or pruning is necessary ++ * because each object's cache is thrown away when the object is GC-ed. ++ */ ++class OneObjectCache { ++ constructor(cacheToClone) { ++ this.map = new Map(); ++ this.calls = 0; ++ this.hits = 0; ++ this.misses = 0; ++ this.now = globalThis.performance ? globalThis.performance.now() : Date.now(); ++ if (cacheToClone !== undefined) { ++ let i = 0; ++ for (const entry of cacheToClone.map.entries()) { ++ if (++i > OneObjectCache.MAX_CACHE_ENTRIES) ++ break; ++ this.map.set(...entry); ++ } ++ } ++ } ++ get(key) { ++ const result = this.map.get(key); ++ if (result) { ++ this.hits++; ++ this.report(); ++ } ++ this.calls++; ++ return result; ++ } ++ set(key, value) { ++ this.map.set(key, value); ++ this.misses++; ++ this.report(); ++ } ++ report() { ++ /* ++ if (this.calls === 0) return; ++ const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now; ++ const hitRate = ((100 * this.hits) / this.calls).toFixed(0); ++ console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`); ++ */ ++ } ++ setObject(obj) { ++ if (OneObjectCache.objectMap.get(obj)) ++ throw new RangeError('object already cached'); ++ OneObjectCache.objectMap.set(obj, this); ++ this.report(); ++ } ++ /** ++ * Returns a WeakMap-backed cache that's used to store expensive results ++ * that are associated with a particular Temporal object instance. ++ * ++ * @param obj - object to associate with the cache ++ */ ++ static getCacheForObject(obj) { ++ let cache = OneObjectCache.objectMap.get(obj); ++ if (!cache) { ++ cache = new OneObjectCache(); ++ OneObjectCache.objectMap.set(obj, cache); ++ } ++ return cache; ++ } ++} ++OneObjectCache.objectMap = new WeakMap(); ++OneObjectCache.MAX_CACHE_ENTRIES = 1000; ++function toUtcIsoDateString({ isoYear, isoMonth, isoDay }) { ++ const yearString = ISOYearString(isoYear); ++ const monthString = ISODateTimePartString(isoMonth); ++ const dayString = ISODateTimePartString(isoDay); ++ return `${yearString}-${monthString}-${dayString}T00:00Z`; ++} ++function simpleDateDiff(one, two) { ++ return { ++ years: one.year - two.year, ++ months: one.month - two.month, ++ days: one.day - two.day ++ }; ++} ++/** ++ * Implementation helper that's common to all non-ISO calendars ++ */ ++class HelperBase { ++ constructor() { ++ // The short era format works for all calendars except Japanese, which will ++ // override. ++ this.eraLength = 'short'; ++ // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ this.hasEra = true; ++ } ++ getFormatter() { ++ // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per ++ // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one ++ // DateTimeFormat instance per calendar. Caching is lazy so we only pay for ++ // calendars that are used. Note that the nonIsoHelperBase object is spread ++ // into each each calendar's implementation before any cache is created, so ++ // each calendar gets its own separate cached formatter. ++ if (typeof this.formatter === 'undefined') { ++ this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, { ++ day: 'numeric', ++ month: 'numeric', ++ year: 'numeric', ++ era: this.eraLength, ++ timeZone: 'UTC' ++ }); ++ } ++ return this.formatter; ++ } ++ isoToCalendarDate(isoDate, cache) { ++ const { year: isoYear, month: isoMonth, day: isoDay } = isoDate; ++ const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id }); ++ const cached = cache.get(key); ++ if (cached) ++ return cached; ++ const dateTimeFormat = this.getFormatter(); ++ let parts, isoString; ++ try { ++ isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay }); ++ parts = dateTimeFormat.formatToParts(new Date(isoString)); ++ } ++ catch (e) { ++ throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`); ++ } ++ const result = {}; ++ for (let { type, value } of parts) { ++ if (type === 'year') ++ result.eraYear = +value; ++ // TODO: remove this type annotation when `relatedYear` gets into TS lib types ++ if (type === 'relatedYear') ++ result.eraYear = +value; ++ if (type === 'month') { ++ const matches = /^([0-9]*)(.*?)$/.exec(value); ++ if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) { ++ throw new RangeError(`Unexpected month: ${value}`); ++ } ++ // If the month has no numeric part (should only see this for the Hebrew ++ // calendar with newer FF / Chromium versions; see ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a ++ // placeholder month index of `1` and rely on the derived class to ++ // calculate the correct month index from the month name stored in ++ // `monthExtra`. ++ result.month = matches[1] ? +matches[1] : 1; ++ if (result.month < 1) { ++ throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` + ++ ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'); ++ } ++ if (result.month > 13) { ++ throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` + ++ ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'); ++ } ++ // The ICU formats for the Hebrew calendar no longer support a numeric ++ // month format. So we'll rely on the derived class to interpret it. ++ // `monthExtra` is also used on the Chinese calendar to handle a suffix ++ // "bis" indicating a leap month. ++ if (matches[2]) ++ result.monthExtra = matches[2]; ++ } ++ if (type === 'day') ++ result.day = +value; ++ if (this.hasEra && type === 'era' && value != null && value !== '') { ++ // The convention for Temporal era values is lowercase, so following ++ // that convention in this prototype. Punctuation is removed, accented ++ // letters are normalized, and spaces are replaced with dashes. ++ // E.g.: "ERA0" => "era0", "Before R.O.C." => "before-roc", "En’ō" => "eno" ++ // The call to normalize() and the replacement regex deals with era ++ // names that contain non-ASCII characters like Japanese eras. Also ++ // ignore extra content in parentheses like JPN era date ranges. ++ value = value.split(' (')[0]; ++ result.era = value ++ .normalize('NFD') ++ .replace(/[^-0-9 \p{L}]/gu, '') ++ .replace(' ', '-') ++ .toLowerCase(); ++ } ++ } ++ if (result.eraYear === undefined) { ++ // Node 12 has outdated ICU data that lacks the `relatedYear` field in the ++ // output of Intl.DateTimeFormat.formatToParts. ++ throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`); ++ } ++ // Translate eras that may be handled differently by Temporal vs. by Intl ++ // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526. ++ if (this.reviseIntlEra) { ++ const { era, eraYear } = this.reviseIntlEra(result, isoDate); ++ result.era = era; ++ result.eraYear = eraYear; ++ } ++ if (this.checkIcuBugs) ++ this.checkIcuBugs(isoDate); ++ const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true); ++ if (calendarDate.year === undefined) ++ throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`); ++ if (calendarDate.month === undefined) ++ throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`); ++ if (calendarDate.day === undefined) ++ throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`); ++ cache.set(key, calendarDate); ++ // Also cache the reverse mapping ++ ['constrain', 'reject'].forEach((overflow) => { ++ const keyReverse = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: calendarDate.year, ++ month: calendarDate.month, ++ day: calendarDate.day, ++ overflow, ++ id: this.id ++ }); ++ cache.set(keyReverse, isoDate); ++ }); ++ return calendarDate; ++ } ++ validateCalendarDate(calendarDate) { ++ const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate; ++ // When there's a suffix (e.g. "5bis" for a leap month in Chinese calendar) ++ // the derived class must deal with it. ++ if (monthExtra !== undefined) ++ throw new RangeError('Unexpected `monthExtra` value'); ++ if (year === undefined && eraYear === undefined) ++ throw new TypeError('year or eraYear is required'); ++ if (month === undefined && monthCode === undefined) ++ throw new TypeError('month or monthCode is required'); ++ if (day === undefined) ++ throw new RangeError('Missing day'); ++ if (monthCode !== undefined) { ++ if (typeof monthCode !== 'string') { ++ throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`); ++ } ++ if (!/^M([01]?\d)(L?)$/.test(monthCode)) ++ throw new RangeError(`Invalid monthCode: ${monthCode}`); ++ } ++ if (this.constantEra) { ++ if (era !== undefined && era !== this.constantEra) { ++ throw new RangeError(`era must be ${this.constantEra}, not ${era}`); ++ } ++ if (eraYear !== undefined && year !== undefined && eraYear !== year) { ++ throw new RangeError(`eraYear ${eraYear} does not match year ${year}`); ++ } ++ } ++ } ++ /** ++ * Allows derived calendars to add additional fields and/or to make ++ * adjustments e.g. to set the era based on the date or to revise the month ++ * number in lunisolar calendars per ++ * https://github.com/tc39/proposal-temporal/issues/1203. ++ * ++ * The base implementation fills in missing values by assuming the simplest ++ * possible calendar: ++ * - no eras or a constant era defined in `.constantEra` ++ * - non-lunisolar calendar (no leap months) ++ * */ ++ adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', ++ // This param is only used by derived classes ++ // eslint-disable-next-line @typescript-eslint/no-unused-vars ++ fromLegacyDate = false) { ++ if (this.calendarType === 'lunisolar') ++ throw new RangeError('Override required for lunisolar calendars'); ++ let calendarDate = calendarDateParam; ++ this.validateCalendarDate(calendarDate); ++ // For calendars that always use the same era, set it here so that derived ++ // calendars won't need to implement this method simply to set the era. ++ if (this.constantEra) { ++ // year and eraYear always match when there's only one possible era ++ const { year, eraYear } = calendarDate; ++ calendarDate = { ++ ...calendarDate, ++ era: this.constantEra, ++ year: year !== undefined ? year : eraYear, ++ eraYear: eraYear !== undefined ? eraYear : year ++ }; ++ } ++ const largestMonth = this.monthsInYear(calendarDate, cache); ++ let { month, monthCode } = calendarDate; ++ ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth)); ++ return { ...calendarDate, month, monthCode }; ++ } ++ regulateMonthDayNaive(calendarDate, overflow, cache) { ++ const largestMonth = this.monthsInYear(calendarDate, cache); ++ let { month, day } = calendarDate; ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, largestMonth); ++ RejectToRange(day, 1, this.maximumMonthLength(calendarDate)); ++ } ++ else { ++ month = ConstrainToRange(month, 1, largestMonth); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month })); ++ } ++ return { ...calendarDate, month, day }; ++ } ++ calendarToIsoDate(dateParam, overflow = 'constrain', cache) { ++ const originalDate = dateParam; ++ // First, normalize the calendar date to ensure that (year, month, day) ++ // are all present, converting monthCode and eraYear if needed. ++ let date = this.adjustCalendarDate(dateParam, cache, overflow, false); ++ // Fix obviously out-of-bounds values. Values that are valid generally, but ++ // not in this particular year, may not be caught here for some calendars. ++ // If so, these will be handled lower below. ++ date = this.regulateMonthDayNaive(date, overflow, cache); ++ const { year, month, day } = date; ++ const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id }); ++ let cached = cache.get(key); ++ if (cached) ++ return cached; ++ // If YMD are present in the input but the input has been constrained ++ // already, then cache both the original value and the constrained value. ++ let keyOriginal; ++ if (originalDate.year !== undefined && ++ originalDate.month !== undefined && ++ originalDate.day !== undefined && ++ (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) { ++ keyOriginal = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: originalDate.year, ++ month: originalDate.month, ++ day: originalDate.day, ++ overflow, ++ id: this.id ++ }); ++ cached = cache.get(keyOriginal); ++ if (cached) ++ return cached; ++ } ++ // First, try to roughly guess the result ++ let isoEstimate = this.estimateIsoDate({ year, month, day }); ++ const calculateSameMonthResult = (diffDays) => { ++ // If the estimate is in the same year & month as the target, then we can ++ // calculate the result exactly and short-circuit any additional logic. ++ // This optimization assumes that months are continuous. It would break if ++ // a calendar skipped days, like the Julian->Gregorian switchover. But the ++ // only ICU calendars that currently skip days (japanese/roc/buddhist) is ++ // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) ++ // that's currently detected by `checkIcuBugs()` which will throw. So ++ // this optimization should be safe for all ICU calendars. ++ let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays); ++ if (date.day > this.minimumMonthLength(date)) { ++ // There's a chance that the calendar date is out of range. Throw or ++ // constrain if so. ++ let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache); ++ while (testCalendarDate.month !== month || testCalendarDate.year !== year) { ++ if (overflow === 'reject') { ++ throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`); ++ } ++ // Back up a day at a time until we're not hanging over the month end ++ testIsoEstimate = this.addDaysIso(testIsoEstimate, -1); ++ testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache); ++ } ++ } ++ return testIsoEstimate; ++ }; ++ let sign = 0; ++ let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ let diff = simpleDateDiff(date, roundtripEstimate); ++ if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) { ++ const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days; ++ isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate); ++ roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ diff = simpleDateDiff(date, roundtripEstimate); ++ if (diff.years === 0 && diff.months === 0) { ++ isoEstimate = calculateSameMonthResult(diff.days); ++ } ++ else { ++ sign = this.compareCalendarDates(date, roundtripEstimate); ++ } ++ } ++ // If the initial guess is not in the same month, then then bisect the ++ // distance to the target, starting with 8 days per step. ++ let increment = 8; ++ let maybeConstrained = false; ++ while (sign) { ++ isoEstimate = this.addDaysIso(isoEstimate, sign * increment); ++ const oldRoundtripEstimate = roundtripEstimate; ++ roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ const oldSign = sign; ++ sign = this.compareCalendarDates(date, roundtripEstimate); ++ if (sign) { ++ diff = simpleDateDiff(date, roundtripEstimate); ++ if (diff.years === 0 && diff.months === 0) { ++ isoEstimate = calculateSameMonthResult(diff.days); ++ // Signal the loop condition that there's a match. ++ sign = 0; ++ // If the calendar day is larger than the minimal length for this ++ // month, then it might be larger than the actual length of the month. ++ // So we won't cache it as the correct calendar date for this ISO ++ // date. ++ maybeConstrained = date.day > this.minimumMonthLength(date); ++ } ++ else if (oldSign && sign !== oldSign) { ++ if (increment > 1) { ++ // If the estimate overshot the target, try again with a smaller increment ++ // in the reverse direction. ++ increment /= 2; ++ } ++ else { ++ // Increment is 1, and neither the previous estimate nor the new ++ // estimate is correct. The only way that can happen is if the ++ // original date was an invalid value that will be constrained or ++ // rejected here. ++ if (overflow === 'reject') { ++ throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`); ++ } ++ else { ++ // To constrain, pick the earliest value ++ const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate); ++ // If current value is larger, then back up to the previous value. ++ if (order > 0) ++ isoEstimate = this.addDaysIso(isoEstimate, -1); ++ maybeConstrained = true; ++ sign = 0; ++ } ++ } ++ } ++ } ++ } ++ cache.set(key, isoEstimate); ++ if (keyOriginal) ++ cache.set(keyOriginal, isoEstimate); ++ if (date.year === undefined || ++ date.month === undefined || ++ date.day === undefined || ++ date.monthCode === undefined || ++ (this.hasEra && (date.era === undefined || date.eraYear === undefined))) { ++ throw new RangeError('Unexpected missing property'); ++ } ++ if (!maybeConstrained) { ++ // Also cache the reverse mapping ++ const keyReverse = JSON.stringify({ ++ func: 'isoToCalendarDate', ++ isoYear: isoEstimate.year, ++ isoMonth: isoEstimate.month, ++ isoDay: isoEstimate.day, ++ id: this.id ++ }); ++ cache.set(keyReverse, date); ++ } ++ return isoEstimate; ++ } ++ temporalToCalendarDate(date, cache) { ++ const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) }; ++ const result = this.isoToCalendarDate(isoDate, cache); ++ return result; ++ } ++ compareCalendarDates(date1Param, date2Param) { ++ // `date1` and `date2` are already records. The calls below simply validate ++ // that all three required fields are present. ++ const date1 = PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']); ++ const date2 = PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']); ++ if (date1.year !== date2.year) ++ return ComparisonResult(date1.year - date2.year); ++ if (date1.month !== date2.month) ++ return ComparisonResult(date1.month - date2.month); ++ if (date1.day !== date2.day) ++ return ComparisonResult(date1.day - date2.day); ++ return 0; ++ } ++ /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */ ++ regulateDate(calendarDate, overflow = 'constrain', cache) { ++ const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache); ++ return this.isoToCalendarDate(isoDate, cache); ++ } ++ addDaysIso(isoDate, days) { ++ const added = AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain'); ++ return added; ++ } ++ addDaysCalendar(calendarDate, days, cache) { ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ const addedIso = this.addDaysIso(isoDate, days); ++ const addedCalendar = this.isoToCalendarDate(addedIso, cache); ++ return addedCalendar; ++ } ++ addMonthsCalendar(calendarDateParam, months, overflow, cache) { ++ let calendarDate = calendarDateParam; ++ const { day } = calendarDate; ++ for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) { ++ const { month } = calendarDate; ++ const oldCalendarDate = calendarDate; ++ const days = months < 0 ++ ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache)) ++ : this.daysInMonth(calendarDate, cache); ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ let addedIso = this.addDaysIso(isoDate, days); ++ calendarDate = this.isoToCalendarDate(addedIso, cache); ++ // Normally, we can advance one month by adding the number of days in the ++ // current month. However, if we're at the end of the current month and ++ // the next month has fewer days, then we rolled over to the after-next ++ // month. Below we detect this condition and back up until we're back in ++ // the desired month. ++ if (months > 0) { ++ const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache); ++ while (calendarDate.month - 1 !== month % monthsInOldYear) { ++ addedIso = this.addDaysIso(addedIso, -1); ++ calendarDate = this.isoToCalendarDate(addedIso, cache); ++ } ++ } ++ if (calendarDate.day !== day) { ++ // try to retain the original day-of-month, if possible ++ calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache); ++ } ++ } ++ if (overflow === 'reject' && calendarDate.day !== day) { ++ throw new RangeError(`Day ${day} does not exist in resulting calendar month`); ++ } ++ return calendarDate; ++ } ++ addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) { ++ const { year, day, monthCode } = calendarDate; ++ const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache); ++ const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache); ++ const initialDays = days + weeks * 7; ++ const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache); ++ return addedDays; ++ } ++ untilCalendar(calendarOne, calendarTwo, largestUnit, cache) { ++ let days = 0; ++ let weeks = 0; ++ let months = 0; ++ let years = 0; ++ switch (largestUnit) { ++ case 'day': ++ days = this.calendarDaysUntil(calendarOne, calendarTwo, cache); ++ break; ++ case 'week': { ++ const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache); ++ days = totalDays % 7; ++ weeks = (totalDays - days) / 7; ++ break; ++ } ++ case 'month': ++ case 'year': { ++ const diffYears = calendarTwo.year - calendarOne.year; ++ const diffMonths = calendarTwo.month - calendarOne.month; ++ const diffDays = calendarTwo.day - calendarOne.day; ++ const sign = this.compareCalendarDates(calendarTwo, calendarOne); ++ if (!sign) { ++ return { years: 0, months: 0, weeks: 0, days: 0 }; ++ } ++ if (largestUnit === 'year' && diffYears) { ++ const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0); ++ years = isOneFurtherInYear ? diffYears - sign : diffYears; ++ } ++ const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne; ++ // Now we have less than one year remaining. Add one month at a time ++ // until we go over the target, then back up one month and calculate ++ // remaining days and weeks. ++ let current; ++ let next = yearsAdded; ++ do { ++ months += sign; ++ current = next; ++ next = this.addMonthsCalendar(current, sign, 'constrain', cache); ++ if (next.day !== calendarOne.day) { ++ // In case the day was constrained down, try to un-constrain it ++ next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache); ++ } ++ } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0); ++ months -= sign; // correct for loop above which overshoots by 1 ++ const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache); ++ days = remainingDays; ++ break; ++ } ++ } ++ return { years, months, weeks, days }; ++ } ++ daysInMonth(calendarDate, cache) { ++ // Add enough days to roll over to the next month. One we're in the next ++ // month, we can calculate the length of the current month. NOTE: This ++ // algorithm assumes that months are continuous. It would break if a ++ // calendar skipped days, like the Julian->Gregorian switchover. But the ++ // only ICU calendars that currently skip days (japanese/roc/buddhist) is a ++ // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) ++ // that's currently detected by `checkIcuBugs()` which will throw. So this ++ // code should be safe for all ICU calendars. ++ const { day } = calendarDate; ++ const max = this.maximumMonthLength(calendarDate); ++ const min = this.minimumMonthLength(calendarDate); ++ // easiest case: we already know the month length if min and max are the same. ++ if (min === max) ++ return min; ++ // Add enough days to get into the next month, without skipping it ++ const increment = day <= max - min ? max : min; ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ const addedIsoDate = this.addDaysIso(isoDate, increment); ++ const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache); ++ // Now back up to the last day of the original month ++ const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day); ++ const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache); ++ return endOfMonthCalendar.day; ++ } ++ daysInPreviousMonth(calendarDate, cache) { ++ const { day, month, year } = calendarDate; ++ // Check to see if we already know the month length, and return it if so ++ const previousMonthYear = month > 1 ? year : year - 1; ++ let previousMonthDate = { year: previousMonthYear, month, day: 1 }; ++ const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache); ++ previousMonthDate = { ...previousMonthDate, month: previousMonth }; ++ const min = this.minimumMonthLength(previousMonthDate); ++ const max = this.maximumMonthLength(previousMonthDate); ++ if (min === max) ++ return max; ++ const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day); ++ const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache); ++ return lastDayOfPreviousMonthCalendar.day; ++ } ++ startOfCalendarYear(calendarDate) { ++ return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 }; ++ } ++ startOfCalendarMonth(calendarDate) { ++ return { year: calendarDate.year, month: calendarDate.month, day: 1 }; ++ } ++ calendarDaysUntil(calendarOne, calendarTwo, cache) { ++ const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache); ++ const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache); ++ return this.isoDaysUntil(oneIso, twoIso); ++ } ++ isoDaysUntil(oneIso, twoIso) { ++ const duration = DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day'); ++ return duration.days; ++ } ++ monthDayFromFields(fields, overflow, cache) { ++ let { year, month, monthCode, day, era, eraYear } = fields; ++ if (monthCode === undefined) { ++ if (year === undefined && (era === undefined || eraYear === undefined)) { ++ throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required'); ++ } ++ ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow)); ++ } ++ let isoYear, isoMonth, isoDay; ++ let closestCalendar, closestIso; ++ // Look backwards starting from the calendar year of 1972-01-01 up to 100 ++ // calendar years to find a year that has this month and day. Normal months ++ // and days will match immediately, but for leap days and leap months we may ++ // have to look for a while. ++ const startDateIso = { year: 1972, month: 1, day: 1 }; ++ const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache); ++ for (let i = 0; i < 100; i++) { ++ const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache); ++ const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache); ++ const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache); ++ ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate); ++ if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) { ++ return { month: isoMonth, day: isoDay, year: isoYear }; ++ } ++ else if (overflow === 'constrain') { ++ // non-ISO constrain algorithm tries to find the closest date in a matching month ++ if (closestCalendar === undefined || ++ (roundTripCalendarDate.monthCode === closestCalendar.monthCode && ++ roundTripCalendarDate.day > closestCalendar.day)) { ++ closestCalendar = roundTripCalendarDate; ++ closestIso = isoDate; ++ } ++ } ++ } ++ if (overflow === 'constrain' && closestIso !== undefined) ++ return closestIso; ++ throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`); ++ } ++} ++class HebrewHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.id = 'hebrew'; ++ this.calendarType = 'lunisolar'; ++ this.months = { ++ Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 }, ++ Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } }, ++ Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } }, ++ Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 }, ++ Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 }, ++ Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 }, ++ 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 }, ++ 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 }, ++ Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 }, ++ Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 }, ++ Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 }, ++ Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 }, ++ Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 }, ++ Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 } ++ }; ++ // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ this.hasEra = false; ++ } ++ inLeapYear(calendarDate) { ++ const { year } = calendarDate; ++ // FYI: In addition to adding a month in leap years, the Hebrew calendar ++ // also has per-year changes to the number of days of Heshvan and Kislev. ++ // Given that these can be calculated by counting the number of days in ++ // those months, I assume that these DO NOT need to be exposed as ++ // Hebrew-only prototype fields or methods. ++ return (7 * year + 1) % 19 < 7; ++ } ++ monthsInYear(calendarDate) { ++ return this.inLeapYear(calendarDate) ? 13 : 12; ++ } ++ minimumMonthLength(calendarDate) { ++ return this.minMaxMonthLength(calendarDate, 'min'); ++ } ++ maximumMonthLength(calendarDate) { ++ return this.minMaxMonthLength(calendarDate, 'max'); ++ } ++ minMaxMonthLength(calendarDate, minOrMax) { ++ const { month, year } = calendarDate; ++ const monthCode = this.getMonthCode(year, month); ++ const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode); ++ if (monthInfo === undefined) ++ throw new RangeError(`unmatched Hebrew month: ${month}`); ++ const daysInMonth = monthInfo[1].days; ++ return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax]; ++ } ++ /** Take a guess at what ISO date a particular calendar date corresponds to */ ++ estimateIsoDate(calendarDate) { ++ const { year } = calendarDate; ++ return { year: year - 3760, month: 1, day: 1 }; ++ } ++ getMonthCode(year, month) { ++ if (this.inLeapYear({ year })) { ++ return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1); ++ } ++ else { ++ return buildMonthCode(month); ++ } ++ } ++ adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) { ++ // The incoming type is actually CalendarDate (same as args to ++ // Calendar.dateFromParams) but TS isn't smart enough to follow all the ++ // reassignments below, so as an alternative to 10+ type casts, we'll lie ++ // here and claim that the type has `day` and `year` filled in already. ++ let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate; ++ if (year === undefined && eraYear !== undefined) ++ year = eraYear; ++ if (eraYear === undefined && year !== undefined) ++ eraYear = year; ++ if (fromLegacyDate) { ++ // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'` ++ // output returns the numeric equivalent of `month` as a string, meaning ++ // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year ++ // means Adar. In this case, `month` will already be correct and no action ++ // is needed. However, in Node 14 and later formatToParts returns the name ++ // of the Hebrew month (e.g. "Tevet"), so we'll need to look up the ++ // correct `month` using the string name as a key. ++ if (monthExtra) { ++ const monthInfo = this.months[monthExtra]; ++ if (!monthInfo) ++ throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`); ++ month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular; ++ } ++ // Because we're getting data from legacy Date, then `month` will always be present ++ monthCode = this.getMonthCode(year, month); ++ const result = { year, month: month, day, era: undefined, eraYear, monthCode }; ++ return result; ++ } ++ else { ++ // When called without input coming from legacy Date output, simply ensure ++ // that all fields are present. ++ this.validateCalendarDate(calendarDate); ++ if (month === undefined) { ++ if (monthCode.endsWith('L')) { ++ if (monthCode !== 'M05L') { ++ throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`); ++ } ++ month = 6; ++ if (!this.inLeapYear({ year })) { ++ if (overflow === 'reject') { ++ throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`); ++ } ++ else { ++ // constrain to last day of previous month (Av) ++ month = 5; ++ day = 30; ++ monthCode = 'M05'; ++ } ++ } ++ } ++ else { ++ month = monthCodeNumberPart(monthCode); ++ // if leap month is before this one, the month index is one more than the month code ++ if (this.inLeapYear({ year }) && month >= 6) ++ month++; ++ const largestMonth = this.monthsInYear({ year }); ++ if (month < 1 || month > largestMonth) ++ throw new RangeError(`Invalid monthCode: ${monthCode}`); ++ } ++ } ++ else { ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, this.monthsInYear({ year })); ++ RejectToRange(day, 1, this.maximumMonthLength({ year, month })); ++ } ++ else { ++ month = ConstrainToRange(month, 1, this.monthsInYear({ year })); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength({ year, month })); ++ } ++ if (monthCode === undefined) { ++ monthCode = this.getMonthCode(year, month); ++ } ++ else { ++ const calculatedMonthCode = this.getMonthCode(year, month); ++ if (calculatedMonthCode !== monthCode) { ++ throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`); ++ } ++ } ++ } ++ return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear }; ++ } ++ } ++} ++/** ++ * For Temporal purposes, the Islamic calendar is simple because it's always the ++ * same 12 months in the same order. ++ */ ++class IslamicBaseHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.calendarType = 'lunar'; ++ this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30; ++ this.DAYS_PER_ISO_YEAR = 365.2425; ++ this.constantEra = 'ah'; ++ } ++ inLeapYear(calendarDate, cache) { ++ // In leap years, the 12th month has 30 days. In non-leap years: 29. ++ const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache); ++ return days === 30; ++ } ++ monthsInYear( /* calendarYear, cache */) { ++ return 12; ++ } ++ minimumMonthLength( /* calendarDate */) { ++ return 29; ++ } ++ maximumMonthLength( /* calendarDate */) { ++ return 30; ++ } ++ estimateIsoDate(calendarDate) { ++ const { year } = this.adjustCalendarDate(calendarDate); ++ return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 }; ++ } ++} ++// There are 6 Islamic calendars with the same implementation in this polyfill. ++// They vary only in their ID. They do emit different output from the underlying ++// Intl implementation, but our code for each of them is identical. ++class IslamicHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic'; ++ } ++} ++class IslamicUmalquraHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-umalqura'; ++ } ++} ++class IslamicTblaHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-tbla'; ++ } ++} ++class IslamicCivilHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-civil'; ++ } ++} ++class IslamicRgsaHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamic-rgsa'; ++ } ++} ++class IslamicCcHelper extends IslamicBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'islamicc'; ++ } ++} ++class PersianHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.id = 'persian'; ++ this.calendarType = 'solar'; ++ this.constantEra = 'ap'; ++ } ++ inLeapYear(calendarDate, cache) { ++ // Same logic (count days in the last month) for Persian as for Islamic, ++ // even though Persian is solar and Islamic is lunar. ++ return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache); ++ } ++ monthsInYear( /* calendarYear, cache */) { ++ return 12; ++ } ++ minimumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ if (month === 12) ++ return 29; ++ return month <= 6 ? 31 : 30; ++ } ++ maximumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ if (month === 12) ++ return 30; ++ return month <= 6 ? 31 : 30; ++ } ++ estimateIsoDate(calendarDate) { ++ const { year } = this.adjustCalendarDate(calendarDate); ++ return { year: year + 621, month: 1, day: 1 }; ++ } ++} ++class IndianHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.id = 'indian'; ++ this.calendarType = 'solar'; ++ this.constantEra = 'saka'; ++ // Indian months always start at the same well-known Gregorian month and ++ // day. So this conversion is easy and fast. See ++ // https://en.wikipedia.org/wiki/Indian_national_calendar ++ this.months = { ++ 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } }, ++ 2: { length: 31, month: 4, day: 21 }, ++ 3: { length: 31, month: 5, day: 22 }, ++ 4: { length: 31, month: 6, day: 22 }, ++ 5: { length: 31, month: 7, day: 23 }, ++ 6: { length: 31, month: 8, day: 23 }, ++ 7: { length: 30, month: 9, day: 23 }, ++ 8: { length: 30, month: 10, day: 23 }, ++ 9: { length: 30, month: 11, day: 22 }, ++ 10: { length: 30, month: 12, day: 22 }, ++ 11: { length: 30, month: 1, nextYear: true, day: 21 }, ++ 12: { length: 30, month: 2, nextYear: true, day: 20 } ++ }; ++ // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian ++ // calendar output to fail for all dates before 0001-01-01 ISO. For example, ++ // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as ++ // expected. ++ this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka'; ++ } ++ inLeapYear(calendarDate) { ++ // From https://en.wikipedia.org/wiki/Indian_national_calendar: ++ // Years are counted in the Saka era, which starts its year 0 in the year 78 ++ // of the Common Era. To determine leap years, add 78 to the Saka year – if ++ // the result is a leap year in the Gregorian calendar, then the Saka year ++ // is a leap year as well. ++ return isGregorianLeapYear(calendarDate.year + 78); ++ } ++ monthsInYear( /* calendarYear, cache */) { ++ return 12; ++ } ++ minimumMonthLength(calendarDate) { ++ return this.getMonthInfo(calendarDate).length; ++ } ++ maximumMonthLength(calendarDate) { ++ return this.getMonthInfo(calendarDate).length; ++ } ++ getMonthInfo(calendarDate) { ++ const { month } = calendarDate; ++ let monthInfo = this.months[month]; ++ if (monthInfo === undefined) ++ throw new RangeError(`Invalid month: ${month}`); ++ if (this.inLeapYear(calendarDate) && monthInfo.leap) ++ monthInfo = monthInfo.leap; ++ return monthInfo; ++ } ++ estimateIsoDate(calendarDateParam) { ++ // FYI, this "estimate" is always the exact ISO date, which makes the Indian ++ // calendar fast! ++ const calendarDate = this.adjustCalendarDate(calendarDateParam); ++ const monthInfo = this.getMonthInfo(calendarDate); ++ const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0); ++ const isoMonth = monthInfo.month; ++ const isoDay = monthInfo.day; ++ const isoDate = AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain'); ++ return isoDate; ++ } ++ checkIcuBugs(isoDate) { ++ if (this.vulnerableToBceBug && isoDate.year < 1) { ++ throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` + ++ ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'); ++ } ++ } ++} ++/** ++ * This function adds additional metadata that makes it easier to work with ++ * eras. Note that it mutates and normalizes the original era objects, which is ++ * OK because this is non-observable, internal-only metadata. ++ * ++ * The result is an array of eras with the shape defined above. ++ * */ ++function adjustEras(erasParam) { ++ let eras = erasParam; ++ if (eras.length === 0) { ++ throw new RangeError('Invalid era data: eras are required'); ++ } ++ if (eras.length === 1 && eras[0].reverseOf) { ++ throw new RangeError('Invalid era data: anchor era cannot count years backwards'); ++ } ++ if (eras.length === 1 && !eras[0].name) { ++ throw new RangeError('Invalid era data: at least one named era is required'); ++ } ++ if (eras.filter((e) => e.reverseOf != null).length > 1) { ++ throw new RangeError('Invalid era data: only one era can count years backwards'); ++ } ++ // Find the "anchor era" which is the era used for (era-less) `year`. Reversed ++ // eras can never be anchors. The era without an `anchorEpoch` property is the ++ // anchor. ++ let anchorEra; ++ eras.forEach((e) => { ++ if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) { ++ if (anchorEra) ++ throw new RangeError('Invalid era data: cannot have multiple anchor eras'); ++ anchorEra = e; ++ e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 }; ++ } ++ else if (!e.name) { ++ throw new RangeError('If era name is blank, it must be the anchor era'); ++ } ++ }); ++ // If the era name is undefined, then it's an anchor that doesn't interact ++ // with eras at all. For example, Japanese `year` is always the same as ISO ++ // `year`. So this "era" is the anchor era but isn't used for era matching. ++ // Strip it from the list that's returned. ++ eras = eras.filter((e) => e.name); ++ eras.forEach((e) => { ++ // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D. ++ // Replace the string-valued "reverseOf" property with the actual era object ++ // that's reversed. ++ const { reverseOf } = e; ++ if (reverseOf) { ++ const reversedEra = eras.find((era) => era.name === reverseOf); ++ if (reversedEra === undefined) ++ throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`); ++ e.reverseOf = reversedEra; ++ e.anchorEpoch = reversedEra.anchorEpoch; ++ e.isoEpoch = reversedEra.isoEpoch; ++ } ++ if (e.anchorEpoch.month === undefined) ++ e.anchorEpoch.month = 1; ++ if (e.anchorEpoch.day === undefined) ++ e.anchorEpoch.day = 1; ++ }); ++ // Ensure that the latest epoch is first in the array. This lets us try to ++ // match eras in index order, with the last era getting the remaining older ++ // years. Any reverse-signed era must be at the end. ++ ArraySort.call(eras, (e1, e2) => { ++ if (e1.reverseOf) ++ return 1; ++ if (e2.reverseOf) ++ return -1; ++ if (!e1.isoEpoch || !e2.isoEpoch) ++ throw new RangeError('Invalid era data: missing ISO epoch'); ++ return e2.isoEpoch.year - e1.isoEpoch.year; ++ }); ++ // If there's a reversed era, then the one before it must be the era that's ++ // being reversed. ++ const lastEraReversed = eras[eras.length - 1].reverseOf; ++ if (lastEraReversed) { ++ if (lastEraReversed !== eras[eras.length - 2]) ++ throw new RangeError('Invalid era data: invalid reverse-sign era'); ++ } ++ // Finally, add a "genericName" property in the format "era{n} where `n` is ++ // zero-based index, with the oldest era being zero. This format is used by ++ // older versions of ICU data. ++ eras.forEach((e, i) => { ++ e.genericName = `era${eras.length - 1 - i}`; ++ }); ++ return { eras: eras, anchorEra: (anchorEra || eras[0]) }; ++} ++function isGregorianLeapYear(year) { ++ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); ++} ++/** Base for all Gregorian-like calendars. */ ++class GregorianBaseHelper extends HelperBase { ++ constructor(id, originalEras) { ++ super(); ++ this.calendarType = 'solar'; ++ // Several calendars based on the Gregorian calendar use Julian dates (not ++ // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See ++ // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158. ++ this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z') ++ .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' }) ++ .startsWith('12'); ++ this.calendarIsVulnerableToJulianBug = false; ++ this.id = id; ++ const { eras, anchorEra } = adjustEras(originalEras); ++ this.anchorEra = anchorEra; ++ this.eras = eras; ++ } ++ inLeapYear(calendarDate) { ++ // Calendars that don't override this method use the same months and leap ++ // years as Gregorian. Once we know the ISO year corresponding to the ++ // calendar year, we'll know if it's a leap year or not. ++ const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year }); ++ return isGregorianLeapYear(year); ++ } ++ monthsInYear( /* calendarDate */) { ++ return 12; ++ } ++ minimumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ if (month === 2) ++ return this.inLeapYear(calendarDate) ? 29 : 28; ++ return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31; ++ } ++ maximumMonthLength(calendarDate) { ++ return this.minimumMonthLength(calendarDate); ++ } ++ /** Fill in missing parts of the (year, era, eraYear) tuple */ ++ completeEraYear(calendarDate) { ++ const checkField = (name, value) => { ++ const currentValue = calendarDate[name]; ++ if (currentValue != null && currentValue != value) { ++ throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`); ++ } ++ }; ++ const eraFromYear = (year) => { ++ let eraYear; ++ const adjustedCalendarDate = { ...calendarDate, year }; ++ const matchingEra = this.eras.find((e, i) => { ++ if (i === this.eras.length - 1) { ++ if (e.reverseOf) { ++ // This is a reverse-sign era (like BCE) which must be the oldest ++ // era. Count years backwards. ++ if (year > 0) ++ throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`); ++ eraYear = e.anchorEpoch.year - year; ++ return true; ++ } ++ // last era always gets all "leftover" (older than epoch) years, ++ // so no need for a comparison like below. ++ eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1); ++ return true; ++ } ++ const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch); ++ if (comparison >= 0) { ++ eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1); ++ return true; ++ } ++ return false; ++ }); ++ if (!matchingEra) ++ throw new RangeError(`Year ${year} was not matched by any era`); ++ return { eraYear: eraYear, era: matchingEra.name }; ++ }; ++ let { year, eraYear, era } = calendarDate; ++ if (year != null) { ++ ({ eraYear, era } = eraFromYear(year)); ++ checkField('era', era); ++ checkField('eraYear', eraYear); ++ } ++ else if (eraYear != null) { ++ const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era); ++ if (!matchingEra) ++ throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`); ++ if (eraYear < 1 && matchingEra.reverseOf) { ++ throw new RangeError(`Years in ${era} era must be positive, not ${year}`); ++ } ++ if (matchingEra.reverseOf) { ++ year = matchingEra.anchorEpoch.year - eraYear; ++ } ++ else { ++ year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1); ++ } ++ checkField('year', year); ++ // We'll accept dates where the month/day is earlier than the start of ++ // the era or after its end as long as it's in the same year. If that ++ // happens, we'll adjust the era/eraYear pair to be the correct era for ++ // the `year`. ++ ({ eraYear, era } = eraFromYear(year)); ++ } ++ else { ++ throw new RangeError('Either `year` or `eraYear` and `era` are required'); ++ } ++ return { ...calendarDate, year, eraYear, era }; ++ } ++ adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') { ++ let calendarDate = calendarDateParam; ++ // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number ++ const { month, monthCode } = calendarDate; ++ if (month === undefined) ++ calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) }; ++ this.validateCalendarDate(calendarDate); ++ calendarDate = this.completeEraYear(calendarDate); ++ return super.adjustCalendarDate(calendarDate, cache, overflow); ++ } ++ estimateIsoDate(calendarDateParam) { ++ const calendarDate = this.adjustCalendarDate(calendarDateParam); ++ const { year, month, day } = calendarDate; ++ const { anchorEra } = this; ++ const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1); ++ return RegulateISODate(isoYearEstimate, month, day, 'constrain'); ++ } ++ checkIcuBugs(isoDate) { ++ if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) { ++ const beforeJulianSwitch = CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0; ++ if (beforeJulianSwitch) { ++ throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` + ++ ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)'); ++ } ++ } ++ } ++} ++class OrthodoxBaseHelper extends GregorianBaseHelper { ++ constructor(id, originalEras) { ++ super(id, originalEras); ++ } ++ inLeapYear(calendarDate) { ++ // Leap years happen one year before the Julian leap year. Note that this ++ // calendar is based on the Julian calendar which has a leap year every 4 ++ // years, unlike the Gregorian calendar which doesn't have leap years on ++ // years divisible by 100 except years divisible by 400. ++ // ++ // Note that we're assuming that leap years in before-epoch times match ++ // how leap years are defined now. This is probably not accurate but I'm ++ // not sure how better to do it. ++ const { year } = calendarDate; ++ return (year + 1) % 4 === 0; ++ } ++ monthsInYear( /* calendarDate */) { ++ return 13; ++ } ++ minimumMonthLength(calendarDate) { ++ const { month } = calendarDate; ++ // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month. ++ if (month === 13) ++ return this.inLeapYear(calendarDate) ? 6 : 5; ++ return 30; ++ } ++ maximumMonthLength(calendarDate) { ++ return this.minimumMonthLength(calendarDate); ++ } ++} ++// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar, ++// with the following differences: ++// - Coptic uses BCE-like positive numbers for years before its epoch (the other ++// two use negative year numbers before epoch) ++// - Coptic has a different epoch date ++// - Ethiopic has an additional second era that starts at the same date as the ++// zero era of ethioaa. ++class EthioaaHelper extends OrthodoxBaseHelper { ++ constructor() { ++ super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]); ++ } ++} ++class CopticHelper extends OrthodoxBaseHelper { ++ constructor() { ++ super('coptic', [ ++ { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } }, ++ { name: 'era0', reverseOf: 'era1' } ++ ]); ++ } ++} ++// Anchor is currently the older era to match ethioaa, but should it be the newer era? ++// See https://github.com/tc39/ecma402/issues/534 for discussion. ++class EthiopicHelper extends OrthodoxBaseHelper { ++ constructor() { ++ super('ethiopic', [ ++ { name: 'aa', isoEpoch: { year: -5492, month: 7, day: 17 } }, ++ { name: 'am', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } } ++ ]); ++ } ++} ++class RocHelper extends GregorianBaseHelper { ++ constructor() { ++ super('roc', [ ++ { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } }, ++ { name: 'before-roc', reverseOf: 'minguo' } ++ ]); ++ this.calendarIsVulnerableToJulianBug = true; ++ } ++} ++class BuddhistHelper extends GregorianBaseHelper { ++ constructor() { ++ super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]); ++ this.calendarIsVulnerableToJulianBug = true; ++ } ++} ++class GregoryHelper extends GregorianBaseHelper { ++ constructor() { ++ super('gregory', [ ++ { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } }, ++ { name: 'bce', reverseOf: 'ce' } ++ ]); ++ } ++ reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) { ++ let { era, eraYear } = calendarDate; ++ // Firefox 96 introduced a bug where the `'short'` format of the era ++ // option mistakenly returns the one-letter (narrow) format instead. The ++ // code below handles either the correct or Firefox-buggy format. See ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253 ++ if (era === 'bc' || era === 'b') ++ era = 'bce'; ++ if (era === 'ad' || era === 'a') ++ era = 'ce'; ++ return { era, eraYear }; ++ } ++} ++// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates ++// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji ++// eras include: ++// - Start/end dates of older eras are not precisely defined, which is ++// challenging given Temporal's need for precision ++// - Some era dates and/or names are disputed by historians ++// - As historical research proceeds, new eras are discovered and existing era ++// dates are modified, leading to considerable churn which is not good for ++// Temporal use. ++// - The earliest era (in 645 CE) may not end up being the earliest depending ++// on future historical scholarship ++// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK ++// that's not reflected in the ICU implementation. ++// ++// For more discussion: https://github.com/tc39/proposal-temporal/issues/526. ++// ++// Here's a full list of CLDR/ICU eras: ++// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818 ++// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546 ++// ++// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a ++// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not ++// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402 ++// Japanese calendar doesn't seem to take this into account, so neither do we: ++// > args = ['en-ca-u-ca-japanese', { era: 'short' }] ++// > new Date('1873-01-01T12:00').toLocaleString(...args) ++// '1 1, 6 Meiji, 12:00:00 PM' ++// > new Date('1872-12-31T12:00').toLocaleString(...args) ++// '12 31, 5 Meiji, 12:00:00 PM' ++class JapaneseHelper extends GregorianBaseHelper { ++ constructor() { ++ super('japanese', [ ++ // The Japanese calendar `year` is just the ISO year, because (unlike other ++ // ICU calendars) there's no obvious "default era", we use the ISO year. ++ { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } }, ++ { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } }, ++ { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } }, ++ { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } }, ++ { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } }, ++ { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } }, ++ { name: 'bce', reverseOf: 'ce' } ++ ]); ++ this.calendarIsVulnerableToJulianBug = true; ++ // The last 3 Japanese eras confusingly return only one character in the ++ // default "short" era, so need to use the long format. ++ this.eraLength = 'long'; ++ } ++ reviseIntlEra(calendarDate, isoDate) { ++ const { era, eraYear } = calendarDate; ++ const { year: isoYear } = isoDate; ++ if (this.eras.find((e) => e.name === era)) ++ return { era, eraYear }; ++ return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear }); ++ } ++} ++class ChineseBaseHelper extends HelperBase { ++ constructor() { ++ super(...arguments); ++ this.calendarType = 'lunisolar'; ++ // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ this.hasEra = false; ++ } ++ inLeapYear(calendarDate, cache) { ++ const months = this.getMonthList(calendarDate.year, cache); ++ return ObjectEntries(months).length === 13; ++ } ++ monthsInYear(calendarDate, cache) { ++ return this.inLeapYear(calendarDate, cache) ? 13 : 12; ++ } ++ minimumMonthLength( /* calendarDate */) { ++ return 29; ++ } ++ maximumMonthLength( /* calendarDate */) { ++ return 30; ++ } ++ getMonthList(calendarYear, cache) { ++ if (calendarYear === undefined) { ++ throw new TypeError('Missing year'); ++ } ++ const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id }); ++ const cached = cache.get(key); ++ if (cached) ++ return cached; ++ const dateTimeFormat = this.getFormatter(); ++ const getCalendarDate = (isoYear, daysPastFeb1) => { ++ const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 }); ++ const legacyDate = new Date(isoStringFeb1); ++ // Now add the requested number of days, which may wrap to the next month. ++ legacyDate.setUTCDate(daysPastFeb1 + 1); ++ const newYearGuess = dateTimeFormat.formatToParts(legacyDate); ++ const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value; ++ const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value; ++ let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear'); ++ if (calendarYearToVerify !== undefined) { ++ calendarYearToVerify = +calendarYearToVerify.value; ++ } ++ else { ++ // Node 12 has outdated ICU data that lacks the `relatedYear` field in the ++ // output of Intl.DateTimeFormat.formatToParts. ++ throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`); ++ } ++ return { calendarMonthString, calendarDay, calendarYearToVerify }; ++ }; ++ // First, find a date close to Chinese New Year. Feb 17 will either be in ++ // the first month or near the end of the last month of the previous year. ++ let isoDaysDelta = 17; ++ let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta); ++ // If we didn't guess the first month correctly, add (almost in some months) ++ // a lunar month ++ if (calendarMonthString !== '1') { ++ isoDaysDelta += 29; ++ ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta)); ++ } ++ // Now back up to near the start of the first month, but not too near that ++ // off-by-one issues matter. ++ isoDaysDelta -= calendarDay - 5; ++ const result = {}; ++ let monthIndex = 1; ++ let oldCalendarDay; ++ let oldMonthString; ++ let done = false; ++ do { ++ ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta)); ++ if (oldCalendarDay) { ++ result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay; ++ } ++ if (calendarYearToVerify !== calendarYear) { ++ done = true; ++ } ++ else { ++ result[calendarMonthString] = { monthIndex: monthIndex++ }; ++ // Move to the next month. Because months are sometimes 29 days, the day of the ++ // calendar month will move forward slowly but not enough to flip over to a new ++ // month before the loop ends at 12-13 months. ++ isoDaysDelta += 30; ++ } ++ oldCalendarDay = calendarDay; ++ oldMonthString = calendarMonthString; ++ } while (!done); ++ result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay; ++ cache.set(key, result); ++ return result; ++ } ++ estimateIsoDate(calendarDate) { ++ const { year, month } = calendarDate; ++ return { year, month: month >= 12 ? 12 : month + 1, day: 1 }; ++ } ++ adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) { ++ let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate; ++ if (fromLegacyDate) { ++ // Legacy Date output returns a string that's an integer with an optional ++ // "bis" suffix used only by the Chinese/Dangi calendar to indicate a leap ++ // month. Below we'll normalize the output. ++ year = eraYear; ++ if (monthExtra && monthExtra !== 'bis') ++ throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`); ++ const monthCode = buildMonthCode(month, monthExtra !== undefined); ++ const monthString = `${month}${monthExtra || ''}`; ++ const months = this.getMonthList(year, cache); ++ const monthInfo = months[monthString]; ++ if (monthInfo === undefined) ++ throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`); ++ month = monthInfo.monthIndex; ++ return { year: year, month, day: day, era: undefined, eraYear, monthCode }; ++ } ++ else { ++ // When called without input coming from legacy Date output, ++ // simply ensure that all fields are present. ++ this.validateCalendarDate(calendarDate); ++ if (year === undefined) ++ year = eraYear; ++ if (eraYear === undefined) ++ eraYear = year; ++ if (month === undefined) { ++ const months = this.getMonthList(year, cache); ++ let numberPart = monthCode.replace('L', 'bis').slice(1); ++ if (numberPart[0] === '0') ++ numberPart = numberPart.slice(1); ++ let monthInfo = months[numberPart]; ++ month = monthInfo && monthInfo.monthIndex; ++ // If this leap month isn't present in this year, constrain down to the last day of the previous month. ++ if (month === undefined && ++ monthCode.endsWith('L') && ++ !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) && ++ overflow === 'constrain') { ++ let withoutML = monthCode.slice(1, -1); ++ if (withoutML[0] === '0') ++ withoutML = withoutML.slice(1); ++ monthInfo = months[withoutML]; ++ if (monthInfo) { ++ ({ daysInMonth: day, monthIndex: month } = monthInfo); ++ monthCode = buildMonthCode(withoutML); ++ } ++ } ++ if (month === undefined) { ++ throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`); ++ } ++ } ++ else if (monthCode === undefined) { ++ const months = this.getMonthList(year, cache); ++ const monthEntries = ObjectEntries(months); ++ const largestMonth = monthEntries.length; ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, largestMonth); ++ RejectToRange(day, 1, this.maximumMonthLength()); ++ } ++ else { ++ month = ConstrainToRange(month, 1, largestMonth); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength()); ++ } ++ const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month); ++ if (matchingMonthEntry === undefined) { ++ throw new RangeError(`Invalid month ${month} in Chinese year ${year}`); ++ } ++ monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1); ++ } ++ else { ++ // Both month and monthCode are present. Make sure they don't conflict. ++ const months = this.getMonthList(year, cache); ++ let numberPart = monthCode.replace('L', 'bis').slice(1); ++ if (numberPart[0] === '0') ++ numberPart = numberPart.slice(1); ++ const monthInfo = months[numberPart]; ++ if (!monthInfo) ++ throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`); ++ if (month !== monthInfo.monthIndex) { ++ throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`); ++ } ++ } ++ return { ++ ...calendarDate, ++ year: year, ++ eraYear, ++ month, ++ monthCode: monthCode, ++ day: day ++ }; ++ } ++ } ++} ++class ChineseHelper extends ChineseBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'chinese'; ++ } ++} ++// Dangi (Korean) calendar has same implementation as Chinese ++class DangiHelper extends ChineseBaseHelper { ++ constructor() { ++ super(...arguments); ++ this.id = 'dangi'; ++ } ++} ++/** ++ * Common implementation of all non-ISO calendars. ++ * Per-calendar id and logic live in `id` and `helper` properties attached later. ++ * This split allowed an easy separation between code that was similar between ++ * ISO and non-ISO implementations vs. code that was very different. ++ */ ++const nonIsoImpl = { ++ // `helper` is added when this object is spread into each calendar's ++ // implementation ++ helper: undefined, ++ dateFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ const cache = new OneObjectCache(); ++ // Intentionally alphabetical ++ const fields = PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']); ++ const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache); ++ const result = CreateTemporalDate(year, month, day, calendar); ++ cache.setObject(result); ++ return result; ++ }, ++ yearMonthFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ const cache = new OneObjectCache(); ++ // Intentionally alphabetical ++ const fields = PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []); ++ const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache); ++ const result = CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day); ++ cache.setObject(result); ++ return result; ++ }, ++ monthDayFromFields(fieldsParam, options, calendar) { ++ const overflow = ToTemporalOverflow(options); ++ // All built-in calendars require `day`, but some allow other fields to be ++ // substituted for `month`. And for lunisolar calendars, either `monthCode` ++ // or `year` must be provided because `month` is ambiguous without a year or ++ // a code. ++ const cache = new OneObjectCache(); ++ const fields = PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']); ++ const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache); ++ // `year` is a reference year where this month/day exists in this calendar ++ const result = CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year); ++ cache.setObject(result); ++ return result; ++ }, ++ fields(fieldsParam) { ++ let fields = fieldsParam; ++ if (ArrayIncludes.call(fields, 'year')) ++ fields = [...fields, 'era', 'eraYear']; ++ return fields; ++ }, ++ mergeFields(fields, additionalFields) { ++ const fieldsCopy = { ...fields }; ++ const additionalFieldsCopy = { ...additionalFields }; ++ // era and eraYear are intentionally unused ++ // eslint-disable-next-line @typescript-eslint/no-unused-vars ++ const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy; ++ const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy; ++ if (newMonth === undefined && newMonthCode === undefined) { ++ original.month = month; ++ original.monthCode = monthCode; ++ } ++ if (newYear === undefined && newEra === undefined && newEraYear === undefined) { ++ // Only `year` is needed. We don't set era and eraYear because it's ++ // possible to create a conflict for eras that start or end mid-year. See ++ // https://github.com/tc39/proposal-temporal/issues/1784. ++ original.year = year; ++ } ++ return { ...original, ...additionalFieldsCopy }; ++ }, ++ dateAdd(date, years, months, weeks, days, overflow, calendar) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache); ++ const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache); ++ const { year, month, day } = isoAdded; ++ const newTemporalObject = CreateTemporalDate(year, month, day, calendar); ++ // The new object's cache starts with the cache of the old object ++ const newCache = new OneObjectCache(cache); ++ newCache.setObject(newTemporalObject); ++ return newTemporalObject; ++ }, ++ dateUntil(one, two, largestUnit) { ++ const cacheOne = OneObjectCache.getCacheForObject(one); ++ const cacheTwo = OneObjectCache.getCacheForObject(two); ++ const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne); ++ const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo); ++ const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne); ++ return result; ++ }, ++ year(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.year; ++ }, ++ month(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.month; ++ }, ++ day(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.day; ++ }, ++ era(date) { ++ if (!this.helper.hasEra) ++ return undefined; ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.era; ++ }, ++ eraYear(date) { ++ if (!this.helper.hasEra) ++ return undefined; ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.eraYear; ++ }, ++ monthCode(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.monthCode; ++ }, ++ dayOfWeek(date) { ++ return impl['iso8601'].dayOfWeek(date); ++ }, ++ dayOfYear(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.isoToCalendarDate(date, cache); ++ const startOfYear = this.helper.startOfCalendarYear(calendarDate); ++ const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache); ++ return diffDays + 1; ++ }, ++ weekOfYear(date) { ++ return impl['iso8601'].weekOfYear(date); ++ }, ++ daysInWeek(date) { ++ return impl['iso8601'].daysInWeek(date); ++ }, ++ daysInMonth(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ // Easy case: if the helper knows the length without any heavy calculation. ++ const max = this.helper.maximumMonthLength(calendarDate); ++ const min = this.helper.minimumMonthLength(calendarDate); ++ if (max === min) ++ return max; ++ // The harder case is where months vary every year, e.g. islamic calendars. ++ // Find the answer by calculating the difference in days between the first ++ // day of the current month and the first day of the next month. ++ const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate); ++ const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache); ++ const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache); ++ return result; ++ }, ++ daysInYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate); ++ const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache); ++ const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache); ++ return result; ++ }, ++ monthsInYear(date) { ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const result = this.helper.monthsInYear(calendarDate, cache); ++ return result; ++ }, ++ inLeapYear(dateParam) { ++ let date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) ++ date = ToTemporalDate(date); ++ const cache = OneObjectCache.getCacheForObject(date); ++ const calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ const result = this.helper.inLeapYear(calendarDate, cache); ++ return result; ++ } ++}; ++for (const Helper of [ ++ HebrewHelper, ++ PersianHelper, ++ EthiopicHelper, ++ EthioaaHelper, ++ CopticHelper, ++ ChineseHelper, ++ DangiHelper, ++ RocHelper, ++ IndianHelper, ++ BuddhistHelper, ++ GregoryHelper, ++ JapaneseHelper, ++ IslamicHelper, ++ IslamicUmalquraHelper, ++ IslamicTblaHelper, ++ IslamicCivilHelper, ++ IslamicRgsaHelper, ++ IslamicCcHelper ++]) { ++ const helper = new Helper(); ++ // Clone the singleton non-ISO implementation that's the same for all ++ // calendars. The `helper` property contains per-calendar logic. ++ impl[helper.id] = { ...nonIsoImpl, helper }; ++} ++ ++class PlainDate { ++ constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = GetISO8601Calendar()) { ++ const isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalDateSlots. This check ++ // exists only to improve the error message. ++ if (arguments.length < 3) { ++ throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required'); ++ } ++ CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar); ++ } ++ get calendar() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get era() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ get eraYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ get year() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ get month() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthCode() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get day() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfWeek() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get weekOfYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInWeek() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), this); ++ } ++ get daysInMonth() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ get daysInYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ get monthsInYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ get inLeapYear() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ with(temporalDateLike, optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalDateLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalDateLike); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const props = PrepareTemporalFields(temporalDateLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid date-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarDateFromFields(calendar, fields, options); ++ } ++ withCalendar(calendarParam) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar); ++ } ++ add(temporalDurationLike, optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const duration = ToTemporalDuration(temporalDurationLike); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options); ++ } ++ subtract(temporalDurationLike, optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const duration = CreateNegatedTemporalDuration(ToTemporalDuration(temporalDurationLike)); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDate('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDate('since', this, other, options); ++ } ++ equals(otherParam) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalDate(otherParam); ++ for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const showCalendar = ToShowCalendarOption(options); ++ return TemporalDateToString(this, showCalendar); ++ } ++ toJSON() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainDate'); ++ } ++ toPlainDateTime(temporalTimeParam = undefined) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const year = GetSlot(this, ISO_YEAR); ++ const month = GetSlot(this, ISO_MONTH); ++ const day = GetSlot(this, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ if (temporalTimeParam === undefined) ++ return CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar); ++ const temporalTime = ToTemporalTime(temporalTimeParam); ++ const hour = GetSlot(temporalTime, ISO_HOUR); ++ const minute = GetSlot(temporalTime, ISO_MINUTE); ++ const second = GetSlot(temporalTime, ISO_SECOND); ++ const millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ toZonedDateTime(item) { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ let timeZone, temporalTime; ++ if (IsObject(item)) { ++ const timeZoneLike = item.timeZone; ++ if (timeZoneLike === undefined) { ++ // The cast below is needed because it's possible here for ++ // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`, ++ // not a TimeZoneProtocol. ++ // TODO: should we check for that shape to improve on the (bad) error ++ // message that the caller will get from ToTemporalTimeZone? ++ timeZone = ToTemporalTimeZone(item); ++ } ++ else { ++ timeZone = ToTemporalTimeZone(timeZoneLike); ++ temporalTime = item.plainTime; ++ } ++ } ++ else { ++ timeZone = ToTemporalTimeZone(item); ++ } ++ const year = GetSlot(this, ISO_YEAR); ++ const month = GetSlot(this, ISO_MONTH); ++ const day = GetSlot(this, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0; ++ if (temporalTime !== undefined) { ++ temporalTime = ToTemporalTime(temporalTime); ++ hour = GetSlot(temporalTime, ISO_HOUR); ++ minute = GetSlot(temporalTime, ISO_MINUTE); ++ second = GetSlot(temporalTime, ISO_SECOND); ++ millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ } ++ const dt = CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ toPlainYearMonth() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ toPlainMonthDay() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ getISOFields() { ++ if (!IsTemporalDate(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalDate(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR)); ++ } ++ return ToTemporalDate(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalDate(oneParam); ++ const two = ToTemporalDate(twoParam); ++ return CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY)); ++ } ++} ++MakeIntrinsicClass(PlainDate, 'Temporal.PlainDate'); ++ ++class PlainDateTime { ++ constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = GetISO8601Calendar()) { ++ const isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ const hour = ToIntegerThrowOnInfinity(hourParam); ++ const minute = ToIntegerThrowOnInfinity(minuteParam); ++ const second = ToIntegerThrowOnInfinity(secondParam); ++ const millisecond = ToIntegerThrowOnInfinity(millisecondParam); ++ const microsecond = ToIntegerThrowOnInfinity(microsecondParam); ++ const nanosecond = ToIntegerThrowOnInfinity(nanosecondParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This ++ // check exists only to improve the error message. ++ if (arguments.length < 3) { ++ throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required'); ++ } ++ CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ get calendar() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get year() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ get month() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthCode() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get day() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ get hour() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_HOUR); ++ } ++ get minute() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MINUTE); ++ } ++ get second() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_SECOND); ++ } ++ get millisecond() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MILLISECOND); ++ } ++ get microsecond() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MICROSECOND); ++ } ++ get nanosecond() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_NANOSECOND); ++ } ++ get era() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ get eraYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfWeek() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), this); ++ } ++ get dayOfYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get weekOfYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInWeek() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), this); ++ } ++ get daysInYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInMonth() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthsInYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ get inLeapYear() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ with(temporalDateTimeLike, optionsParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalDateTimeLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike); ++ const options = GetOptionsObject(optionsParam); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const props = PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid date-time-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ withPlainTime(temporalTimeParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const year = GetSlot(this, ISO_YEAR); ++ const month = GetSlot(this, ISO_MONTH); ++ const day = GetSlot(this, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ if (temporalTimeParam === undefined) ++ return CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar); ++ const temporalTime = ToTemporalTime(temporalTimeParam); ++ const hour = GetSlot(temporalTime, ISO_HOUR); ++ const minute = GetSlot(temporalTime, ISO_MINUTE); ++ const second = GetSlot(temporalTime, ISO_SECOND); ++ const millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ withPlainDate(temporalDateParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const temporalDate = ToTemporalDate(temporalDateParam); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ let calendar = GetSlot(temporalDate, CALENDAR); ++ const hour = GetSlot(this, ISO_HOUR); ++ const minute = GetSlot(this, ISO_MINUTE); ++ const second = GetSlot(this, ISO_SECOND); ++ const millisecond = GetSlot(this, ISO_MILLISECOND); ++ const microsecond = GetSlot(this, ISO_MICROSECOND); ++ const nanosecond = GetSlot(this, ISO_NANOSECOND); ++ calendar = ConsolidateCalendars(GetSlot(this, CALENDAR), calendar); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ withCalendar(calendarParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar); ++ } ++ add(temporalDurationLike, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options); ++ } ++ subtract(temporalDurationLike, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDateTime('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDateTime('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED, ['day']); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const maximumIncrements = { ++ day: 1, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++ let year = GetSlot(this, ISO_YEAR); ++ let month = GetSlot(this, ISO_MONTH); ++ let day = GetSlot(this, ISO_DAY); ++ let hour = GetSlot(this, ISO_HOUR); ++ let minute = GetSlot(this, ISO_MINUTE); ++ let second = GetSlot(this, ISO_SECOND); ++ let millisecond = GetSlot(this, ISO_MILLISECOND); ++ let microsecond = GetSlot(this, ISO_MICROSECOND); ++ let nanosecond = GetSlot(this, ISO_NANOSECOND); ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode)); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR)); ++ } ++ equals(otherParam) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalDateTime(otherParam); ++ for (const slot of [ ++ ISO_YEAR, ++ ISO_MONTH, ++ ISO_DAY, ++ ISO_HOUR, ++ ISO_MINUTE, ++ ISO_SECOND, ++ ISO_MILLISECOND, ++ ISO_MICROSECOND, ++ ISO_NANOSECOND ++ ]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const showCalendar = ToShowCalendarOption(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode }); ++ } ++ toJSON() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToString(this, 'auto'); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime'); ++ } ++ toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const timeZone = ToTemporalTimeZone(temporalTimeZoneLike); ++ const options = GetOptionsObject(optionsParam); ++ const disambiguation = ToTemporalDisambiguation(options); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR)); ++ } ++ toPlainDate() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToDate(this); ++ } ++ toPlainYearMonth() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ toPlainMonthDay() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ toPlainTime() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToTime(this); ++ } ++ getISOFields() { ++ if (!IsTemporalDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoHour: GetSlot(this, ISO_HOUR), ++ isoMicrosecond: GetSlot(this, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(this, ISO_MILLISECOND), ++ isoMinute: GetSlot(this, ISO_MINUTE), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoNanosecond: GetSlot(this, ISO_NANOSECOND), ++ isoSecond: GetSlot(this, ISO_SECOND), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR)); ++ } ++ return ToTemporalDateTime(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalDateTime(oneParam); ++ const two = ToTemporalDateTime(twoParam); ++ for (const slot of [ ++ ISO_YEAR, ++ ISO_MONTH, ++ ISO_DAY, ++ ISO_HOUR, ++ ISO_MINUTE, ++ ISO_SECOND, ++ ISO_MILLISECOND, ++ ISO_MICROSECOND, ++ ISO_NANOSECOND ++ ]) { ++ const val1 = GetSlot(one, slot); ++ const val2 = GetSlot(two, slot); ++ if (val1 !== val2) ++ return ComparisonResult(val1 - val2); ++ } ++ return 0; ++ } ++} ++MakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime'); ++ ++class Duration { ++ constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) { ++ const years = ToIntegerWithoutRounding(yearsParam); ++ const months = ToIntegerWithoutRounding(monthsParam); ++ const weeks = ToIntegerWithoutRounding(weeksParam); ++ const days = ToIntegerWithoutRounding(daysParam); ++ const hours = ToIntegerWithoutRounding(hoursParam); ++ const minutes = ToIntegerWithoutRounding(minutesParam); ++ const seconds = ToIntegerWithoutRounding(secondsParam); ++ const milliseconds = ToIntegerWithoutRounding(millisecondsParam); ++ const microseconds = ToIntegerWithoutRounding(microsecondsParam); ++ const nanoseconds = ToIntegerWithoutRounding(nanosecondsParam); ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ CreateSlots(this); ++ SetSlot(this, YEARS, years); ++ SetSlot(this, MONTHS, months); ++ SetSlot(this, WEEKS, weeks); ++ SetSlot(this, DAYS, days); ++ SetSlot(this, HOURS, hours); ++ SetSlot(this, MINUTES, minutes); ++ SetSlot(this, SECONDS, seconds); ++ SetSlot(this, MILLISECONDS, milliseconds); ++ SetSlot(this, MICROSECONDS, microseconds); ++ SetSlot(this, NANOSECONDS, nanoseconds); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${TemporalDurationToString(this)}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get years() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, YEARS); ++ } ++ get months() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MONTHS); ++ } ++ get weeks() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, WEEKS); ++ } ++ get days() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, DAYS); ++ } ++ get hours() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, HOURS); ++ } ++ get minutes() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MINUTES); ++ } ++ get seconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, SECONDS); ++ } ++ get milliseconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MILLISECONDS); ++ } ++ get microseconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, MICROSECONDS); ++ } ++ get nanoseconds() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, NANOSECONDS); ++ } ++ get sign() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)); ++ } ++ get blank() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return (DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0); ++ } ++ with(durationLike) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ const props = PrepareTemporalFields(durationLike, ++ // NOTE: Field order here is important. ++ [ ++ 'days', ++ 'hours', ++ 'microseconds', ++ 'milliseconds', ++ 'minutes', ++ 'months', ++ 'nanoseconds', ++ 'seconds', ++ 'weeks', ++ 'years' ++ ], 'partial'); ++ if (!props) { ++ throw new TypeError('invalid duration-like'); ++ } ++ const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props; ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ negated() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return CreateNegatedTemporalDuration(this); ++ } ++ abs() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS))); ++ } ++ add(other, options = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromDuration('add', this, other, options); ++ } ++ subtract(other, options = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ let years = GetSlot(this, YEARS); ++ let months = GetSlot(this, MONTHS); ++ let weeks = GetSlot(this, WEEKS); ++ let days = GetSlot(this, DAYS); ++ let hours = GetSlot(this, HOURS); ++ let minutes = GetSlot(this, MINUTES); ++ let seconds = GetSlot(this, SECONDS); ++ let milliseconds = GetSlot(this, MILLISECONDS); ++ let microseconds = GetSlot(this, MICROSECONDS); ++ let nanoseconds = GetSlot(this, NANOSECONDS); ++ let defaultLargestUnit = DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ let smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined); ++ let smallestUnitPresent = true; ++ if (!smallestUnit) { ++ smallestUnitPresent = false; ++ smallestUnit = 'nanosecond'; ++ } ++ defaultLargestUnit = LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit); ++ let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']); ++ let largestUnitPresent = true; ++ if (!largestUnit) { ++ largestUnitPresent = false; ++ largestUnit = defaultLargestUnit; ++ } ++ if (largestUnit === 'auto') ++ largestUnit = defaultLargestUnit; ++ if (!smallestUnitPresent && !largestUnitPresent) { ++ throw new RangeError('at least one of smallestUnit or largestUnit is required'); ++ } ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`); ++ } ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ let relativeTo = ToRelativeTemporalObject(options); ++ ({ years, months, weeks, days } = UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo)); ++ ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ++ AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo)); ++ ({ years, months, weeks, days } = BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo)); ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ relativeTo = MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0); ++ } ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo)); ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ total(optionsParam) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ let years = GetSlot(this, YEARS); ++ let months = GetSlot(this, MONTHS); ++ let weeks = GetSlot(this, WEEKS); ++ let days = GetSlot(this, DAYS); ++ let hours = GetSlot(this, HOURS); ++ let minutes = GetSlot(this, MINUTES); ++ let seconds = GetSlot(this, SECONDS); ++ let milliseconds = GetSlot(this, MILLISECONDS); ++ let microseconds = GetSlot(this, MICROSECONDS); ++ let nanoseconds = GetSlot(this, NANOSECONDS); ++ if (optionsParam === undefined) ++ throw new TypeError('options argument is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('unit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const unit = GetTemporalUnit(options, 'unit', 'datetime', REQUIRED); ++ const relativeTo = ToRelativeTemporalObject(options); ++ // Convert larger units down to days ++ ({ years, months, weeks, days } = UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo)); ++ // If the unit we're totalling is smaller than `days`, convert days down to that unit. ++ let intermediate; ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ intermediate = MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0); ++ } ++ ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate)); ++ // Finally, truncate to the correct unit and calculate remainder ++ const { total } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo); ++ return total; ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ if (precision === 'minute') ++ throw new RangeError('smallestUnit must not be "minute"'); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalDurationToString(this, precision, { unit, increment, roundingMode }); ++ } ++ toJSON() { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDurationToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalDuration(this)) ++ throw new TypeError('invalid receiver'); ++ if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') { ++ return new Intl.DurationFormat(locales, options).format(this); ++ } ++ console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.'); ++ return TemporalDurationToString(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() to compare Temporal.Duration'); ++ } ++ static from(item) { ++ if (IsTemporalDuration(item)) { ++ return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS)); ++ } ++ return ToTemporalDuration(item); ++ } ++ static compare(oneParam, twoParam, optionsParam = undefined) { ++ const one = ToTemporalDuration(oneParam); ++ const two = ToTemporalDuration(twoParam); ++ const options = GetOptionsObject(optionsParam); ++ const relativeTo = ToRelativeTemporalObject(options); ++ const y1 = GetSlot(one, YEARS); ++ const mon1 = GetSlot(one, MONTHS); ++ const w1 = GetSlot(one, WEEKS); ++ let d1 = GetSlot(one, DAYS); ++ const h1 = GetSlot(one, HOURS); ++ const min1 = GetSlot(one, MINUTES); ++ const s1 = GetSlot(one, SECONDS); ++ const ms1 = GetSlot(one, MILLISECONDS); ++ const µs1 = GetSlot(one, MICROSECONDS); ++ let ns1 = GetSlot(one, NANOSECONDS); ++ const y2 = GetSlot(two, YEARS); ++ const mon2 = GetSlot(two, MONTHS); ++ const w2 = GetSlot(two, WEEKS); ++ let d2 = GetSlot(two, DAYS); ++ const h2 = GetSlot(two, HOURS); ++ const min2 = GetSlot(two, MINUTES); ++ const s2 = GetSlot(two, SECONDS); ++ const ms2 = GetSlot(two, MILLISECONDS); ++ const µs2 = GetSlot(two, MICROSECONDS); ++ let ns2 = GetSlot(two, NANOSECONDS); ++ const shift1 = CalculateOffsetShift(relativeTo, y1, mon1, w1, d1); ++ const shift2 = CalculateOffsetShift(relativeTo, y2, mon2, w2, d2); ++ if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) { ++ ({ days: d1 } = UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo)); ++ ({ days: d2 } = UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo)); ++ } ++ const totalNs1 = TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1); ++ const totalNs2 = TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2); ++ return ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2))); ++ } ++} ++MakeIntrinsicClass(Duration, 'Temporal.Duration'); ++ ++const ObjectCreate$1 = Object.create; ++class PlainMonthDay { ++ constructor(isoMonthParam, isoDayParam, calendarParam = GetISO8601Calendar(), referenceISOYearParam = 1972) { ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ const referenceISOYear = ToIntegerThrowOnInfinity(referenceISOYearParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This ++ // check exists only to improve the error message. ++ if (arguments.length < 2) { ++ throw new RangeError('missing argument: isoMonth and isoDay are required'); ++ } ++ CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear); ++ } ++ get monthCode() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get day() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ get calendar() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ with(temporalMonthDayLike, optionsParam = undefined) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalMonthDayLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ const props = PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid month-day-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarMonthDayFromFields(calendar, fields, options); ++ } ++ equals(otherParam) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalMonthDay(otherParam); ++ for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const showCalendar = ToShowCalendarOption(options); ++ return TemporalMonthDayToString(this, showCalendar); ++ } ++ toJSON() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalMonthDayToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use equals() to compare Temporal.PlainMonthDay'); ++ } ++ toPlainDate(item) { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) ++ throw new TypeError('argument should be an object'); ++ const calendar = GetSlot(this, CALENDAR); ++ const receiverFieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, receiverFieldNames, []); ++ const inputFieldNames = CalendarFields(calendar, ['year']); ++ const inputFields = PrepareTemporalFields(item, inputFieldNames, []); ++ let mergedFields = CalendarMergeFields(calendar, fields, inputFields); ++ // TODO: Use MergeLists abstract operation. ++ const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])]; ++ mergedFields = PrepareTemporalFields(mergedFields, mergedFieldNames, []); ++ const options = ObjectCreate$1(null); ++ options.overflow = 'reject'; ++ return CalendarDateFromFields(calendar, mergedFields, options); ++ } ++ getISOFields() { ++ if (!IsTemporalMonthDay(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalMonthDay(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR)); ++ } ++ return ToTemporalMonthDay(item, options); ++ } ++} ++MakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay'); ++ ++const instant = () => { ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ return new Instant(SystemUTCEpochNanoSeconds()); ++}; ++const plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => { ++ const tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ const calendar = ToTemporalCalendar(calendarLike); ++ const inst = instant(); ++ return BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar); ++}; ++const plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => { ++ const tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ const calendar = GetISO8601Calendar(); ++ const inst = instant(); ++ return BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar); ++}; ++const zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => { ++ const tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ const calendar = ToTemporalCalendar(calendarLike); ++ return CreateTemporalZonedDateTime(SystemUTCEpochNanoSeconds(), tZ, calendar); ++}; ++const zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => { ++ return zonedDateTime(GetISO8601Calendar(), temporalTimeZoneLike); ++}; ++const plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => { ++ return TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike)); ++}; ++const plainDateISO = (temporalTimeZoneLike = timeZone()) => { ++ return TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike)); ++}; ++const plainTimeISO = (temporalTimeZoneLike = timeZone()) => { ++ return TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike)); ++}; ++const timeZone = () => { ++ return SystemTimeZone(); ++}; ++const Now = { ++ instant, ++ plainDateTime, ++ plainDateTimeISO, ++ plainDate, ++ plainDateISO, ++ plainTimeISO, ++ timeZone, ++ zonedDateTime, ++ zonedDateTimeISO, ++ [Symbol.toStringTag]: 'Temporal.Now' ++}; ++Object.defineProperty(Now, Symbol.toStringTag, { ++ value: 'Temporal.Now', ++ writable: false, ++ enumerable: false, ++ configurable: true ++}); ++ ++const ObjectAssign = Object.assign; ++function TemporalTimeToString(time, precision, options = undefined) { ++ let hour = GetSlot(time, ISO_HOUR); ++ let minute = GetSlot(time, ISO_MINUTE); ++ let second = GetSlot(time, ISO_SECOND); ++ let millisecond = GetSlot(time, ISO_MILLISECOND); ++ let microsecond = GetSlot(time, ISO_MICROSECOND); ++ let nanosecond = GetSlot(time, ISO_NANOSECOND); ++ if (options) { ++ const { unit, increment, roundingMode } = options; ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode)); ++ } ++ const hourString = ISODateTimePartString(hour); ++ const minuteString = ISODateTimePartString(minute); ++ const seconds = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision); ++ return `${hourString}:${minuteString}${seconds}`; ++} ++class PlainTime { ++ constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) { ++ const isoHour = ToIntegerThrowOnInfinity(isoHourParam); ++ const isoMinute = ToIntegerThrowOnInfinity(isoMinuteParam); ++ const isoSecond = ToIntegerThrowOnInfinity(isoSecondParam); ++ const isoMillisecond = ToIntegerThrowOnInfinity(isoMillisecondParam); ++ const isoMicrosecond = ToIntegerThrowOnInfinity(isoMicrosecondParam); ++ const isoNanosecond = ToIntegerThrowOnInfinity(isoNanosecondParam); ++ RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond); ++ CreateSlots(this); ++ SetSlot(this, ISO_HOUR, isoHour); ++ SetSlot(this, ISO_MINUTE, isoMinute); ++ SetSlot(this, ISO_SECOND, isoSecond); ++ SetSlot(this, ISO_MILLISECOND, isoMillisecond); ++ SetSlot(this, ISO_MICROSECOND, isoMicrosecond); ++ SetSlot(this, ISO_NANOSECOND, isoNanosecond); ++ SetSlot(this, CALENDAR, GetISO8601Calendar()); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get calendar() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ // PlainTime's calendar isn't settable, so can't be a userland calendar ++ return GetSlot(this, CALENDAR); ++ } ++ get hour() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_HOUR); ++ } ++ get minute() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MINUTE); ++ } ++ get second() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_SECOND); ++ } ++ get millisecond() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MILLISECOND); ++ } ++ get microsecond() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MICROSECOND); ++ } ++ get nanosecond() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_NANOSECOND); ++ } ++ with(temporalTimeLike, optionsParam = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalTimeLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalTimeLike); ++ const partialTime = ToTemporalTimeRecord(temporalTimeLike, 'partial'); ++ const options = GetOptionsObject(optionsParam); ++ const overflow = ToTemporalOverflow(options); ++ const fields = ToTemporalTimeRecord(this); ++ let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow)); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ add(temporalDurationLike) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike); ++ } ++ subtract(temporalDurationLike) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainTime('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainTime('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const MAX_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false); ++ let hour = GetSlot(this, ISO_HOUR); ++ let minute = GetSlot(this, ISO_MINUTE); ++ let second = GetSlot(this, ISO_SECOND); ++ let millisecond = GetSlot(this, ISO_MILLISECOND); ++ let microsecond = GetSlot(this, ISO_MICROSECOND); ++ let nanosecond = GetSlot(this, ISO_NANOSECOND); ++ ({ hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode)); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ equals(otherParam) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalTime(otherParam); ++ for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return true; ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalTimeToString(this, precision, { unit, increment, roundingMode }); ++ } ++ toJSON() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalTimeToString(this, 'auto'); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainTime'); ++ } ++ toPlainDateTime(temporalDateParam) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ const temporalDate = ToTemporalDate(temporalDateParam); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ const calendar = GetSlot(temporalDate, CALENDAR); ++ const hour = GetSlot(this, ISO_HOUR); ++ const minute = GetSlot(this, ISO_MINUTE); ++ const second = GetSlot(this, ISO_SECOND); ++ const millisecond = GetSlot(this, ISO_MILLISECOND); ++ const microsecond = GetSlot(this, ISO_MICROSECOND); ++ const nanosecond = GetSlot(this, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ toZonedDateTime(item) { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) { ++ throw new TypeError('invalid argument'); ++ } ++ const dateLike = item.plainDate; ++ if (dateLike === undefined) { ++ throw new TypeError('missing date property'); ++ } ++ const temporalDate = ToTemporalDate(dateLike); ++ const timeZoneLike = item.timeZone; ++ if (timeZoneLike === undefined) { ++ throw new TypeError('missing timeZone property'); ++ } ++ const timeZone = ToTemporalTimeZone(timeZoneLike); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ const calendar = GetSlot(temporalDate, CALENDAR); ++ const hour = GetSlot(this, ISO_HOUR); ++ const minute = GetSlot(this, ISO_MINUTE); ++ const second = GetSlot(this, ISO_SECOND); ++ const millisecond = GetSlot(this, ISO_MILLISECOND); ++ const microsecond = GetSlot(this, ISO_MICROSECOND); ++ const nanosecond = GetSlot(this, ISO_NANOSECOND); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ getISOFields() { ++ if (!IsTemporalTime(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoHour: GetSlot(this, ISO_HOUR), ++ isoMicrosecond: GetSlot(this, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(this, ISO_MILLISECOND), ++ isoMinute: GetSlot(this, ISO_MINUTE), ++ isoNanosecond: GetSlot(this, ISO_NANOSECOND), ++ isoSecond: GetSlot(this, ISO_SECOND) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ const overflow = ToTemporalOverflow(options); ++ if (IsTemporalTime(item)) { ++ return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND)); ++ } ++ return ToTemporalTime(item, overflow); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalTime(oneParam); ++ const two = ToTemporalTime(twoParam); ++ for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) { ++ const val1 = GetSlot(one, slot); ++ const val2 = GetSlot(two, slot); ++ if (val1 !== val2) ++ return ComparisonResult(val1 - val2); ++ } ++ return 0; ++ } ++} ++MakeIntrinsicClass(PlainTime, 'Temporal.PlainTime'); ++ ++class TimeZone { ++ constructor(timeZoneIdentifierParam) { ++ // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw. ++ // This check exists only to improve the error message. ++ if (arguments.length < 1) { ++ throw new RangeError('missing argument: identifier is required'); ++ } ++ const timeZoneIdentifier = GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam); ++ CreateSlots(this); ++ SetSlot(this, TIMEZONE_ID, timeZoneIdentifier); ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`, ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ get id() { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ getOffsetNanosecondsFor(instantParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const instant = ToTemporalInstant(instantParam); ++ const id = GetSlot(this, TIMEZONE_ID); ++ if (TestTimeZoneOffsetString(id)) { ++ return ParseTimeZoneOffsetString(id); ++ } ++ return GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id); ++ } ++ getOffsetStringFor(instantParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const instant = ToTemporalInstant(instantParam); ++ return BuiltinTimeZoneGetOffsetStringFor(this, instant); ++ } ++ getPlainDateTimeFor(instantParam, calendarParam = GetISO8601Calendar()) { ++ const instant = ToTemporalInstant(instantParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar); ++ } ++ getInstantFor(dateTimeParam, optionsParam = undefined) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const dateTime = ToTemporalDateTime(dateTimeParam); ++ const options = GetOptionsObject(optionsParam); ++ const disambiguation = ToTemporalDisambiguation(options); ++ return BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation); ++ } ++ getPossibleInstantsFor(dateTimeParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const dateTime = ToTemporalDateTime(dateTimeParam); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ const id = GetSlot(this, TIMEZONE_ID); ++ if (TestTimeZoneOffsetString(id)) { ++ const epochNs = GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ if (epochNs === null) ++ throw new RangeError('DateTime outside of supported range'); ++ const offsetNs = ParseTimeZoneOffsetString(id); ++ return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))]; ++ } ++ const possibleEpochNs = GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ return possibleEpochNs.map((ns) => new Instant(ns)); ++ } ++ getNextTransition(startingPointParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const startingPoint = ToTemporalInstant(startingPointParam); ++ const id = GetSlot(this, TIMEZONE_ID); ++ // Offset time zones or UTC have no transitions ++ if (TestTimeZoneOffsetString(id) || id === 'UTC') { ++ return null; ++ } ++ let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ epochNanoseconds = GetIANATimeZoneNextTransition(epochNanoseconds, id); ++ return epochNanoseconds === null ? null : new Instant(epochNanoseconds); ++ } ++ getPreviousTransition(startingPointParam) { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ const startingPoint = ToTemporalInstant(startingPointParam); ++ const id = GetSlot(this, TIMEZONE_ID); ++ // Offset time zones or UTC have no transitions ++ if (TestTimeZoneOffsetString(id) || id === 'UTC') { ++ return null; ++ } ++ let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS); ++ const Instant = GetIntrinsic('%Temporal.Instant%'); ++ epochNanoseconds = GetIANATimeZonePreviousTransition(epochNanoseconds, id); ++ return epochNanoseconds === null ? null : new Instant(epochNanoseconds); ++ } ++ toString() { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(GetSlot(this, TIMEZONE_ID)); ++ } ++ toJSON() { ++ if (!IsTemporalTimeZone(this)) ++ throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ static from(item) { ++ return ToTemporalTimeZone(item); ++ } ++} ++MakeIntrinsicClass(TimeZone, 'Temporal.TimeZone'); ++ ++const ObjectCreate = Object.create; ++class PlainYearMonth { ++ constructor(isoYearParam, isoMonthParam, calendarParam = GetISO8601Calendar(), referenceISODayParam = 1) { ++ const isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ const isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ const referenceISODay = ToIntegerThrowOnInfinity(referenceISODayParam); ++ // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This ++ // check exists only to improve the error message. ++ if (arguments.length < 2) { ++ throw new RangeError('missing argument: isoYear and isoMonth are required'); ++ } ++ CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay); ++ } ++ get year() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ get month() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ get monthCode() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ get calendar() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get era() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ get eraYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ get daysInMonth() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ get daysInYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ get monthsInYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ get inLeapYear() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ with(temporalYearMonthLike, optionsParam = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalYearMonthLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']); ++ const props = PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial'); ++ if (!props) { ++ throw new TypeError('invalid year-month-like'); ++ } ++ let fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ const options = GetOptionsObject(optionsParam); ++ return CalendarYearMonthFromFields(calendar, fields, options); ++ } ++ add(temporalDurationLike, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options); ++ } ++ subtract(temporalDurationLike, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainYearMonth('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainYearMonth('since', this, other, options); ++ } ++ equals(otherParam) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalYearMonth(otherParam); ++ for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) { ++ const val1 = GetSlot(this, slot); ++ const val2 = GetSlot(other, slot); ++ if (val1 !== val2) ++ return false; ++ } ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const showCalendar = ToShowCalendarOption(options); ++ return TemporalYearMonthToString(this, showCalendar); ++ } ++ toJSON() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalYearMonthToString(this); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth'); ++ } ++ toPlainDate(item) { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) ++ throw new TypeError('argument should be an object'); ++ const calendar = GetSlot(this, CALENDAR); ++ const receiverFieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, receiverFieldNames, []); ++ const inputFieldNames = CalendarFields(calendar, ['day']); ++ const inputFields = PrepareTemporalFields(item, inputFieldNames, []); ++ let mergedFields = CalendarMergeFields(calendar, fields, inputFields); ++ // TODO: Use MergeLists abstract operation. ++ const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])]; ++ mergedFields = PrepareTemporalFields(mergedFields, mergedFieldNames, []); ++ const options = ObjectCreate(null); ++ options.overflow = 'reject'; ++ return CalendarDateFromFields(calendar, mergedFields, options); ++ } ++ getISOFields() { ++ if (!IsTemporalYearMonth(this)) ++ throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalYearMonth(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ return CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY)); ++ } ++ return ToTemporalYearMonth(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalYearMonth(oneParam); ++ const two = ToTemporalYearMonth(twoParam); ++ return CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY)); ++ } ++} ++MakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth'); ++ ++class ZonedDateTime { ++ constructor(epochNanosecondsParam, timeZoneParam, calendarParam = GetISO8601Calendar()) { ++ // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only ++ // to improve the error message. ++ // ToTemporalTimeZone(undefined) will end up calling TimeZone.from("undefined"), which ++ // could succeed. ++ if (arguments.length < 1) { ++ throw new TypeError('missing argument: epochNanoseconds is required'); ++ } ++ const epochNanoseconds = ToBigInt(epochNanosecondsParam); ++ const timeZone = ToTemporalTimeZone(timeZoneParam); ++ const calendar = ToTemporalCalendar(calendarParam); ++ CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar); ++ } ++ get calendar() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ get timeZone() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(this, TIME_ZONE); ++ } ++ get year() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get month() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get monthCode() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get day() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get hour() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_HOUR); ++ } ++ get minute() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MINUTE); ++ } ++ get second() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_SECOND); ++ } ++ get millisecond() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MILLISECOND); ++ } ++ get microsecond() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MICROSECOND); ++ } ++ get nanosecond() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_NANOSECOND); ++ } ++ get era() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get eraYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get epochSeconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.divide(value, BILLION)); ++ } ++ get epochMilliseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.divide(value, MILLION)); ++ } ++ get epochMicroseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const value = GetSlot(this, EPOCHNANOSECONDS); ++ return ToBigIntExternal(JSBI.divide(value, THOUSAND)); ++ } ++ get epochNanoseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS)); ++ } ++ get dayOfWeek() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get dayOfYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get weekOfYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get hoursInDay() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const dt = dateTime(this); ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const year = GetSlot(dt, ISO_YEAR); ++ const month = GetSlot(dt, ISO_MONTH); ++ const day = GetSlot(dt, ISO_DAY); ++ const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0); ++ const tomorrowFields = AddISODate(year, month, day, 0, 0, 0, 1, 'reject'); ++ const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const todayNs = GetSlot(BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS); ++ const tomorrowNs = GetSlot(BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12; ++ } ++ get daysInWeek() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get daysInMonth() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get daysInYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get monthsInYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get inLeapYear() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ get offset() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT)); ++ } ++ get offsetNanoseconds() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT)); ++ } ++ with(temporalZonedDateTimeLike, optionsParam = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (!IsObject(temporalZonedDateTimeLike)) { ++ throw new TypeError('invalid zoned-date-time-like'); ++ } ++ RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike); ++ // TODO: Reorder according to spec. ++ const options = GetOptionsObject(optionsParam); ++ const disambiguation = ToTemporalDisambiguation(options); ++ const offset = ToTemporalOffset(options, 'prefer'); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, [ ++ 'day', ++ 'hour', ++ 'microsecond', ++ 'millisecond', ++ 'minute', ++ 'month', ++ 'monthCode', ++ 'nanosecond', ++ 'second', ++ 'year' ++ ]); ++ const fieldsWithOffset = ArrayPush(fieldNames, 'offset'); ++ const props = PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial'); ++ const fieldsWithTimeZoneAndOffset = ArrayPush(fieldsWithOffset, 'timeZone'); ++ let fields = PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']); ++ let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options); ++ const offsetNs = ParseTimeZoneOffsetString(fields.offset); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, ++ /* matchMinute = */ false); ++ return CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar); ++ } ++ withPlainDate(temporalDateParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const temporalDate = ToTemporalDate(temporalDateParam); ++ const year = GetSlot(temporalDate, ISO_YEAR); ++ const month = GetSlot(temporalDate, ISO_MONTH); ++ const day = GetSlot(temporalDate, ISO_DAY); ++ let calendar = GetSlot(temporalDate, CALENDAR); ++ const thisDt = dateTime(this); ++ const hour = GetSlot(thisDt, ISO_HOUR); ++ const minute = GetSlot(thisDt, ISO_MINUTE); ++ const second = GetSlot(thisDt, ISO_SECOND); ++ const millisecond = GetSlot(thisDt, ISO_MILLISECOND); ++ const microsecond = GetSlot(thisDt, ISO_MICROSECOND); ++ const nanosecond = GetSlot(thisDt, ISO_NANOSECOND); ++ calendar = ConsolidateCalendars(GetSlot(this, CALENDAR), calendar); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ withPlainTime(temporalTimeParam = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const PlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ToTemporalTime(temporalTimeParam); ++ const thisDt = dateTime(this); ++ const year = GetSlot(thisDt, ISO_YEAR); ++ const month = GetSlot(thisDt, ISO_MONTH); ++ const day = GetSlot(thisDt, ISO_DAY); ++ const calendar = GetSlot(this, CALENDAR); ++ const hour = GetSlot(temporalTime, ISO_HOUR); ++ const minute = GetSlot(temporalTime, ISO_MINUTE); ++ const second = GetSlot(temporalTime, ISO_SECOND); ++ const millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ const microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ withTimeZone(timeZoneParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const timeZone = ToTemporalTimeZone(timeZoneParam); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR)); ++ } ++ withCalendar(calendarParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = ToTemporalCalendar(calendarParam); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar); ++ } ++ add(temporalDurationLike, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options); ++ } ++ subtract(temporalDurationLike, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options); ++ } ++ until(other, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalZonedDateTime('until', this, other, options); ++ } ++ since(other, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return DifferenceTemporalZonedDateTime('since', this, other, options); ++ } ++ round(optionsParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) ++ throw new TypeError('options parameter is required'); ++ const options = typeof optionsParam === 'string' ++ ? CreateOnePropObject('smallestUnit', optionsParam) ++ : GetOptionsObject(optionsParam); ++ const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED, ['day']); ++ const roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ const maximumIncrements = { ++ day: 1, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ const roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++ // first, round the underlying DateTime fields ++ const dt = dateTime(this); ++ let year = GetSlot(dt, ISO_YEAR); ++ let month = GetSlot(dt, ISO_MONTH); ++ let day = GetSlot(dt, ISO_DAY); ++ let hour = GetSlot(dt, ISO_HOUR); ++ let minute = GetSlot(dt, ISO_MINUTE); ++ let second = GetSlot(dt, ISO_SECOND); ++ let millisecond = GetSlot(dt, ISO_MILLISECOND); ++ let microsecond = GetSlot(dt, ISO_MICROSECOND); ++ let nanosecond = GetSlot(dt, ISO_NANOSECOND); ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const calendar = GetSlot(this, CALENDAR); ++ const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0); ++ const instantStart = BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible'); ++ const endNs = AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); ++ const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS))); ++ if (JSBI.equal(dayLengthNs, ZERO)) { ++ throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days'); ++ } ++ ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, ++ // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER ++ // (which can hold up to 104 days in nanoseconds) ++ JSBI.toNumber(dayLengthNs))); ++ // Now reset all DateTime fields but leave the TimeZone. The offset will ++ // also be retained if the new date/time values are still OK with the old ++ // offset. Otherwise the offset will be changed to be compatible with the ++ // new date/time values. If DST disambiguation is required, the `compatible` ++ // disambiguation algorithm will be used. ++ const offsetNs = GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT)); ++ const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', ++ /* matchMinute = */ false); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR)); ++ } ++ equals(otherParam) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const other = ToTemporalZonedDateTime(otherParam); ++ const one = GetSlot(this, EPOCHNANOSECONDS); ++ const two = GetSlot(other, EPOCHNANOSECONDS); ++ if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two))) ++ return false; ++ if (!TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) ++ return false; ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ toString(optionsParam = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const options = GetOptionsObject(optionsParam); ++ const { precision, unit, increment } = ToSecondsStringPrecision(options); ++ const roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ const showCalendar = ToShowCalendarOption(options); ++ const showTimeZone = ToShowTimeZoneNameOption(options); ++ const showOffset = ToShowOffsetOption(options); ++ return TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, { ++ unit, ++ increment, ++ roundingMode ++ }); ++ } ++ toLocaleString(locales = undefined, options = undefined) { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ toJSON() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalZonedDateTimeToString(this, 'auto'); ++ } ++ valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime'); ++ } ++ startOfDay() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const dt = dateTime(this); ++ const DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ const calendar = GetSlot(this, CALENDAR); ++ const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar); ++ const timeZone = GetSlot(this, TIME_ZONE); ++ const instant = BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ toInstant() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS)); ++ } ++ toPlainDate() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToDate(dateTime(this)); ++ } ++ toPlainTime() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToTime(dateTime(this)); ++ } ++ toPlainDateTime() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ return dateTime(this); ++ } ++ toPlainYearMonth() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ toPlainMonthDay() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const calendar = GetSlot(this, CALENDAR); ++ const fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ const fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ getISOFields() { ++ if (!IsTemporalZonedDateTime(this)) ++ throw new TypeError('invalid receiver'); ++ const dt = dateTime(this); ++ const tz = GetSlot(this, TIME_ZONE); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(dt, ISO_DAY), ++ isoHour: GetSlot(dt, ISO_HOUR), ++ isoMicrosecond: GetSlot(dt, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(dt, ISO_MILLISECOND), ++ isoMinute: GetSlot(dt, ISO_MINUTE), ++ isoMonth: GetSlot(dt, ISO_MONTH), ++ isoNanosecond: GetSlot(dt, ISO_NANOSECOND), ++ isoSecond: GetSlot(dt, ISO_SECOND), ++ isoYear: GetSlot(dt, ISO_YEAR), ++ offset: BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)), ++ timeZone: tz ++ }; ++ } ++ static from(item, optionsParam = undefined) { ++ const options = GetOptionsObject(optionsParam); ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ToTemporalDisambiguation(options); ++ ToTemporalOffset(options, 'reject'); ++ return CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR)); ++ } ++ return ToTemporalZonedDateTime(item, options); ++ } ++ static compare(oneParam, twoParam) { ++ const one = ToTemporalZonedDateTime(oneParam); ++ const two = ToTemporalZonedDateTime(twoParam); ++ const ns1 = GetSlot(one, EPOCHNANOSECONDS); ++ const ns2 = GetSlot(two, EPOCHNANOSECONDS); ++ if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) ++ return -1; ++ if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) ++ return 1; ++ return 0; ++ } ++} ++MakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime'); ++function dateTime(zdt) { ++ return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR)); ++} ++ ++var temporal = /*#__PURE__*/Object.freeze({ ++ __proto__: null, ++ Instant: Instant, ++ Calendar: Calendar, ++ PlainDate: PlainDate, ++ PlainDateTime: PlainDateTime, ++ Duration: Duration, ++ PlainMonthDay: PlainMonthDay, ++ Now: Now, ++ PlainTime: PlainTime, ++ TimeZone: TimeZone, ++ PlainYearMonth: PlainYearMonth, ++ ZonedDateTime: ZonedDateTime ++}); ++ ++function toTemporalInstant() { ++ // Observable access to valueOf is not correct here, but unavoidable ++ const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION); ++ return new Instant(ToBigInt(epochNanoseconds)); ++} ++ ++// This entry point treats Temporal as a library, and does not polyfill it onto ++// Work around https://github.com/babel/babel/issues/2025. ++const types = [ ++ Instant, ++ Calendar, ++ PlainDate, ++ PlainDateTime, ++ Duration, ++ PlainMonthDay, ++ // Temporal.Now, // plain object (not a constructor), so no `prototype` ++ PlainTime, ++ TimeZone, ++ PlainYearMonth, ++ ZonedDateTime ++]; ++for (const type of types) { ++ const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype'); ++ if (descriptor.configurable || descriptor.enumerable || descriptor.writable) { ++ descriptor.configurable = false; ++ descriptor.enumerable = false; ++ descriptor.writable = false; ++ Object.defineProperty(type, 'prototype', descriptor); ++ } ++} ++ ++export { intl as Intl, temporal as Temporal, toTemporalInstant }; + //# sourceMappingURL=index.esm.js.map +diff --git a/node_modules/@js-temporal/polyfill/dist/index.esm.js.map b/node_modules/@js-temporal/polyfill/dist/index.esm.js.map +index d1984b1..6304641 100644 +--- a/node_modules/@js-temporal/polyfill/dist/index.esm.js.map ++++ b/node_modules/@js-temporal/polyfill/dist/index.esm.js.map +@@ -1 +1 @@ +-{"version":3,"file":"index.esm.js","sources":["../tsc-out/intrinsicclass.js","../tsc-out/slots.js","../tsc-out/regex.js","../tsc-out/ecmascript.js","../tsc-out/intl.js","../tsc-out/instant.js","../tsc-out/calendar.js","../tsc-out/plaindate.js","../tsc-out/plaindatetime.js","../tsc-out/duration.js","../tsc-out/plainmonthday.js","../tsc-out/now.js","../tsc-out/plaintime.js","../tsc-out/timezone.js","../tsc-out/plainyearmonth.js","../tsc-out/zoneddatetime.js","../tsc-out/legacydate.js","../tsc-out/index.js"],"sourcesContent":["import { DEBUG } from './debug';\nconst INTRINSICS = {};\nconst customUtilInspectFormatters = {\n ['Temporal.Duration'](depth, options) {\n const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n if (depth < 1)\n return descr;\n const entries = [];\n for (const prop of [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n 'microseconds',\n 'nanoseconds'\n ]) {\n if (this[prop] !== 0)\n entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`);\n }\n return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n }\n};\nfunction defaultUtilInspectFormatter(depth, options) {\n return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\nexport function MakeIntrinsicClass(Class, name) {\n Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n value: name,\n writable: false,\n enumerable: false,\n configurable: true\n });\n if (DEBUG) {\n Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n for (const prop of Object.getOwnPropertyNames(Class)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class, prop, desc);\n }\n for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class.prototype, prop, desc);\n }\n DefineIntrinsic(name, Class);\n DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\nexport function DefineIntrinsic(name, value) {\n const key = `%${name}%`;\n if (INTRINSICS[key] !== undefined)\n throw new Error(`intrinsic ${name} already exists`);\n INTRINSICS[key] = value;\n}\nexport function GetIntrinsic(intrinsic) {\n return INTRINSICS[intrinsic];\n}\n//# sourceMappingURL=intrinsicclass.js.map","// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\nconst slots = new WeakMap();\nexport function CreateSlots(container) {\n slots.set(container, Object.create(null));\n}\nfunction GetSlots(container) {\n return slots.get(container);\n}\nexport function HasSlot(container, ...ids) {\n if (!container || 'object' !== typeof container)\n return false;\n const myslots = GetSlots(container);\n return !!myslots && ids.reduce((all, id) => all && id in myslots, true);\n}\nexport function GetSlot(container, id) {\n const value = GetSlots(container)[id];\n if (value === undefined)\n throw new TypeError(`Missing internal slot ${id}`);\n return value;\n}\nexport function SetSlot(container, id, value) {\n GetSlots(container)[id] = value;\n}\n//# sourceMappingURL=slots.js.map","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nconst timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\\\d{1,2}|${offsetNoCapture.source})`);\nconst calComponent = /[A-Za-z0-9]{3,8}/;\nconst calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`);\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\\\[(${timeZoneID.source})\\\\])?`);\nconst calendar = new RegExp(`\\\\[u-ca=(${calendarID.source})\\\\]`);\nexport const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i');\nexport const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i');\n// The short forms of YearMonth and MonthDay are only for the ISO calendar.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\nexport const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`);\nexport const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`);\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n//# sourceMappingURL=regex.js.map","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectAssign = Object.assign;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ObjectIs = Object.is;\nconst ReflectApply = Reflect.apply;\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { CreateSlots, GetSlot, HasSlot, SetSlot, EPOCHNANOSECONDS, TIMEZONE_ID, CALENDAR_ID, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, DATE_BRAND, YEAR_MONTH_BRAND, MONTH_DAY_BRAND, TIME_ZONE, CALENDAR, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS } from './slots';\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst DAY_SECONDS = 86400;\nconst DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\nconst BUILTIN_CALENDAR_IDS = [\n 'iso8601',\n 'hebrew',\n 'islamic',\n 'islamic-umalqura',\n 'islamic-tbla',\n 'islamic-civil',\n 'islamic-rgsa',\n 'islamicc',\n 'persian',\n 'ethiopic',\n 'ethioaa',\n 'coptic',\n 'chinese',\n 'dangi',\n 'roc',\n 'indian',\n 'buddhist',\n 'japanese',\n 'gregory'\n];\nfunction IsInteger(value) {\n if (typeof value !== 'number' || !NumberIsFinite(value))\n return false;\n const abs = MathAbs(value);\n return MathFloor(abs) === abs;\n}\nexport function IsObject(value) {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\nexport function ToNumber(value) {\n if (typeof value === 'bigint')\n throw new TypeError('Cannot convert BigInt to number');\n return NumberCtor(value);\n}\nfunction ToInteger(value) {\n const num = ToNumber(value);\n if (NumberIsNaN(num))\n return 0;\n const integer = MathTrunc(num);\n if (num === 0)\n return 0;\n return integer;\n}\nexport function ToString(value) {\n if (typeof value === 'symbol') {\n throw new TypeError('Cannot convert a Symbol value to a String');\n }\n return StringCtor(value);\n}\nexport function ToIntegerThrowOnInfinity(value) {\n const integer = ToInteger(value);\n if (!NumberIsFinite(integer)) {\n throw new RangeError('infinity is out of range');\n }\n return integer;\n}\nfunction ToPositiveInteger(valueParam, property) {\n const value = ToInteger(valueParam);\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (value < 1) {\n if (property !== undefined) {\n throw new RangeError(`property '${property}' cannot be a a number less than one`);\n }\n throw new RangeError('Cannot convert a number less than one to a positive integer');\n }\n return value;\n}\nexport function ToIntegerWithoutRounding(valueParam) {\n const value = ToNumber(valueParam);\n if (NumberIsNaN(value))\n return 0;\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (!IsInteger(value)) {\n throw new RangeError(`unsupported fractional value ${value}`);\n }\n return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0\n}\nfunction divmod(x, y) {\n const quotient = JSBI.divide(x, y);\n const remainder = JSBI.remainder(x, y);\n return { quotient, remainder };\n}\nfunction abs(x) {\n if (JSBI.lessThan(x, ZERO))\n return JSBI.multiply(x, NEGATIVE_ONE);\n return x;\n}\nexport function ArrayPush(arr, ...newItem) {\n ArrayPrototypePush.apply(arr, newItem);\n return arr;\n}\nconst BUILTIN_CASTS = new Map([\n ['year', ToIntegerThrowOnInfinity],\n ['month', ToPositiveInteger],\n ['monthCode', ToString],\n ['day', ToPositiveInteger],\n ['hour', ToIntegerThrowOnInfinity],\n ['minute', ToIntegerThrowOnInfinity],\n ['second', ToIntegerThrowOnInfinity],\n ['millisecond', ToIntegerThrowOnInfinity],\n ['microsecond', ToIntegerThrowOnInfinity],\n ['nanosecond', ToIntegerThrowOnInfinity],\n ['years', ToIntegerWithoutRounding],\n ['months', ToIntegerWithoutRounding],\n ['weeks', ToIntegerWithoutRounding],\n ['days', ToIntegerWithoutRounding],\n ['hours', ToIntegerWithoutRounding],\n ['minutes', ToIntegerWithoutRounding],\n ['seconds', ToIntegerWithoutRounding],\n ['milliseconds', ToIntegerWithoutRounding],\n ['microseconds', ToIntegerWithoutRounding],\n ['nanoseconds', ToIntegerWithoutRounding],\n ['era', ToString],\n ['eraYear', ToInteger],\n ['offset', ToString]\n]);\nconst BUILTIN_DEFAULTS = new Map([\n ['hour', 0],\n ['minute', 0],\n ['second', 0],\n ['millisecond', 0],\n ['microsecond', 0],\n ['nanosecond', 0]\n]);\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n ['years', 'year', 'date'],\n ['months', 'month', 'date'],\n ['weeks', 'week', 'date'],\n ['days', 'day', 'date'],\n ['hours', 'hour', 'time'],\n ['minutes', 'minute', 'time'],\n ['seconds', 'second', 'time'],\n ['milliseconds', 'millisecond', 'time'],\n ['microseconds', 'microsecond', 'time'],\n ['nanoseconds', 'nanosecond', 'time']\n];\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]]));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\nimport * as PARSE from './regex';\nconst IntlDateTimeFormatEnUsCache = new Map();\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) {\n let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n if (instance === undefined) {\n instance = new IntlDateTimeFormat('en-us', {\n timeZone: StringCtor(timeZoneIdentifier),\n hour12: false,\n era: 'short',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n }\n return instance;\n}\nexport function IsTemporalInstant(item) {\n return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\nexport function IsTemporalTimeZone(item) {\n return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item) {\n return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item) {\n return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item) {\n return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item) {\n return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY));\n}\nexport function IsTemporalDateTime(item) {\n return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND);\n}\nexport function IsTemporalYearMonth(item) {\n return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item) {\n return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item) {\n return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectObjectWithCalendarOrTimeZone(item) {\n if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n throw new TypeError('with() does not support a calendar or timeZone property');\n }\n if (item.calendar !== undefined) {\n throw new TypeError('with() does not support a calendar property');\n }\n if (item.timeZone !== undefined) {\n throw new TypeError('with() does not support a timeZone property');\n }\n}\nfunction ParseTemporalTimeZone(stringIdent) {\n let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n if (ianaName)\n return ianaName;\n if (z)\n return 'UTC';\n return offset; // if !ianaName && !z then offset must be present\n}\nfunction FormatCalendarAnnotation(id, showCalendar) {\n if (showCalendar === 'never')\n return '';\n if (showCalendar === 'auto' && id === 'iso8601')\n return '';\n return `[u-ca=${id}]`;\n}\nfunction ParseISODateTime(isoString) {\n // ZDT is the superset of fields for every other Temporal type\n const match = PARSE.zoneddatetime.exec(isoString);\n if (!match)\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n const year = ToInteger(yearString);\n const month = ToInteger(match[2] || match[4]);\n const day = ToInteger(match[3] || match[5]);\n const hour = ToInteger(match[6]);\n const hasTime = match[6] !== undefined;\n const minute = ToInteger(match[7] || match[10]);\n let second = ToInteger(match[8] || match[11]);\n if (second === 60)\n second = 59;\n const fraction = (match[9] || match[12]) + '000000000';\n const millisecond = ToInteger(fraction.slice(0, 3));\n const microsecond = ToInteger(fraction.slice(3, 6));\n const nanosecond = ToInteger(fraction.slice(6, 9));\n let offset;\n let z = false;\n if (match[13]) {\n offset = undefined;\n z = true;\n }\n else if (match[14] && match[15]) {\n const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n const offsetHours = match[15] || '00';\n const offsetMinutes = match[16] || '00';\n const offsetSeconds = match[17] || '00';\n let offsetFraction = match[18] || '0';\n offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n if (+offsetFraction) {\n while (offsetFraction.endsWith('0'))\n offsetFraction = offsetFraction.slice(0, -1);\n offset += `:${offsetSeconds}.${offsetFraction}`;\n }\n else if (+offsetSeconds) {\n offset += `:${offsetSeconds}`;\n }\n if (offset === '-00:00')\n offset = '+00:00';\n }\n let ianaName = match[19];\n if (ianaName) {\n try {\n // Canonicalize name if it is an IANA link name or is capitalized wrong\n ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString();\n }\n catch {\n // Not an IANA name, may be a custom ID, pass through unchanged\n }\n }\n const calendar = match[20];\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n return {\n year,\n month,\n day,\n hasTime,\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond,\n ianaName,\n offset,\n z,\n calendar\n };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.z && !result.offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.ianaName)\n throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString) {\n const match = PARSE.time.exec(isoString);\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (match) {\n hour = ToInteger(match[1]);\n minute = ToInteger(match[2] || match[5]);\n second = ToInteger(match[3] || match[6]);\n if (second === 60)\n second = 59;\n const fraction = (match[4] || match[7]) + '000000000';\n millisecond = ToInteger(fraction.slice(0, 3));\n microsecond = ToInteger(fraction.slice(3, 6));\n nanosecond = ToInteger(fraction.slice(6, 9));\n calendar = match[15];\n }\n else {\n let z, hasTime;\n ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseISODateTime(isoString));\n if (!hasTime)\n throw new RangeError(`time is missing in string: ${isoString}`);\n if (z)\n throw new RangeError('Z designator not supported for PlainTime');\n }\n // if it's a date-time string, OK\n if (/[tT ][0-9][0-9]/.test(isoString)) {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n // slow but non-grammar-dependent way to ensure that time-only strings that\n // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to\n // assertion in spec text\n try {\n const { month, day } = ParseTemporalMonthDayString(isoString);\n RejectISODate(1972, month, day);\n }\n catch {\n try {\n const { year, month } = ParseTemporalYearMonthString(isoString);\n RejectISODate(year, month, 1);\n }\n catch {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n }\n throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString) {\n const match = PARSE.yearmonth.exec(isoString);\n let year, month, calendar, referenceISODay;\n if (match) {\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n year = ToInteger(yearString);\n month = ToInteger(match[2]);\n calendar = match[3];\n }\n else {\n let z;\n ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainYearMonth');\n }\n return { year, month, calendar, referenceISODay };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString) {\n const match = PARSE.monthday.exec(isoString);\n let month, day, calendar, referenceISOYear;\n if (match) {\n month = ToInteger(match[1]);\n day = ToInteger(match[2]);\n }\n else {\n let z;\n ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainMonthDay');\n }\n return { month, day, calendar, referenceISOYear };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent) {\n try {\n let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent);\n if (canonicalIdent)\n return { ianaName: canonicalIdent.toString() };\n }\n catch {\n // fall through\n }\n try {\n // Try parsing ISO string instead\n const result = ParseISODateTime(stringIdent);\n if (result.z || result.offset || result.ianaName) {\n return result;\n }\n }\n catch {\n // fall through\n }\n throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString) {\n const match = PARSE.duration.exec(isoString);\n if (!match)\n throw new RangeError(`invalid duration: ${isoString}`);\n if (match.slice(2).every((element) => element === undefined)) {\n throw new RangeError(`invalid duration: ${isoString}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n const years = ToInteger(match[2]) * sign;\n const months = ToInteger(match[3]) * sign;\n const weeks = ToInteger(match[4]) * sign;\n const days = ToInteger(match[5]) * sign;\n const hours = ToInteger(match[6]) * sign;\n let fHours = match[7];\n let minutes = ToInteger(match[8]) * sign;\n let fMinutes = match[9];\n let seconds = ToInteger(match[10]) * sign;\n const fSeconds = match[11] + '000000000';\n let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign;\n let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign;\n let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign;\n fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0;\n fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0;\n ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds));\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString) {\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString);\n if (!z && !offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n // At least one of z or offset is defined, but TS doesn't seem to understand\n // that we only use offset if z is not defined (and thus offset must be defined).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs));\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n return epochNs;\n}\nexport function RegulateISODate(yearParam, monthParam, dayParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, day);\n break;\n case 'constrain':\n ({ year, month, day } = ConstrainISODate(year, month, day));\n break;\n }\n return { year, month, day };\n}\nexport function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n switch (overflow) {\n case 'reject':\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n break;\n case 'constrain':\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond));\n break;\n }\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RegulateISOYearMonth(yearParam, monthParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n const referenceISODay = 1;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, referenceISODay);\n break;\n case 'constrain':\n ({ year, month } = ConstrainISODate(year, month));\n break;\n }\n return { year, month };\n}\nfunction DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) {\n let fHours = fHoursParam;\n let minutes = minutesParam;\n let fMinutes = fMinutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (fHours !== 0) {\n [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const mins = fHours * 60;\n minutes = MathTrunc(mins);\n fMinutes = mins % 1;\n }\n if (fMinutes !== 0) {\n [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const secs = fMinutes * 60;\n seconds = MathTrunc(secs);\n const fSeconds = secs % 1;\n if (fSeconds !== 0) {\n const mils = fSeconds * 1000;\n milliseconds = MathTrunc(mils);\n const fMilliseconds = mils % 1;\n if (fMilliseconds !== 0) {\n const mics = fMilliseconds * 1000;\n microseconds = MathTrunc(mics);\n const fMicroseconds = mics % 1;\n if (fMicroseconds !== 0) {\n const nans = fMicroseconds * 1000;\n nanoseconds = MathTrunc(nans);\n }\n }\n }\n }\n return { minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalDurationRecord(item) {\n if (!IsObject(item)) {\n return ParseTemporalDurationString(ToString(item));\n }\n if (IsTemporalDuration(item)) {\n return {\n years: GetSlot(item, YEARS),\n months: GetSlot(item, MONTHS),\n weeks: GetSlot(item, WEEKS),\n days: GetSlot(item, DAYS),\n hours: GetSlot(item, HOURS),\n minutes: GetSlot(item, MINUTES),\n seconds: GetSlot(item, SECONDS),\n milliseconds: GetSlot(item, MILLISECONDS),\n microseconds: GetSlot(item, MICROSECONDS),\n nanoseconds: GetSlot(item, NANOSECONDS)\n };\n }\n const result = {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n let partial = ToTemporalPartialDurationRecord(item);\n for (const property of DURATION_FIELDS) {\n const value = partial[property];\n if (value !== undefined) {\n result[property] = value;\n }\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalPartialDurationRecord(temporalDurationLike) {\n if (!IsObject(temporalDurationLike)) {\n throw new TypeError('invalid duration-like');\n }\n const result = {\n years: undefined,\n months: undefined,\n weeks: undefined,\n days: undefined,\n hours: undefined,\n minutes: undefined,\n seconds: undefined,\n milliseconds: undefined,\n microseconds: undefined,\n nanoseconds: undefined\n };\n let any = false;\n for (const property of DURATION_FIELDS) {\n const value = temporalDurationLike[property];\n if (value !== undefined) {\n any = true;\n result[property] = ToIntegerWithoutRounding(value);\n }\n }\n if (!any) {\n throw new TypeError('invalid duration-like');\n }\n return result;\n}\nfunction ToLimitedTemporalDuration(item, disallowedProperties) {\n let record = ToTemporalDurationRecord(item);\n for (const property of disallowedProperties) {\n if (record[property] !== 0) {\n throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);\n }\n }\n return record;\n}\nexport function ToTemporalOverflow(options) {\n if (options === undefined)\n return 'constrain';\n return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\nexport function ToTemporalDisambiguation(options) {\n if (options === undefined)\n return 'compatible';\n return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\nexport function ToTemporalRoundingMode(options, fallback) {\n return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback);\n}\nfunction NegateTemporalRoundingMode(roundingMode) {\n switch (roundingMode) {\n case 'ceil':\n return 'floor';\n case 'floor':\n return 'ceil';\n default:\n return roundingMode;\n }\n}\nexport function ToTemporalOffset(options, fallback) {\n if (options === undefined)\n return fallback;\n return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\nexport function ToShowCalendarOption(options) {\n return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto');\n}\nexport function ToShowTimeZoneNameOption(options) {\n return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto');\n}\nexport function ToShowOffsetOption(options) {\n return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\nexport function ToTemporalRoundingIncrement(options, dividend, inclusive) {\n let maximum = Infinity;\n if (dividend !== undefined)\n maximum = dividend;\n if (!inclusive && dividend !== undefined)\n maximum = dividend > 1 ? dividend - 1 : 1;\n const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1);\n if (dividend !== undefined && dividend % increment !== 0) {\n throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n }\n return increment;\n}\nexport function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) {\n const maximumIncrements = {\n year: undefined,\n month: undefined,\n week: undefined,\n day: undefined,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n}\nexport function ToSecondsStringPrecision(options) {\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n if (smallestUnit === 'hour') {\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains.\n // Maybe this is fixed in later TS versions?\n if (c === 'time' && s !== 'hour') {\n allowed.push(s, p);\n }\n return allowed;\n }, []);\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n switch (smallestUnit) {\n case 'minute':\n return { precision: 'minute', unit: 'minute', increment: 1 };\n case 'second':\n return { precision: 0, unit: 'second', increment: 1 };\n case 'millisecond':\n return { precision: 3, unit: 'millisecond', increment: 1 };\n case 'microsecond':\n return { precision: 6, unit: 'microsecond', increment: 1 };\n case 'nanosecond':\n return { precision: 9, unit: 'nanosecond', increment: 1 };\n default: // fall through if option not given\n }\n let digits = options.fractionalSecondDigits;\n if (digits === undefined)\n digits = 'auto';\n if (typeof digits !== 'number') {\n const stringDigits = ToString(digits);\n if (stringDigits === 'auto')\n return { precision: 'auto', unit: 'nanosecond', increment: 1 };\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`);\n }\n if (NumberIsNaN(digits) || digits < 0 || digits > 9) {\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n const precision = MathFloor(digits);\n switch (precision) {\n case 0:\n return { precision, unit: 'second', increment: 1 };\n case 1:\n case 2:\n case 3:\n return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n case 4:\n case 5:\n case 6:\n return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n case 7:\n case 8:\n case 9:\n return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n default:\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n}\nexport const REQUIRED = Symbol('~required~');\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) {\n const allowedSingular = [];\n for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n if (unitGroup === 'datetime' || unitGroup === category) {\n allowedSingular.push(singular);\n }\n }\n allowedSingular.push(...extraValues);\n let defaultVal = requiredOrDefault;\n if (defaultVal === REQUIRED) {\n defaultVal = undefined;\n }\n else if (defaultVal !== undefined) {\n allowedSingular.push(defaultVal);\n }\n const allowedValues = [\n ...allowedSingular\n ];\n for (const singular of allowedSingular) {\n const plural = PLURAL_FOR.get(singular);\n if (plural !== undefined)\n allowedValues.push(plural);\n }\n let retval = GetOption(options, key, allowedValues, defaultVal);\n if (retval === undefined && requiredOrDefault === REQUIRED) {\n throw new RangeError(`${key} is required`);\n }\n // Coerce any plural units into their singular form\n if (SINGULAR_FOR.has(retval)) {\n // We just has-checked this, but tsc doesn't understand that.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(retval);\n }\n return retval;\n}\nexport function ToRelativeTemporalObject(options) {\n const relativeTo = options.relativeTo;\n if (relativeTo === undefined)\n return relativeTo;\n let offsetBehaviour = 'option';\n let matchMinutes = false;\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n if (IsObject(relativeTo)) {\n if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo))\n return relativeTo;\n if (IsTemporalDateTime(relativeTo))\n return TemporalDateTimeToDate(relativeTo);\n calendar = GetTemporalCalendarWithISODefault(relativeTo);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n const dateOptions = ObjectCreate(null);\n dateOptions.overflow = 'constrain';\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions));\n // The `offset` and `timeZone` properties only exist on ZonedDateTime (or\n // ZonedDateTimeLike-property bags). The assertions below are used to avoid\n // TS errors while not diverging runtime code from proposal-temporal.\n offset = relativeTo.offset;\n if (offset === undefined)\n offsetBehaviour = 'wall';\n timeZone = relativeTo.timeZone;\n }\n else {\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n ParseISODateTime(ToString(relativeTo)));\n if (ianaName)\n timeZone = ianaName;\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinutes = true;\n }\n if (timeZone !== undefined) {\n timeZone = ToTemporalTimeZone(timeZone);\n let offsetNs = 0;\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(ToString(offset));\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n }\n return CreateTemporalDate(year, month, day, calendar);\n}\nexport function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n for (const [prop, v] of [\n ['years', years],\n ['months', months],\n ['weeks', weeks],\n ['days', days],\n ['hours', hours],\n ['minutes', minutes],\n ['seconds', seconds],\n ['milliseconds', milliseconds],\n ['microseconds', microseconds],\n ['nanoseconds', nanoseconds]\n ]) {\n if (v !== 0) {\n // All the above keys are definitely in SINGULAR_FOR\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(prop);\n }\n }\n return 'nanosecond';\n}\nexport function LargerOfTwoTemporalUnits(unit1, unit2) {\n if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2))\n return unit2;\n return unit1;\n}\nfunction MergeLargestUnitOption(optionsParam, largestUnit) {\n let options = optionsParam;\n if (options === undefined)\n options = ObjectCreate(null);\n return ObjectAssign(ObjectCreate(null), options, { largestUnit });\n}\nexport function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) {\n const result = ObjectCreate(null);\n let any = false;\n for (const property of fields) {\n let value = bag[property];\n if (value !== undefined) {\n any = true;\n if (BUILTIN_CASTS.has(property)) {\n // We just has-checked this map access, so there will definitely be a\n // value.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n value = BUILTIN_CASTS.get(property)(value);\n }\n result[property] = value;\n }\n else if (requiredFields !== 'partial') {\n // TODO: using .call in this way is not correctly type-checked by tsc.\n // We might need a type-safe Call wrapper?\n if (ArrayIncludes.call(requiredFields, property)) {\n throw new TypeError(`required property '${property}' missing or undefined`);\n }\n value = BUILTIN_DEFAULTS.get(property);\n result[property] = value;\n }\n }\n if (requiredFields === 'partial' && !any) {\n throw new TypeError(emptySourceErrorMessage);\n }\n if ((result.era === undefined) !== (result.eraYear === undefined)) {\n throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n }\n return result;\n}\nexport function ToTemporalTimeRecord(bag, completeness = 'complete') {\n // NOTE: Field order here is important.\n const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n const result = {};\n for (const field of fields) {\n const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n if (valueDesc !== undefined) {\n result[field] = valueDesc.value;\n }\n else if (completeness === 'complete') {\n result[field] = 0;\n }\n }\n return result;\n}\nexport function ToTemporalDate(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalDate(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarDateFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n if (z)\n throw new RangeError('Z designator not supported for PlainDate');\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n return new TemporalPlainDate(year, month, day, calendar); // include validation\n}\nexport function InterpretTemporalDateTimeFields(calendar, fields, options) {\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n const overflow = ToTemporalOverflow(options);\n const date = CalendarDateFromFields(calendar, fields, options);\n const year = GetSlot(date, ISO_YEAR);\n const month = GetSlot(date, ISO_MONTH);\n const day = GetSlot(date, ISO_DAY);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function ToTemporalDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalDateTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDate(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseTemporalDateTimeString(ToString(item)));\n if (z)\n throw new RangeError('Z designator not supported for PlainDateTime');\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n }\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function ToTemporalDuration(item) {\n if (IsTemporalDuration(item))\n return item;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function ToTemporalInstant(item) {\n if (IsTemporalInstant(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n }\n const ns = ParseTemporalInstant(ToString(item));\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(ns);\n}\nexport function ToTemporalMonthDay(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalMonthDay(item))\n return item;\n let calendar, calendarAbsent;\n if (HasSlot(item, CALENDAR)) {\n calendar = GetSlot(item, CALENDAR);\n calendarAbsent = false;\n }\n else {\n let maybeStringCalendar = item.calendar;\n calendarAbsent = maybeStringCalendar === undefined;\n if (maybeStringCalendar === undefined)\n maybeStringCalendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(maybeStringCalendar);\n }\n // HasSlot above adjusts the type of 'item' to include\n // TypesWithCalendarUnits, which causes type-inference failures below.\n // This is probably indicative of problems with HasSlot's typing.\n item = item;\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n // Callers who omit the calendar are not writing calendar-independent\n // code. In that case, `monthCode`/`year` can be omitted; `month` and\n // `day` are sufficient. Add a `year` to satisfy calendar validation.\n if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n fields.year = 1972;\n }\n return CalendarMonthDayFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item));\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISOYear === undefined) {\n RejectISODate(1972, month, day);\n return CreateTemporalMonthDay(month, day, calendar);\n }\n const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n return CalendarMonthDayFromFields(calendar, result);\n}\nexport function ToTemporalTime(itemParam, overflow = 'constrain') {\n let item = itemParam;\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n if (ToString(calendar) !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n }\n else {\n ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item)));\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar !== undefined && calendar !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n }\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function ToTemporalYearMonth(item, options) {\n if (IsObject(item)) {\n if (IsTemporalYearMonth(item))\n return item;\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item));\n // TODO: replace with ternary?\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISODay === undefined) {\n RejectISODate(year, month, 1);\n return CreateTemporalYearMonth(year, month, calendar);\n }\n const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n return CalendarYearMonthFromFields(calendar, result);\n}\nexport function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n // Simple case: ISO string without a TZ offset (or caller wants to ignore\n // the offset), so just convert DateTime to Instant in the given time zone\n const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n }\n // The caller wants the offset to always win ('use') OR the caller is OK\n // with the offset winning ('prefer' or 'reject') as long as it's valid\n // for this timezone and date/time.\n if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n // Calculate the instant for the input's date/time and offset\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('ZonedDateTime outside of supported range');\n return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n }\n // \"prefer\" or \"reject\"\n const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n for (const candidate of possibleInstants) {\n const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand'));\n if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n return GetSlot(candidate, EPOCHNANOSECONDS);\n }\n }\n // the user-provided offset doesn't match any instants for this time\n // zone and date/time.\n if (offsetOpt === 'reject') {\n const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n // toString (which is invoked by Node when using template literals directly).\n // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n }\n // fall through: offsetOpt === 'prefer', but the offset doesn't match\n // so fall back to use the time zone instead.\n const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n}\nexport function ToTemporalZonedDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar;\n let matchMinute = false;\n let offsetBehaviour = 'option';\n if (IsObject(item)) {\n if (IsTemporalZonedDateTime(item))\n return item;\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset');\n const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n timeZone = ToTemporalTimeZone(fields.timeZone);\n offset = fields.offset;\n if (offset === undefined) {\n offsetBehaviour = 'wall';\n }\n else {\n offset = ToString(offset);\n }\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n ParseTemporalZonedDateTimeString(ToString(item)));\n if (!ianaName)\n throw new RangeError('time zone ID required in brackets');\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n timeZone = new TemporalTimeZone(ianaName);\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinute = true; // ISO strings may specify offset with less precision\n }\n let offsetNs = 0;\n // The code above guarantees that if offsetBehaviour === 'option', then\n // `offset` is not undefined.\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(offset);\n const disambiguation = ToTemporalDisambiguation(options);\n const offsetOpt = ToTemporalOffset(options, 'reject');\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nexport function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) {\n RejectISODate(isoYear, isoMonth, isoDay);\n RejectDateRange(isoYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, DATE_BRAND, true);\n if (DEBUG) {\n ObjectDefineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) {\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n const result = ObjectCreate(TemporalPlainDate.prototype);\n CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n return result;\n}\nexport function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) {\n RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_HOUR, h);\n SetSlot(result, ISO_MINUTE, min);\n SetSlot(result, ISO_SECOND, s);\n SetSlot(result, ISO_MILLISECOND, ms);\n SetSlot(result, ISO_MICROSECOND, µs);\n SetSlot(result, ISO_NANOSECOND, ns);\n SetSlot(result, CALENDAR, calendar);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) {\n const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const result = ObjectCreate(TemporalPlainDateTime.prototype);\n CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n return result;\n}\nexport function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) {\n RejectISODate(referenceISOYear, isoMonth, isoDay);\n RejectDateRange(referenceISOYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_YEAR, referenceISOYear);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, MONTH_DAY_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) {\n const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n return result;\n}\nexport function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) {\n RejectISODate(isoYear, isoMonth, referenceISODay);\n RejectYearMonthRange(isoYear, isoMonth);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, referenceISODay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, YEAR_MONTH_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) {\n const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n return result;\n}\nexport function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) {\n ValidateEpochNanoseconds(epochNanoseconds);\n CreateSlots(result);\n SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n SetSlot(result, TIME_ZONE, timeZone);\n SetSlot(result, CALENDAR, calendar);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n SetSlot(result, INSTANT, instant);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) {\n const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n const result = ObjectCreate(TemporalZonedDateTime.prototype);\n CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n return result;\n}\nexport function GetISO8601Calendar() {\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n return new TemporalCalendar('iso8601');\n}\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields(calendar, fieldNamesParam) {\n let fieldNames = fieldNamesParam;\n if (calendar.fields) {\n fieldNames = calendar.fields(fieldNames);\n }\n const result = [];\n for (const name of fieldNames) {\n if (typeof name !== 'string')\n throw new TypeError('bad return from calendar.fields()');\n ArrayPrototypePush.call(result, name);\n }\n return result;\n}\nexport function CalendarMergeFields(calendar, fields, additionalFields) {\n const calMergeFields = calendar.mergeFields;\n if (!calMergeFields) {\n return { ...fields, ...additionalFields };\n }\n const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]);\n if (!IsObject(result))\n throw new TypeError('bad return from calendar.mergeFields()');\n return result;\n}\nexport function CalendarDateAdd(calendar, date, duration, options, dateAddParam) {\n let dateAdd = dateAddParam;\n if (dateAdd === undefined) {\n dateAdd = calendar.dateAdd;\n }\n const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nfunction CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) {\n let dateUntil = dateUntilParam;\n if (dateUntil === undefined) {\n dateUntil = calendar.dateUntil;\n }\n const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n if (!IsTemporalDuration(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYear(calendar, dateLike) {\n const result = calendar.year(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar year result must be an integer');\n }\n return ToIntegerThrowOnInfinity(result);\n}\nexport function CalendarMonth(calendar, dateLike) {\n const result = calendar.month(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar month result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarMonthCode(calendar, dateLike) {\n const result = calendar.monthCode(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar monthCode result must be a string');\n }\n return ToString(result);\n}\nexport function CalendarDay(calendar, dateLike) {\n const result = calendar.day(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar day result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarEra(calendar, dateLike) {\n let result = calendar.era(dateLike);\n if (result !== undefined) {\n result = ToString(result);\n }\n return result;\n}\nexport function CalendarEraYear(calendar, dateLike) {\n let result = calendar.eraYear(dateLike);\n if (result !== undefined) {\n result = ToIntegerThrowOnInfinity(result);\n }\n return result;\n}\nexport function CalendarDayOfWeek(calendar, dateLike) {\n return calendar.dayOfWeek(dateLike);\n}\nexport function CalendarDayOfYear(calendar, dateLike) {\n return calendar.dayOfYear(dateLike);\n}\nexport function CalendarWeekOfYear(calendar, dateLike) {\n return calendar.weekOfYear(dateLike);\n}\nexport function CalendarDaysInWeek(calendar, dateLike) {\n return calendar.daysInWeek(dateLike);\n}\nexport function CalendarDaysInMonth(calendar, dateLike) {\n return calendar.daysInMonth(dateLike);\n}\nexport function CalendarDaysInYear(calendar, dateLike) {\n return calendar.daysInYear(dateLike);\n}\nexport function CalendarMonthsInYear(calendar, dateLike) {\n return calendar.monthsInYear(dateLike);\n}\nexport function CalendarInLeapYear(calendar, dateLike) {\n return calendar.inLeapYear(dateLike);\n}\nexport function ToTemporalCalendar(calendarLikeParam) {\n let calendarLike = calendarLikeParam;\n if (IsObject(calendarLike)) {\n if (HasSlot(calendarLike, CALENDAR))\n return GetSlot(calendarLike, CALENDAR);\n if (!('calendar' in calendarLike))\n return calendarLike;\n calendarLike = calendarLike.calendar;\n if (IsObject(calendarLike) && !('calendar' in calendarLike))\n return calendarLike;\n }\n const identifier = ToString(calendarLike);\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n if (IsBuiltinCalendar(identifier))\n return new TemporalCalendar(identifier);\n let calendar;\n try {\n ({ calendar } = ParseISODateTime(identifier));\n }\n catch {\n throw new RangeError(`Invalid calendar: ${identifier}`);\n }\n if (!calendar)\n calendar = 'iso8601';\n return new TemporalCalendar(calendar);\n}\nfunction GetTemporalCalendarWithISODefault(item) {\n if (HasSlot(item, CALENDAR))\n return GetSlot(item, CALENDAR);\n const { calendar } = item;\n if (calendar === undefined)\n return GetISO8601Calendar();\n return ToTemporalCalendar(calendar);\n}\nexport function CalendarEquals(one, two) {\n if (one === two)\n return true;\n const cal1 = ToString(one);\n const cal2 = ToString(two);\n return cal1 === cal2;\n}\nexport function ConsolidateCalendars(one, two) {\n if (one === two)\n return two;\n const sOne = ToString(one);\n const sTwo = ToString(two);\n if (sOne === sTwo || sOne === 'iso8601') {\n return two;\n }\n else if (sTwo === 'iso8601') {\n return one;\n }\n else {\n throw new RangeError('irreconcilable calendars');\n }\n}\nexport function CalendarDateFromFields(calendar, fields, options) {\n const result = calendar.dateFromFields(fields, options);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYearMonthFromFields(calendar, fields, options) {\n const result = calendar.yearMonthFromFields(fields, options);\n if (!IsTemporalYearMonth(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarMonthDayFromFields(calendar, fields, options) {\n const result = calendar.monthDayFromFields(fields, options);\n if (!IsTemporalMonthDay(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function ToTemporalTimeZone(temporalTimeZoneLikeParam) {\n let temporalTimeZoneLike = temporalTimeZoneLikeParam;\n if (IsObject(temporalTimeZoneLike)) {\n if (IsTemporalZonedDateTime(temporalTimeZoneLike))\n return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n if (!('timeZone' in temporalTimeZoneLike))\n return temporalTimeZoneLike;\n temporalTimeZoneLike = temporalTimeZoneLike.timeZone;\n if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) {\n return temporalTimeZoneLike;\n }\n }\n const identifier = ToString(temporalTimeZoneLike);\n const timeZone = ParseTemporalTimeZone(identifier);\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(timeZone);\n}\nexport function TimeZoneEquals(one, two) {\n if (one === two)\n return true;\n const tz1 = ToString(one);\n const tz2 = ToString(two);\n return tz1 === tz2;\n}\nexport function TemporalDateTimeToDate(dateTime) {\n return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR));\n}\nexport function TemporalDateTimeToTime(dateTime) {\n const Time = GetIntrinsic('%Temporal.PlainTime%');\n return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n}\nexport function GetOffsetNanosecondsFor(timeZone, instant) {\n let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor;\n if (typeof getOffsetNanosecondsFor !== 'function') {\n throw new TypeError('getOffsetNanosecondsFor not callable');\n }\n const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]);\n if (typeof offsetNs !== 'number') {\n throw new TypeError('bad return from getOffsetNanosecondsFor');\n }\n if (!IsInteger(offsetNs) || MathAbs(offsetNs) > 86400e9) {\n throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n }\n return offsetNs;\n}\nexport function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) {\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n return FormatTimeZoneOffsetString(offsetNs);\n}\nexport function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) {\n const ns = GetSlot(instant, EPOCHNANOSECONDS);\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs));\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) {\n const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\nfunction DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const numInstants = possibleInstants.length;\n if (numInstants === 1)\n return possibleInstants[0];\n if (numInstants) {\n switch (disambiguation) {\n case 'compatible':\n // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n case 'earlier':\n return possibleInstants[0];\n case 'later':\n return possibleInstants[numInstants - 1];\n case 'reject': {\n throw new RangeError('multiple instants found');\n }\n }\n }\n const year = GetSlot(dateTime, ISO_YEAR);\n const month = GetSlot(dateTime, ISO_MONTH);\n const day = GetSlot(dateTime, ISO_DAY);\n const hour = GetSlot(dateTime, ISO_HOUR);\n const minute = GetSlot(dateTime, ISO_MINUTE);\n const second = GetSlot(dateTime, ISO_SECOND);\n const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utcns === null)\n throw new RangeError('DateTime outside of supported range');\n const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n const nanoseconds = offsetAfter - offsetBefore;\n switch (disambiguation) {\n case 'earlier': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined);\n const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar);\n return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n }\n case 'compatible':\n // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n case 'later': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined);\n const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar);\n const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n return possible[possible.length - 1];\n }\n case 'reject': {\n throw new RangeError('no such instant found');\n }\n }\n}\nfunction GetPossibleInstantsFor(timeZone, dateTime) {\n const possibleInstants = timeZone.getPossibleInstantsFor(dateTime);\n const result = [];\n for (const instant of possibleInstants) {\n if (!IsTemporalInstant(instant)) {\n throw new TypeError('bad return from getPossibleInstantsFor');\n }\n ArrayPrototypePush.call(result, instant);\n }\n return result;\n}\nexport function ISOYearString(year) {\n let yearString;\n if (year < 0 || year > 9999) {\n const sign = year < 0 ? '-' : '+';\n const yearNumber = MathAbs(year);\n yearString = sign + `000000${yearNumber}`.slice(-6);\n }\n else {\n yearString = `0000${year}`.slice(-4);\n }\n return yearString;\n}\nexport function ISODateTimePartString(part) {\n return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) {\n if (precision === 'minute')\n return '';\n const secs = `:${ISODateTimePartString(second)}`;\n let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n let fraction;\n if (precision === 'auto') {\n if (fractionNumber === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n }\n else {\n if (precision === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n }\n return `${secs}.${fraction}`;\n}\nexport function TemporalInstantToString(instant, timeZone, precision) {\n let outputTimeZone = timeZone;\n if (outputTimeZone === undefined) {\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n outputTimeZone = new TemporalTimeZone('UTC');\n }\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let timeZoneString = 'Z';\n if (timeZone !== undefined) {\n const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n }\n return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\nexport function TemporalDurationToString(duration, precision = 'auto', options = undefined) {\n function formatNumber(num) {\n if (num <= NumberMaxSafeInteger)\n return num.toString(10);\n return JSBI.BigInt(num).toString(10);\n }\n const years = GetSlot(duration, YEARS);\n const months = GetSlot(duration, MONTHS);\n const weeks = GetSlot(duration, WEEKS);\n const days = GetSlot(duration, DAYS);\n const hours = GetSlot(duration, HOURS);\n const minutes = GetSlot(duration, MINUTES);\n let seconds = GetSlot(duration, SECONDS);\n let ms = GetSlot(duration, MILLISECONDS);\n let µs = GetSlot(duration, MICROSECONDS);\n let ns = GetSlot(duration, NANOSECONDS);\n const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({\n seconds,\n milliseconds: ms,\n microseconds: µs,\n nanoseconds: ns\n } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n }\n const dateParts = [];\n if (years)\n dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n if (months)\n dateParts.push(`${formatNumber(MathAbs(months))}M`);\n if (weeks)\n dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n if (days)\n dateParts.push(`${formatNumber(MathAbs(days))}D`);\n const timeParts = [];\n if (hours)\n timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n if (minutes)\n timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n const secondParts = [];\n let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n let nsBigInt, µsBigInt, msBigInt, secondsBigInt;\n ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n const fraction = MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n let decimalPart;\n if (precision === 'auto') {\n if (fraction !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0');\n while (decimalPart[decimalPart.length - 1] === '0') {\n decimalPart = decimalPart.slice(0, -1);\n }\n }\n }\n else if (precision !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n }\n if (decimalPart)\n secondParts.unshift('.', decimalPart);\n if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n secondParts.unshift(abs(secondsBigInt).toString());\n }\n if (secondParts.length)\n timeParts.push(`${secondParts.join('')}S`);\n if (timeParts.length)\n timeParts.unshift('T');\n if (!dateParts.length && !timeParts.length)\n return 'PT0S';\n return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\nexport function TemporalDateToString(date, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(date, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n const calendarID = ToString(GetSlot(date, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${year}-${month}-${day}${calendar}`;\n}\nexport function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) {\n let year = GetSlot(dateTime, ISO_YEAR);\n let month = GetSlot(dateTime, ISO_MONTH);\n let day = GetSlot(dateTime, ISO_DAY);\n let hour = GetSlot(dateTime, ISO_HOUR);\n let minute = GetSlot(dateTime, ISO_MINUTE);\n let second = GetSlot(dateTime, ISO_SECOND);\n let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const yearString = ISOYearString(year);\n const monthString = ISODateTimePartString(month);\n const dayString = ISODateTimePartString(day);\n const hourString = ISODateTimePartString(hour);\n const minuteString = ISODateTimePartString(minute);\n const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n const calendarID = ToString(GetSlot(dateTime, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\nexport function TemporalMonthDayToString(monthDay, showCalendar = 'auto') {\n const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n let resultString = `${month}-${day}`;\n const calendar = GetSlot(monthDay, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n resultString = `${year}-${resultString}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n let resultString = `${year}-${month}`;\n const calendar = GetSlot(yearMonth, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n resultString += `-${day}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) {\n let instant = GetSlot(zdt, INSTANT);\n if (options) {\n const { unit, increment, roundingMode } = options;\n const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n instant = new TemporalInstant(ns);\n }\n const tz = GetSlot(zdt, TIME_ZONE);\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n if (showOffset !== 'never') {\n const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n result += FormatISOTimeZoneOffsetString(offsetNs);\n }\n if (showTimeZone !== 'never')\n result += `[${tz}]`;\n const calendarID = ToString(GetSlot(zdt, CALENDAR));\n result += FormatCalendarAnnotation(calendarID, showCalendar);\n return result;\n}\nexport function TestTimeZoneOffsetString(string) {\n return OFFSET.test(StringCtor(string));\n}\nexport function ParseTimeZoneOffsetString(string) {\n const match = OFFSET.exec(StringCtor(string));\n if (!match) {\n throw new RangeError(`invalid time zone offset: ${string}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n const hours = +match[2];\n const minutes = +(match[3] || 0);\n const seconds = +(match[4] || 0);\n const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) {\n if (TestTimeZoneOffsetString(timeZoneIdentifier)) {\n const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n return FormatTimeZoneOffsetString(offsetNs);\n }\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n return formatter.resolvedOptions().timeZone;\n}\nexport function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) {\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utc === null)\n throw new RangeError('Date outside of supported range');\n return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam) {\n const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n const nanoseconds = offsetNanoseconds % 1e9;\n const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n const secondString = ISODateTimePartString(seconds);\n let post = '';\n if (nanoseconds) {\n let fraction = `${nanoseconds}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n post = `:${secondString}.${fraction}`;\n }\n else if (seconds) {\n post = `:${secondString}`;\n }\n return `${sign}${hourString}:${minuteString}${post}`;\n}\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam) {\n let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand'));\n const sign = offsetNanoseconds < 0 ? '-' : '+';\n offsetNanoseconds = MathAbs(offsetNanoseconds);\n const minutes = (offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n // Note: Date.UTC() interprets one and two-digit years as being in the\n // 20th century, so don't use it\n const legacyDate = new Date();\n legacyDate.setUTCHours(hour, minute, second, millisecond);\n legacyDate.setUTCFullYear(year, month - 1, day);\n const ms = legacyDate.getTime();\n if (NumberIsNaN(ms))\n return null;\n let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX))\n return null;\n return ns;\n}\nfunction GetISOPartsFromEpoch(epochNanoseconds) {\n const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n let epochMilliseconds = JSBI.toNumber(quotient);\n let nanos = JSBI.toNumber(remainder);\n if (nanos < 0) {\n nanos += 1e6;\n epochMilliseconds -= 1;\n }\n const microsecond = MathFloor(nanos / 1e3) % 1e3;\n const nanosecond = nanos % 1e3;\n const item = new Date(epochMilliseconds);\n const year = item.getUTCFullYear();\n const month = item.getUTCMonth() + 1;\n const day = item.getUTCDate();\n const hour = item.getUTCHours();\n const minute = item.getUTCMinutes();\n const second = item.getUTCSeconds();\n const millisecond = item.getUTCMilliseconds();\n return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) {\n const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction maxJSBI(one, two) {\n return JSBI.lessThan(one, two) ? two : one;\n}\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\nexport function GetIANATimeZoneNextTransition(epochNanoseconds, id) {\n // Decide how far in the future after `epochNanoseconds` we'll look for an\n // offset change. There are two cases:\n // 1. If it's a past date (or a date in the near future) then it's possible\n // that the time zone may have newly added DST in the next few years. So\n // we'll have to look from the provided time until a few years after the\n // current system time. (Changes to DST policy are usually announced a few\n // years in the future.) Note that the first DST anywhere started in 1847,\n // so we'll start checks in 1847 instead of wasting cycles on years where\n // there will never be transitions.\n // 2. If it's a future date beyond the next few years, then we'll just assume\n // that the latest DST policy in TZDB will still be in effect. In this\n // case, we only need to look one year in the future to see if there are\n // any DST transitions. We actually only need to look 9-10 months because\n // DST has two transitions per year, but we'll use a year just to be safe.\n const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n // start there if an earlier date is supplied.\n let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n let rightNanos = leftNanos;\n let rightOffsetNs = leftOffsetNs;\n while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n if (leftOffsetNs === rightOffsetNs) {\n leftNanos = rightNanos;\n }\n }\n if (leftOffsetNs === rightOffsetNs)\n return null;\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\nexport function GetIANATimeZonePreviousTransition(epochNanoseconds, id) {\n // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n // have to look back one year to find a transition. But if it doesn't use DST,\n // then we need to look all the way back to 1847 (the earliest rule in the\n // TZDB) to see if it had other offset transitions in the past. Looping back\n // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n // also unnecessary because DST rules aren't put into the TZDB more than a few\n // years in the future because the political changes in time zones happen with\n // only a few years' warning. Therefore, if a far-future date is provided,\n // then we'll run the check in two parts:\n // 1. First, we'll look back for up to one year to see if the latest TZDB\n // rules have DST.\n // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n // current system time, and then look back to 1847. This reduces the\n // worst-case loop from 273K years to 175 years, for a ~1500x improvement\n // in worst-case perf.\n const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n let leftNanos = rightNanos;\n let leftOffsetNs = rightOffsetNs;\n while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n if (rightOffsetNs === leftOffsetNs) {\n rightNanos = leftNanos;\n }\n }\n if (rightOffsetNs === leftOffsetNs) {\n if (isFarFuture) {\n // There was no DST after looking back one year, which means that the most\n // recent TZDB rules don't have any recurring transitions. To check for\n // transitions in older rules, back up to a few years after the current\n // date and then look all the way back to 1847. Note that we move back one\n // day from the latest possible rule so that when the recursion runs it\n // won't consider the new time to be \"far future\" because the system clock\n // has advanced in the meantime.\n const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n return GetIANATimeZonePreviousTransition(newTimeToCheck, id);\n }\n return null;\n }\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime) {\n const parts = datetime.split(/[^\\w]+/);\n if (parts.length !== 7) {\n throw new RangeError(`expected 7 parts in \"${datetime}`);\n }\n const month = +parts[0];\n const day = +parts[1];\n let year = +parts[2];\n const era = parts[3].toUpperCase();\n if (era === 'B' || era === 'BC') {\n year = -year + 1;\n }\n else if (era !== 'A' && era !== 'AD') {\n throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n }\n let hour = +parts[4];\n if (hour === 24) {\n // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n hour = 0;\n }\n const minute = +parts[5];\n const second = +parts[6];\n if (!NumberIsFinite(year) ||\n !NumberIsFinite(month) ||\n !NumberIsFinite(day) ||\n !NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second)) {\n throw new RangeError(`Invalid number in \"${datetime}`);\n }\n return { year, month, day, hour, minute, second };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone, epochMilliseconds) {\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n // Using `format` instead of `formatToParts` for compatibility with older clients\n const datetime = formatter.format(new Date(epochMilliseconds));\n return parseFromEnUsFormat(datetime);\n}\nexport function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (ns === null)\n throw new RangeError('DateTime outside of supported range');\n let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n if (JSBI.lessThan(nsEarlier, NS_MIN))\n nsEarlier = ns;\n let nsLater = JSBI.add(ns, DAY_NANOS);\n if (JSBI.greaterThan(nsLater, NS_MAX))\n nsLater = ns;\n const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id);\n const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id);\n const found = earliest === latest ? [earliest] : [earliest, latest];\n return found\n .map((offsetNanoseconds) => {\n const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n if (year !== parts.year ||\n month !== parts.month ||\n day !== parts.day ||\n hour !== parts.hour ||\n minute !== parts.minute ||\n second !== parts.second ||\n millisecond !== parts.millisecond ||\n microsecond !== parts.microsecond ||\n nanosecond !== parts.nanosecond) {\n return undefined;\n }\n return epochNanoseconds;\n })\n .filter((x) => x !== undefined);\n}\nexport function LeapYear(year) {\n if (undefined === year)\n return false;\n const isDiv4 = year % 4 === 0;\n const isDiv100 = year % 100 === 0;\n const isDiv400 = year % 400 === 0;\n return isDiv4 && (!isDiv100 || isDiv400);\n}\nexport function ISODaysInMonth(year, month) {\n const DoM = {\n standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n };\n return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\nexport function DayOfWeek(year, month, day) {\n const m = month + (month < 3 ? 10 : -2);\n const Y = year - (month < 3 ? 1 : 0);\n const c = MathFloor(Y / 100);\n const y = Y - c * 100;\n const d = day;\n const pD = d;\n const pM = MathFloor(2.6 * m - 0.2);\n const pY = y + MathFloor(y / 4);\n const pC = MathFloor(c / 4) - 2 * c;\n const dow = (pD + pM + pY + pC) % 7;\n return dow + (dow <= 0 ? 7 : 0);\n}\nexport function DayOfYear(year, month, day) {\n let days = day;\n for (let m = month - 1; m > 0; m--) {\n days += ISODaysInMonth(year, m);\n }\n return days;\n}\nexport function WeekOfYear(year, month, day) {\n const doy = DayOfYear(year, month, day);\n const dow = DayOfWeek(year, month, day) || 7;\n const doj = DayOfWeek(year, 1, 1);\n const week = MathFloor((doy - dow + 10) / 7);\n if (week < 1) {\n if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n return 53;\n }\n else {\n return 52;\n }\n }\n if (week === 53) {\n if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n return 1;\n }\n }\n return week;\n}\nexport function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) {\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (prop !== 0)\n return prop < 0 ? -1 : 1;\n }\n return 0;\n}\nfunction BalanceISOYearMonth(yearParam, monthParam) {\n let year = yearParam;\n let month = monthParam;\n if (!NumberIsFinite(year) || !NumberIsFinite(month))\n throw new RangeError('infinity is out of range');\n month -= 1;\n year += MathFloor(month / 12);\n month %= 12;\n if (month < 0)\n month += 12;\n month += 1;\n return { year, month };\n}\nfunction BalanceISODate(yearParam, monthParam, dayParam) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n if (!NumberIsFinite(day))\n throw new RangeError('infinity is out of range');\n ({ year, month } = BalanceISOYearMonth(year, month));\n let daysInYear = 0;\n let testYear = month > 2 ? year : year - 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n year -= 1;\n testYear -= 1;\n day += daysInYear;\n }\n testYear += 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n year += 1;\n testYear += 1;\n day -= daysInYear;\n }\n while (day < 1) {\n ({ year, month } = BalanceISOYearMonth(year, month - 1));\n day += ISODaysInMonth(year, month);\n }\n while (day > ISODaysInMonth(year, month)) {\n day -= ISODaysInMonth(year, month);\n ({ year, month } = BalanceISOYearMonth(year, month + 1));\n }\n return { year, month, day };\n}\nfunction BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n if (!NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second) ||\n !NumberIsFinite(millisecond) ||\n !NumberIsFinite(microsecond) ||\n !NumberIsFinite(nanosecond)) {\n throw new RangeError('infinity is out of range');\n }\n microsecond += MathFloor(nanosecond / 1000);\n nanosecond = NonNegativeModulo(nanosecond, 1000);\n millisecond += MathFloor(microsecond / 1000);\n microsecond = NonNegativeModulo(microsecond, 1000);\n second += MathFloor(millisecond / 1000);\n millisecond = NonNegativeModulo(millisecond, 1000);\n minute += MathFloor(second / 60);\n second = NonNegativeModulo(second, 60);\n hour += MathFloor(minute / 60);\n minute = NonNegativeModulo(minute, 60);\n const deltaDays = MathFloor(hour / 24);\n hour = NonNegativeModulo(hour, 24);\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) {\n const days = JSBI.BigInt(daysParam);\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n if (daysParam !== 0)\n nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\nfunction NanosecondsToDays(nanosecondsParam, relativeTo) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n let dayLengthNs = 86400e9;\n if (sign === 0)\n return { days: 0, nanoseconds: ZERO, dayLengthNs };\n if (!IsTemporalZonedDateTime(relativeTo)) {\n let days;\n ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n }\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n const start = GetSlot(relativeTo, INSTANT);\n const endNs = JSBI.add(startNs, nanoseconds);\n const end = new TemporalInstant(endNs);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n // Find the difference in days only.\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate(null));\n let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n // If clock time after addition was in the middle of a skipped period, the\n // endpoint was disambiguated to a later clock time. So it's possible that\n // the resulting disambiguated result is later than endNs. If so, then back\n // up one day and try again. Repeat if necessary (some transitions are\n // > 24 hours) until either there's zero days left or the date duration is\n // back inside the period where it belongs. Note that this case only can\n // happen for positive durations because the only direction that\n // `disambiguation: 'compatible'` can change clock time is forwards.\n if (sign === 1) {\n while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) {\n --days;\n intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may do disambiguation\n }\n }\n nanoseconds = JSBI.subtract(endNs, intermediateNs);\n let isOverflow = false;\n let relativeInstant = new TemporalInstant(intermediateNs);\n do {\n // calculate length of the next day (day that contains the time remainder)\n const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO);\n if (isOverflow) {\n nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n relativeInstant = new TemporalInstant(oneDayFartherNs);\n days += sign;\n }\n } while (isOverflow);\n return { days, nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\nexport function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) {\n let days = daysParam;\n let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt;\n if (IsTemporalZonedDateTime(relativeTo)) {\n const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam);\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n }\n else {\n nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0);\n }\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n }\n else {\n days = 0;\n }\n const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n nanosecondsBigInt = abs(nanosecondsBigInt);\n microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n switch (largestUnit) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n break;\n case 'minute':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n break;\n case 'second':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n break;\n case 'millisecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n break;\n case 'microsecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n break;\n case 'nanosecond':\n break;\n default:\n throw new Error('assert not reached');\n }\n const hours = JSBI.toNumber(hoursBigInt) * sign;\n const minutes = JSBI.toNumber(minutesBigInt) * sign;\n const seconds = JSBI.toNumber(secondsBigInt) * sign;\n const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year':\n // no-op\n break;\n case 'month':\n {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance years down to months\n const dateAdd = calendar.dateAdd;\n const dateUntil = calendar.dateUntil;\n let relativeToDateOnly = relativeTo;\n while (MathAbs(years) > 0) {\n const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil);\n const oneYearMonths = GetSlot(untilResult, MONTHS);\n relativeToDateOnly = newRelativeTo;\n months += oneYearMonths;\n years -= sign;\n }\n }\n break;\n case 'week':\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance years down to days\n while (MathAbs(years) > 0) {\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n break;\n default:\n // balance years down to days\n while (MathAbs(years) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n // balance weeks down to days\n while (MathAbs(weeks) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n days += oneWeekDays;\n weeks -= sign;\n }\n break;\n }\n return { years, months, weeks, days };\n}\nexport function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n if (sign === 0)\n return { years, months, weeks, days };\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('a starting point is required for years balancing');\n // balance days up to years\n let newRelativeTo, oneYearDays;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n while (MathAbs(days) >= MathAbs(oneYearDays)) {\n days -= oneYearDays;\n years += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n }\n // balance days up to months\n let oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n // balance months up to years\n const dateAdd = calendar.dateAdd;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const dateUntil = calendar.dateUntil;\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n let oneYearMonths = GetSlot(untilResult, MONTHS);\n while (MathAbs(months) >= MathAbs(oneYearMonths)) {\n months -= oneYearMonths;\n years += sign;\n relativeTo = newRelativeTo;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n oneYearMonths = GetSlot(untilResult, MONTHS);\n }\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance days up to months\n let newRelativeTo, oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance days up to weeks\n let newRelativeTo, oneWeekDays;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n days -= oneWeekDays;\n weeks += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n break;\n }\n default:\n // no-op\n break;\n }\n return { years, months, weeks, days };\n}\nexport function CalculateOffsetShift(relativeTo, y, mon, w, d) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n const instant = GetSlot(relativeTo, INSTANT);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instantAfter = new TemporalInstant(after);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n return offsetAfter - offsetBefore;\n }\n return 0;\n}\nexport function CreateNegatedTemporalDuration(duration) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS));\n}\nexport function ConstrainToRange(value, min, max) {\n // Math.Max accepts undefined values and returns NaN. Undefined values are\n // used for optional params in the method below.\n return MathMin(max, MathMax(min, value));\n}\nfunction ConstrainISODate(year, monthParam, dayParam) {\n const month = ConstrainToRange(monthParam, 1, 12);\n const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n return { year, month, day };\n}\nfunction ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const hour = ConstrainToRange(hourParam, 0, 23);\n const minute = ConstrainToRange(minuteParam, 0, 59);\n const second = ConstrainToRange(secondParam, 0, 59);\n const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RejectToRange(value, min, max) {\n if (value < min || value > max)\n throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\nfunction RejectISODate(year, month, day) {\n RejectToRange(month, 1, 12);\n RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\nfunction RejectDateRange(year, month, day) {\n // Noon avoids trouble at edges of DateTime range (excludes midnight)\n RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\nexport function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(hour, 0, 23);\n RejectToRange(minute, 0, 59);\n RejectToRange(second, 0, 59);\n RejectToRange(millisecond, 0, 999);\n RejectToRange(microsecond, 0, 999);\n RejectToRange(nanosecond, 0, 999);\n}\nfunction RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectISODate(year, month, day);\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n // Reject any DateTime 24 hours or more outside the Instant range\n if ((year === YEAR_MIN &&\n null ==\n GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n (year === YEAR_MAX &&\n null ==\n GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) {\n throw new RangeError('DateTime outside of supported range');\n }\n}\nexport function ValidateEpochNanoseconds(epochNanoseconds) {\n if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n throw new RangeError('Instant outside of supported range');\n }\n}\nfunction RejectYearMonthRange(year, month) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n if (year === YEAR_MIN) {\n RejectToRange(month, 4, 12);\n }\n else if (year === YEAR_MAX) {\n RejectToRange(month, 1, 9);\n }\n}\nexport function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) {\n const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (!NumberIsFinite(prop))\n throw new RangeError('infinite values not allowed as duration fields');\n const propSign = MathSign(prop);\n if (propSign !== 0 && propSign !== sign)\n throw new RangeError('mixed-sign values not allowed as duration fields');\n }\n}\nexport function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) {\n switch (largestUnit) {\n case 'year':\n case 'month': {\n const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n if (sign === 0)\n return { years: 0, months: 0, weeks: 0, days: 0 };\n const start = { year: y1, month: m1, day: d1 };\n const end = { year: y2, month: m2, day: d2 };\n let years = end.year - start.year;\n let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months: 0, weeks: 0, days: 0 }\n : { years: 0, months: years * 12, weeks: 0, days: 0 };\n }\n let months = end.month - start.month;\n if (midSign !== sign) {\n years -= sign;\n months += sign * 12;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months, weeks: 0, days: 0 }\n : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n }\n if (midSign !== sign) {\n // The end date is later in the month than mid date (or earlier for\n // negative durations). Back up one month.\n months -= sign;\n if (months === -sign) {\n years -= sign;\n months = 11 * sign;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n }\n let days = 0;\n // If we get here, months and years are correct (no overflow), and `mid`\n // is within the range from `start` to `end`. To count the days between\n // `mid` and `end`, there are 3 cases:\n // 1) same month: use simple subtraction\n // 2) end is previous month from intermediate (negative duration)\n // 3) end is next month from intermediate (positive duration)\n if (mid.month === end.month) {\n // 1) same month: use simple subtraction\n days = end.day - mid.day;\n }\n else if (sign < 0) {\n // 2) end is previous month from intermediate (negative duration)\n // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n }\n else {\n // 3) end is next month from intermediate (positive duration)\n // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n }\n if (largestUnit === 'month') {\n months += years * 12;\n years = 0;\n }\n return { years, months, weeks: 0, days };\n }\n case 'week':\n case 'day': {\n let larger, smaller, sign;\n if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n smaller = { year: y1, month: m1, day: d1 };\n larger = { year: y2, month: m2, day: d2 };\n sign = 1;\n }\n else {\n smaller = { year: y2, month: m2, day: d2 };\n larger = { year: y1, month: m1, day: d1 };\n sign = -1;\n }\n let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n for (let year = smaller.year; year < larger.year; ++year) {\n days += LeapYear(year) ? 366 : 365;\n }\n let weeks = 0;\n if (largestUnit === 'week') {\n weeks = MathFloor(days / 7);\n days %= 7;\n }\n weeks *= sign;\n days *= sign;\n return { years: 0, months: 0, weeks, days };\n }\n default:\n throw new Error('assert not reached');\n }\n}\nfunction DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) {\n let hours = h2 - h1;\n let minutes = min2 - min1;\n let seconds = s2 - s1;\n let milliseconds = ms2 - ms1;\n let microseconds = µs2 - µs1;\n let nanoseconds = ns2 - ns1;\n const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n let deltaDays = 0;\n ({\n deltaDays,\n hour: hours,\n minute: minutes,\n second: seconds,\n millisecond: milliseconds,\n microsecond: microseconds,\n nanosecond: nanoseconds\n } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n if (deltaDays != 0)\n throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceInstant(ns1, ns2, increment, unit, roundingMode) {\n const diff = JSBI.subtract(ns2, ns1);\n const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(diff, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n const roundedDiff = JSBI.add(wholeDays, roundedRemainder);\n const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND));\n const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND));\n const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND));\n const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION));\n return { seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) {\n let y1 = y1Param;\n let mon1 = mon1Param;\n let d1 = d1Param;\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2);\n const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n if (dateSign === -timeSign) {\n ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const untilOptions = MergeLargestUnitOption(options, dateLargestUnit);\n // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n // Type 'SmallestUnit | undefined' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n // Type '\"hour\"' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions);\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) {\n const nsDiff = JSBI.subtract(ns2, ns1);\n if (JSBI.equal(nsDiff, ZERO)) {\n return {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n }\n // Find the difference in dates only.\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const start = new TemporalInstant(ns1);\n const end = new TemporalInstant(ns2);\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options);\n const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n // Finally, merge the date and time durations and return the merged result.\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour');\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// TODO: does it make sense to explicitly union the other and options types for each operation?\nexport function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) {\n const other = ToTemporalInstant(otherParam);\n let first, second;\n if (operation === 'until') {\n [first, second] = [instant, other];\n }\n else {\n [first, second] = [other, instant];\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ToTemporalRoundingMode(options, 'trunc');\n const MAX_DIFFERENCE_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false);\n const onens = GetSlot(first, EPOCHNANOSECONDS);\n const twons = GetSlot(second, EPOCHNANOSECONDS);\n let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode);\n let hours, minutes;\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDate(otherParam);\n const calendar = GetSlot(plainDate, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions);\n if (smallestUnit !== 'day' || roundingIncrement !== 1) {\n ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDateTime(otherParam);\n const calendar = GetSlot(plainDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options);\n const relativeTo = TemporalDateTimeToDate(plainDateTime);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalTime(otherParam);\n const options = GetOptionsObject(optionsParam);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'hour';\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalYearMonth(otherParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarID = ToString(calendar);\n const otherCalendarID = ToString(otherCalendar);\n if (calendarID !== otherCalendarID) {\n throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n if (c === 'date' && s !== 'week' && s !== 'day')\n allowed.push(s, p);\n return allowed;\n }, []);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month');\n if (smallestUnit === 'week' || smallestUnit === 'day') {\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'week' || largestUnit === 'day') {\n throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n }\n if (largestUnit === 'auto')\n largestUnit = 'year';\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const otherFields = PrepareTemporalFields(other, fieldNames, []);\n otherFields.day = 1;\n const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n thisFields.day = 1;\n // The calls to PrepareTemporalFields don't mark day as a required property,\n // and TS doesn't automatically narrow the type of the object because of the\n // assignments above, so we must \"cast\" the inputs.\n const otherDate = CalendarDateFromFields(calendar, otherFields);\n const thisDate = CalendarDateFromFields(calendar, thisFields);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions);\n if (smallestUnit !== 'month' || roundingIncrement !== 1) {\n ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalZonedDateTime(otherParam);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, \n // TODO this doesn't type-check as it includes >= day-size units\n // This is probably safe as the typing for ToSmallestTemporalUnit isn't\n // very good.\n smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n throw new RangeError(\"When calculating difference between time zones, largestUnit must be 'hours' \" +\n 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.');\n }\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n year += years;\n month += months;\n ({ year, month } = BalanceISOYearMonth(year, month));\n ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n days += 7 * weeks;\n day += days;\n ({ year, month, day } = BalanceISODate(year, month, day));\n return { year, month, day };\n}\nfunction AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n hour += hours;\n minute += minutes;\n second += seconds;\n millisecond += milliseconds;\n microsecond += microseconds;\n nanosecond += nanoseconds;\n let deltaDays = 0;\n ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond));\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) {\n const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (!relativeTo) {\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n }\n years = months = weeks = 0;\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else if (IsTemporalDate(relativeTo)) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n const dateAdd = calendar.dateAdd;\n const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const differenceOptions = ObjectCreate(null);\n differenceOptions.largestUnit = dateLargestUnit;\n ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else {\n // relativeTo is a ZonedDateTime\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate(null)));\n }\n }\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) {\n let sum = ZERO;\n sum = JSBI.add(sum, JSBI.BigInt(ns));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n const result = JSBI.add(epochNanoseconds, sum);\n ValidateEpochNanoseconds(result);\n return result;\n}\nfunction AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) {\n let days = daysParam;\n // Add the time part\n let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n days += deltaDays;\n // Delegate the date part addition to the calendar\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const datePart = CreateTemporalDate(year, month, day, calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n return {\n year: GetSlot(addedDate, ISO_YEAR),\n month: GetSlot(addedDate, ISO_MONTH),\n day: GetSlot(addedDate, ISO_DAY),\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond\n };\n}\nexport function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) {\n // If only time is to be added, then use Instant math. It's not OK to fall\n // through to the date/time code below because compatible disambiguation in\n // the PlainDateTime=>Instant conversion will change the offset of any\n // ZonedDateTime in the repeated clock time after a backwards transition.\n // When adding/subtracting time units and not dates, this disambiguation is\n // not expected and so is avoided below via a fast path for time-only\n // arithmetic.\n // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n }\n // RFC 5545 requires the date portion to be added in calendar days and the\n // time portion to be added in exact time.\n const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar);\n const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar);\n // Note that 'compatible' is used below because this disambiguation behavior\n // is required by RFC 5545.\n const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible');\n return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\nexport function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other);\n const options = GetOptionsObject(optionsParam);\n const relativeTo = ToRelativeTemporalObject(options);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n 'years',\n 'months',\n 'weeks',\n 'days'\n ]);\n const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ns);\n}\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(dateTime, CALENDAR);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'));\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) {\n let duration = ToTemporalDurationRecord(durationLike);\n if (operation === 'subtract') {\n duration = {\n years: -duration.years,\n months: -duration.months,\n weeks: -duration.weeks,\n days: -duration.days,\n hours: -duration.hours,\n minutes: -duration.minutes,\n seconds: -duration.seconds,\n milliseconds: -duration.milliseconds,\n microseconds: -duration.microseconds,\n nanoseconds: -duration.nanoseconds\n };\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1;\n // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n // and TS doesn't narrow the type as a result of the assignment above, so we\n // cast the fields input to the new type.\n const startDate = CalendarDateFromFields(calendar, fields);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const optionsCopy = ObjectAssign(ObjectCreate(null), options);\n const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options);\n const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nfunction RoundNumberToIncrement(quantity, increment, mode) {\n if (increment === 1)\n return quantity;\n let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment));\n if (JSBI.equal(remainder, ZERO))\n return quantity;\n const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n switch (mode) {\n case 'ceil':\n if (sign > 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'floor':\n if (sign < 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'trunc':\n // no change needed, because divmod is a truncation\n break;\n case 'halfExpand':\n // \"half up away from zero\"\n if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) {\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n }\n break;\n }\n return JSBI.multiply(quotient, JSBI.BigInt(increment));\n}\nexport function RoundInstant(epochNs, increment, unit, roundingMode) {\n // Note: NonNegativeModulo, but with BigInt\n let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9));\n if (JSBI.lessThan(remainder, ZERO))\n remainder = JSBI.add(remainder, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(epochNs, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n return JSBI.add(wholeDays, roundedRemainder);\n}\nexport function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n let quantity = ZERO;\n switch (unit) {\n case 'day':\n case 'hour':\n quantity = JSBI.BigInt(hour);\n // fall through\n case 'minute':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n // fall through\n case 'second':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n // fall through\n case 'millisecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n // fall through\n case 'microsecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n // fall through\n case 'nanosecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n }\n const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode);\n const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n switch (unit) {\n case 'day':\n return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n case 'hour':\n return BalanceTime(result, 0, 0, 0, 0, 0);\n case 'minute':\n return BalanceTime(hour, result, 0, 0, 0, 0);\n case 'second':\n return BalanceTime(hour, minute, result, 0, 0, 0);\n case 'millisecond':\n return BalanceTime(hour, minute, second, result, 0, 0);\n case 'microsecond':\n return BalanceTime(hour, minute, second, millisecond, result, 0);\n case 'nanosecond':\n return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n default:\n throw new Error(`Invalid unit ${unit}`);\n }\n}\nfunction DaysUntil(earlier, later) {\n return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days;\n}\nfunction MoveRelativeDate(calendar, relativeToParam, duration) {\n const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined);\n const days = DaysUntil(relativeToParam, later);\n return { relativeTo: later, days };\n}\nexport function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) {\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\nexport function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (!IsTemporalZonedDateTime(relativeTo) ||\n unit === 'year' ||\n unit === 'month' ||\n unit === 'week' ||\n unit === 'day' ||\n (unit === 'nanosecond' && increment === 1)) {\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n }\n // There's one more round of rounding possible: if relativeTo is a\n // ZonedDateTime, the time units could have rounded up into enough hours\n // to exceed the day length. If this happens, grow the date part by a\n // single day and re-run exact time rounding on the smaller remainder. DO\n // NOT RECURSE, because once the extra hours are sucked up into the date\n // duration, there's no way for another full day to come from the next\n // round of rounding. And if it were possible (e.g. contrived calendar\n // with 30-minute-long \"days\") then it'd risk an infinite loop.\n let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0);\n const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) {\n ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo));\n timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'));\n }\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n let calendar, zdtRelative;\n // A cast is used below because relativeTo will be either PlainDate or\n // undefined for the rest of this long method (after any ZDT=>PlainDate\n // conversion below), and TS isn't smart enough to know that the type has\n // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n let relativeTo = relativeToParam;\n if (relativeTo) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n zdtRelative = relativeTo;\n relativeTo = ToTemporalDate(relativeTo);\n }\n else if (!IsTemporalDate(relativeTo)) {\n throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n }\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n // First convert time units up to days, if rounding to days or higher units.\n // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n // larger. We'll cast away `undefined` when it's used lower down below.\n let dayLengthNs;\n if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n let intermediate;\n if (zdtRelative) {\n intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n }\n let deltaDays;\n let dayLength;\n ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n dayLengthNs = JSBI.BigInt(dayLength);\n days += deltaDays;\n hours = minutes = seconds = milliseconds = microseconds = 0;\n }\n let total;\n switch (unit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('A starting point is required for years rounding');\n // convert months and weeks to days by calculating difference(\n // relativeTo + years, relativeTo + { years, months, weeks })\n const yearsDuration = new TemporalDuration(years);\n const dateAdd = calendar.dateAdd;\n const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n relativeTo = yearsLater;\n days += monthsWeeksInDays;\n const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'year';\n const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years;\n years += yearsPassed;\n const oldRelativeTo = relativeTo;\n relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd);\n const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n days -= daysPassed;\n const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear);\n // Note that `nanoseconds` below (here and in similar code for months,\n // weeks, and days further below) isn't actually nanoseconds for the\n // full date range. Instead, it's a BigInt representation of total\n // days multiplied by the number of nanoseconds in the last day of\n // the duration. This lets us do days-or-larger rounding using BigInt\n // math which reduces precision loss.\n oneYearDays = MathAbs(oneYearDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n months = weeks = days = 0;\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('A starting point is required for months rounding');\n // convert weeks to days by calculating difference(relativeTo +\n // { years, months }, relativeTo + { years, months, weeks })\n const yearsMonths = new TemporalDuration(years, months);\n const dateAdd = calendar.dateAdd;\n const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n relativeTo = yearsMonthsLater;\n days += weeksInDays;\n // Months may be different lengths of days depending on the calendar,\n // convert days to months in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n months += sign;\n days -= oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n oneMonthDays = MathAbs(oneMonthDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n weeks = days = 0;\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('A starting point is required for weeks rounding');\n // Weeks may be different lengths of days depending on the calendar,\n // convert days to weeks in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n weeks += sign;\n days -= oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n oneWeekDays = MathAbs(oneWeekDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n days = 0;\n break;\n }\n case 'day': {\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = dayLengthNs;\n nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n break;\n }\n case 'hour': {\n const divisor = 3600e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n minutes = seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'minute': {\n const divisor = 60e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'second': {\n const divisor = 1e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n milliseconds = microseconds = 0;\n break;\n }\n case 'millisecond': {\n const divisor = 1e6;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n microseconds = 0;\n break;\n }\n case 'microsecond': {\n const divisor = 1e3;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n break;\n }\n case 'nanosecond': {\n total = JSBI.toNumber(nanoseconds);\n nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode);\n break;\n }\n }\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n microseconds,\n nanoseconds: JSBI.toNumber(nanoseconds),\n total\n };\n}\nexport function CompareISODate(y1, m1, d1, y2, m2, d2) {\n for (const [x, y] of [\n [y1, y2],\n [m1, m2],\n [d1, d2]\n ]) {\n if (x !== y)\n return ComparisonResult(x - y);\n }\n return 0;\n}\nfunction NonNegativeModulo(x, y) {\n let result = x % y;\n if (ObjectIs(result, -0))\n return 0;\n if (result < 0)\n result += y;\n return result;\n}\nexport function ToBigIntExternal(arg) {\n const jsbiBI = ToBigInt(arg);\n if (typeof globalThis.BigInt !== 'undefined')\n return globalThis.BigInt(jsbiBI.toString(10));\n return jsbiBI;\n}\nexport function ToBigInt(arg) {\n if (arg instanceof JSBI) {\n return arg;\n }\n let prim = arg;\n if (typeof arg === 'object') {\n const toPrimFn = arg[Symbol.toPrimitive];\n if (toPrimFn && typeof toPrimFn === 'function') {\n prim = ReflectApply(toPrimFn, arg, ['number']);\n }\n }\n switch (typeof prim) {\n case 'undefined':\n case 'object':\n case 'number':\n case 'symbol':\n default:\n throw new TypeError(`cannot convert ${typeof arg} to bigint`);\n case 'string':\n if (!prim.match(/^\\s*(?:[+-]?\\d+\\s*)?$/)) {\n throw new SyntaxError('invalid BigInt syntax');\n }\n // eslint: no-fallthrough: false\n case 'bigint':\n try {\n return JSBI.BigInt(prim.toString());\n }\n catch (e) {\n if (e instanceof Error && e.message.startsWith('Invalid integer'))\n throw new SyntaxError(e.message);\n throw e;\n }\n case 'boolean':\n if (prim) {\n return ONE;\n }\n else {\n return ZERO;\n }\n }\n}\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds = (() => {\n let ns = JSBI.BigInt(Date.now() % 1e6);\n return () => {\n const ms = JSBI.BigInt(Date.now());\n const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n ns = JSBI.remainder(ms, MILLION);\n if (JSBI.greaterThan(result, NS_MAX))\n return NS_MAX;\n if (JSBI.lessThan(result, NS_MIN))\n return NS_MIN;\n return result;\n };\n})();\nexport function SystemTimeZone() {\n const fmt = new IntlDateTimeFormat('en-us');\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone));\n}\nexport function ComparisonResult(value) {\n return value < 0 ? -1 : value > 0 ? 1 : value;\n}\nexport function GetOptionsObject(options) {\n if (options === undefined)\n return ObjectCreate(null);\n if (IsObject(options) && options !== null)\n return options;\n throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\nexport function CreateOnePropObject(propName, propValue) {\n const o = ObjectCreate(null);\n o[propName] = propValue;\n return o;\n}\nfunction GetOption(options, property, allowedValues, fallback) {\n let value = options[property];\n if (value !== undefined) {\n value = ToString(value);\n if (!allowedValues.includes(value)) {\n throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n }\n return value;\n }\n return fallback;\n}\nfunction GetNumberOption(options, property, minimum, maximum, fallback) {\n let valueRaw = options[property];\n if (valueRaw === undefined)\n return fallback;\n const value = ToNumber(valueRaw);\n if (NumberIsNaN(value) || value < minimum || value > maximum) {\n throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`);\n }\n return MathFloor(value);\n}\nexport function IsBuiltinCalendar(id) {\n return ArrayIncludes.call(BUILTIN_CALENDAR_IDS, id);\n}\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\nfunction bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) {\n // This doesn't make much sense - why do these get converted unnecessarily?\n let left = JSBI.BigInt(leftParam);\n let right = JSBI.BigInt(rightParam);\n let lstate = lstateParam;\n let rstate = rstateParam;\n while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n const mstate = getState(middle);\n if (mstate === lstate) {\n left = middle;\n lstate = mstate;\n }\n else if (mstate === rstate) {\n right = middle;\n rstate = mstate;\n }\n else {\n throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n }\n }\n return right;\n}\nconst nsPerTimeUnit = {\n hour: 3600e9,\n minute: 60e9,\n second: 1e9,\n millisecond: 1e6,\n microsecond: 1e3,\n nanosecond: 1\n};\n//# sourceMappingURL=ecmascript.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { GetSlot, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, TIME_ZONE } from './slots';\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst ZONED = Symbol('zoneddatetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst TZ_GIVEN = Symbol('timezone-id-given');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\nconst descriptor = (value) => {\n return {\n value,\n enumerable: true,\n writable: false,\n configurable: true\n };\n};\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy(obj, prop) {\n let val = obj[prop];\n if (typeof val === 'function') {\n // If we get here, `val` is an \"amender function\". It will take the user's\n // options and transform them into suitable options to be passed into the\n // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n // will vary depending on the Temporal type, so that's why we store separate\n // formatters in separate props on the polyfill's DateTimeFormat instances.\n // The efficiency happens because we don't create an (expensive) formatter\n // until the user calls toLocaleString for that Temporal type.\n val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n // TODO: can this be typed more cleanly?\n obj[prop] = val;\n }\n return val;\n}\n// Similarly, lazy-init TimeZone instances.\nfunction getResolvedTimeZoneLazy(obj) {\n let val = obj[TZ_RESOLVED];\n if (typeof val === 'string') {\n val = ES.ToTemporalTimeZone(val);\n obj[TZ_RESOLVED] = val;\n }\n return val;\n}\nfunction DateTimeFormatImpl(locale = undefined, optionsParam = {}) {\n if (!(this instanceof DateTimeFormatImpl)) {\n return new DateTimeFormatImpl(locale, optionsParam);\n }\n const hasOptions = typeof optionsParam !== 'undefined';\n const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n // TODO: remove type assertion after Temporal types land in TS lib types\n const original = new IntlDateTimeFormat(locale, options);\n const ro = original.resolvedOptions();\n // DateTimeFormat instances are very expensive to create. Therefore, they will\n // be lazily created only when needed, using the locale and options provided.\n // But it's possible for callers to mutate those inputs before lazy creation\n // happens. For this reason, we clone the inputs instead of caching the\n // original objects. To avoid the complexity of deep cloning any inputs that\n // are themselves objects (e.g. the locales array, or options property values\n // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n // coercion and cloning for us. Unfortunately, we can't just use the resolved\n // options as-is because our options-amending logic adds additional fields if\n // the user doesn't supply any unit fields like year, month, day, hour, etc.\n // Therefore, we limit the properties in the clone to properties that were\n // present in the original input.\n if (hasOptions) {\n const clonedResolved = ObjectAssign({}, ro);\n for (const prop in clonedResolved) {\n if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n delete clonedResolved[prop];\n }\n }\n this[OPTIONS] = clonedResolved;\n }\n else {\n this[OPTIONS] = options;\n }\n this[TZ_GIVEN] = options.timeZone ? options.timeZone : null;\n this[LOCALE] = ro.locale;\n this[ORIGINAL] = original;\n this[TZ_RESOLVED] = ro.timeZone;\n this[CAL_ID] = ro.calendar;\n this[DATE] = dateAmend;\n this[YM] = yearMonthAmend;\n this[MD] = monthDayAmend;\n this[TIME] = timeAmend;\n this[DATETIME] = datetimeAmend;\n this[ZONED] = zonedDateTimeAmend;\n this[INST] = instantAmend;\n return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n writable: true,\n value: 'DateTimeFormat'\n});\nDateTimeFormatImpl.supportedLocalesOf = function (locales, options) {\n return IntlDateTimeFormat.supportedLocalesOf(locales, options);\n};\nconst propertyDescriptors = {\n resolvedOptions: descriptor(resolvedOptions),\n format: descriptor(format),\n formatRange: descriptor(formatRange)\n};\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n writable: false,\n enumerable: false,\n configurable: false\n});\nexport const DateTimeFormat = DateTimeFormatImpl;\nfunction resolvedOptions() {\n return this[ORIGINAL].resolvedOptions();\n}\nfunction adjustFormatterTimeZone(formatter, timeZone) {\n if (!timeZone)\n return formatter;\n const options = formatter.resolvedOptions();\n if (options.timeZone === timeZone)\n return formatter;\n // Existing Intl isn't typed to accept Temporal-specific options and the lib\n // types for resolved options are less restrictive than the types for options.\n // For example, `weekday` is\n // `'long' | 'short' | 'narrow'` in options but `string` in resolved options.\n // TODO: investigate why, and file an issue against TS if it's a bug.\n if (options['dateStyle'] || options['timeStyle']) {\n // Unfortunately, Safari's resolvedOptions include parameters that will\n // cause errors at runtime if passed along with\n // dateStyle or timeStyle options as per\n // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components.\n // This has been fixed in newer versions of Safari:\n // https://bugs.webkit.org/show_bug.cgi?id=231041\n delete options['weekday'];\n delete options['era'];\n delete options['year'];\n delete options['month'];\n delete options['day'];\n delete options['hour'];\n delete options['minute'];\n delete options['second'];\n delete options['timeZoneName'];\n delete options['hourCycle'];\n delete options['hour12'];\n delete options['dayPeriod'];\n }\n return new IntlDateTimeFormat(options.locale, { ...options, timeZone });\n}\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.format(instant.epochMilliseconds);\n }\n return this[ORIGINAL].format(datetime, ...rest);\n}\nfunction formatToParts(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.formatToParts(instant.epochMilliseconds);\n }\n return this[ORIGINAL].formatToParts(datetime, ...rest);\n}\nfunction formatRange(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRange(a, b);\n}\nfunction formatRangeToParts(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRangeToParts(a, b);\n}\nfunction amend(optionsParam = {}, amended = {}) {\n const options = ObjectAssign({}, optionsParam);\n for (const opt of [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'weekday',\n 'dayPeriod',\n 'timeZoneName',\n 'dateStyle',\n 'timeStyle'\n ]) {\n options[opt] = opt in amended ? amended[opt] : options[opt];\n if (options[opt] === false || options[opt] === undefined)\n delete options[opt];\n }\n return options;\n}\nfunction timeAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n month: false,\n day: false,\n weekday: false,\n timeZoneName: false,\n dateStyle: false\n });\n if (!hasTimeOptions(options)) {\n options = ObjectAssign({}, options, {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction yearMonthAmend(optionsParam) {\n let options = amend(optionsParam, {\n day: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('year' in options || 'month' in options)) {\n options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n }\n return options;\n}\nfunction monthDayAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('month' in options || 'day' in options)) {\n options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n }\n return options;\n}\nfunction dateAmend(optionsParam) {\n let options = amend(optionsParam, {\n hour: false,\n minute: false,\n second: false,\n dayPeriod: false,\n timeZoneName: false,\n timeStyle: false\n });\n if (!hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n });\n }\n return options;\n}\nfunction datetimeAmend(optionsParam) {\n let options = amend(optionsParam, { timeZoneName: false });\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction zonedDateTimeAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n if (options.timeZoneName === undefined)\n options.timeZoneName = 'short';\n }\n return options;\n}\nfunction instantAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction hasDateOptions(options) {\n return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\nfunction hasTimeOptions(options) {\n return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options);\n}\nfunction isTemporalObject(obj) {\n return (ES.IsTemporalDate(obj) ||\n ES.IsTemporalTime(obj) ||\n ES.IsTemporalDateTime(obj) ||\n ES.IsTemporalZonedDateTime(obj) ||\n ES.IsTemporalYearMonth(obj) ||\n ES.IsTemporalMonthDay(obj) ||\n ES.IsTemporalInstant(obj));\n}\nfunction sameTemporalType(x, y) {\n if (!isTemporalObject(x) || !isTemporalObject(y))\n return false;\n if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y))\n return false;\n if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y))\n return false;\n if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y))\n return false;\n if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y))\n return false;\n if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y))\n return false;\n if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y))\n return false;\n if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y))\n return false;\n return true;\n}\nfunction extractOverrides(temporalObj, main) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n if (ES.IsTemporalTime(temporalObj)) {\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, TIME)\n };\n }\n if (ES.IsTemporalYearMonth(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, YM)\n };\n }\n if (ES.IsTemporalMonthDay(temporalObj)) {\n const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, MD)\n };\n }\n if (ES.IsTemporalDate(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATE)\n };\n }\n if (ES.IsTemporalDateTime(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n let datetime = temporalObj;\n if (calendar === 'iso8601') {\n datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n }\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATETIME)\n };\n }\n if (ES.IsTemporalZonedDateTime(temporalObj)) {\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const timeZone = GetSlot(temporalObj, TIME_ZONE);\n const objTimeZone = ES.ToString(timeZone);\n if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) {\n throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`);\n }\n return {\n instant: GetSlot(temporalObj, INSTANT),\n formatter: getPropLazy(main, ZONED),\n timeZone: objTimeZone\n };\n }\n if (ES.IsTemporalInstant(temporalObj)) {\n return {\n instant: temporalObj,\n formatter: getPropLazy(main, INST)\n };\n }\n return {};\n}\n//# sourceMappingURL=intl.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\nexport class Instant {\n constructor(epochNanoseconds) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const ns = ES.ToBigInt(epochNanoseconds);\n ES.ValidateEpochNanoseconds(ns);\n CreateSlots(this);\n SetSlot(this, EPOCHNANOSECONDS, ns);\n if (DEBUG) {\n const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${repr}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get epochSeconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n hour: 24,\n minute: 1440,\n second: 86400,\n millisecond: 86400e3,\n microsecond: 86400e6,\n nanosecond: 86400e9\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true);\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n return new Instant(roundedNs);\n }\n equals(otherParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalInstant(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n let timeZone = options.timeZone;\n if (timeZone !== undefined)\n timeZone = ES.ToTemporalTimeZone(timeZone);\n // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n const roundedInstant = new Instant(roundedNs);\n return ES.TemporalInstantToString(roundedInstant, timeZone, precision);\n }\n toJSON() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalInstantToString(this, undefined, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument in toZonedDateTime');\n }\n const calendarLike = item.calendar;\n if (calendarLike === undefined) {\n throw new TypeError('missing calendar property in toZonedDateTime');\n }\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const temporalTimeZoneLike = item.timeZone;\n if (temporalTimeZoneLike === undefined) {\n throw new TypeError('missing timeZone property in toZonedDateTime');\n }\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toZonedDateTimeISO(itemParam) {\n let item = itemParam;\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (ES.IsObject(item)) {\n const timeZoneProperty = item.timeZone;\n if (timeZoneProperty !== undefined) {\n item = timeZoneProperty;\n }\n }\n const timeZone = ES.ToTemporalTimeZone(item);\n const calendar = ES.GetISO8601Calendar();\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n static fromEpochSeconds(epochSecondsParam) {\n const epochSeconds = ES.ToNumber(epochSecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMilliseconds(epochMillisecondsParam) {\n const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMicroseconds(epochMicrosecondsParam) {\n const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochNanoseconds(epochNanosecondsParam) {\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static from(item) {\n if (ES.IsTemporalInstant(item)) {\n return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n }\n return ES.ToTemporalInstant(item);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalInstant(oneParam);\n const two = ES.ToTemporalInstant(twoParam);\n const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(oneNs, twoNs))\n return -1;\n if (JSBI.greaterThan(oneNs, twoNs))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n//# sourceMappingURL=instant.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport { CALENDAR_ID, ISO_YEAR, ISO_MONTH, ISO_DAY, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, HasSlot, SetSlot } from './slots';\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectEntries = Object.entries;\nconst ObjectKeys = Object.keys;\n/**\n * Implementations for each calendar. Non-ISO calendars have an extra `helper`\n * property that provides additional per-calendar logic.\n */\nconst impl = {};\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n * PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar {\n constructor(idParam) {\n // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n // exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: id is required');\n }\n const id = ES.ToString(idParam);\n if (!ES.IsBuiltinCalendar(id))\n throw new RangeError(`invalid calendar identifier ${id}`);\n CreateSlots(this);\n SetSlot(this, CALENDAR_ID, id);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${id}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n dateFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this);\n }\n yearMonthFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this);\n }\n monthDayFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this);\n }\n fields(fields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const fieldsArray = [];\n const allowed = new Set([\n 'year',\n 'month',\n 'monthCode',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n 'microsecond',\n 'nanosecond'\n ]);\n for (const name of fields) {\n if (typeof name !== 'string')\n throw new TypeError('invalid fields');\n if (!allowed.has(name))\n throw new RangeError(`invalid field name ${name}`);\n allowed.delete(name);\n ArrayPrototypePush.call(fieldsArray, name);\n }\n return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n }\n mergeFields(fields, additionalFields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields);\n }\n dateAdd(dateParam, durationParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n const duration = ES.ToTemporalDuration(durationParam);\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const { days } = ES.BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day');\n return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this);\n }\n dateUntil(oneParam, twoParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'day';\n const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n }\n year(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].year(date);\n }\n month(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (ES.IsTemporalMonthDay(date))\n throw new TypeError('use monthCode on PlainMonthDay instead');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].month(date);\n }\n monthCode(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthCode(date);\n }\n day(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].day(date);\n }\n era(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].era(date);\n }\n eraYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].eraYear(date);\n }\n dayOfWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n }\n dayOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n }\n weekOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n }\n daysInWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n }\n daysInMonth(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date);\n }\n daysInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date);\n }\n monthsInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date);\n }\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date);\n }\n toString() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR_ID);\n }\n toJSON() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalCalendar(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month, day } = fields;\n ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month } = fields;\n ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n return ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1);\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n throw new TypeError('either year or monthCode required with month');\n }\n const useYear = fields.monthCode === undefined;\n const referenceISOYear = 1972;\n fields = resolveNonLunisolarMonth(fields);\n let { month, day, year } = fields;\n ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n return ES.CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n },\n fields(fields) {\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const merged = {};\n for (const nextKey of ObjectKeys(fields)) {\n if (nextKey === 'month' || nextKey === 'monthCode')\n continue;\n merged[nextKey] = fields[nextKey];\n }\n const newKeys = ObjectKeys(additionalFields);\n for (const nextKey of newKeys) {\n merged[nextKey] = additionalFields[nextKey];\n }\n if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) {\n const { month, monthCode } = fields;\n if (month !== undefined)\n merged.month = month;\n if (monthCode !== undefined)\n merged.monthCode = monthCode;\n }\n return merged;\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n let year = GetSlot(date, ISO_YEAR);\n let month = GetSlot(date, ISO_MONTH);\n let day = GetSlot(date, ISO_DAY);\n ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n dateUntil(one, two, largestUnit) {\n return ES.DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit);\n },\n year(date) {\n return GetSlot(date, ISO_YEAR);\n },\n era() {\n return undefined;\n },\n eraYear() {\n return undefined;\n },\n month(date) {\n return GetSlot(date, ISO_MONTH);\n },\n monthCode(date) {\n return buildMonthCode(GetSlot(date, ISO_MONTH));\n },\n day(date) {\n return GetSlot(date, ISO_DAY);\n },\n dayOfWeek(date) {\n return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n dayOfYear(date) {\n return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n weekOfYear(date) {\n return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n daysInWeek() {\n return 7;\n },\n daysInMonth(date) {\n return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n },\n monthsInYear() {\n return 12;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR));\n }\n};\nfunction monthCodeNumberPart(monthCode) {\n if (!monthCode.startsWith('M')) {\n throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`);\n }\n const month = +monthCode.slice(1);\n if (isNaN(month))\n throw new RangeError(`Invalid month code: ${monthCode}`);\n return month;\n}\nfunction buildMonthCode(month, leap = false) {\n return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) {\n let { month, monthCode } = calendarDate;\n if (monthCode === undefined) {\n if (month === undefined)\n throw new TypeError('Either month or monthCode are required');\n // The ISO calendar uses the default (undefined) value because it does\n // constrain/reject after this method returns. Non-ISO calendars, however,\n // rely on this function to constrain/reject out-of-range `month` values.\n if (overflow === 'reject')\n ES.RejectToRange(month, 1, monthsPerYear);\n if (overflow === 'constrain')\n month = ES.ConstrainToRange(month, 1, monthsPerYear);\n monthCode = buildMonthCode(month);\n }\n else {\n const numberPart = monthCodeNumberPart(monthCode);\n if (month !== undefined && month !== numberPart) {\n throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n }\n if (monthCode !== buildMonthCode(numberPart)) {\n throw new RangeError(`Invalid month code: ${monthCode}`);\n }\n month = numberPart;\n if (month < 1 || month > monthsPerYear)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n return { ...calendarDate, month, monthCode };\n}\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance. No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n constructor(cacheToClone) {\n this.map = new Map();\n this.calls = 0;\n this.hits = 0;\n this.misses = 0;\n this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n if (cacheToClone !== undefined) {\n let i = 0;\n for (const entry of cacheToClone.map.entries()) {\n if (++i > OneObjectCache.MAX_CACHE_ENTRIES)\n break;\n this.map.set(...entry);\n }\n }\n }\n get(key) {\n const result = this.map.get(key);\n if (result) {\n this.hits++;\n this.report();\n }\n this.calls++;\n return result;\n }\n set(key, value) {\n this.map.set(key, value);\n this.misses++;\n this.report();\n }\n report() {\n /*\n if (this.calls === 0) return;\n const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n */\n }\n setObject(obj) {\n if (OneObjectCache.objectMap.get(obj))\n throw new RangeError('object already cached');\n OneObjectCache.objectMap.set(obj, this);\n this.report();\n }\n /**\n * Returns a WeakMap-backed cache that's used to store expensive results\n * that are associated with a particular Temporal object instance.\n *\n * @param obj - object to associate with the cache\n */\n static getCacheForObject(obj) {\n let cache = OneObjectCache.objectMap.get(obj);\n if (!cache) {\n cache = new OneObjectCache();\n OneObjectCache.objectMap.set(obj, cache);\n }\n return cache;\n }\n}\nOneObjectCache.objectMap = new WeakMap();\nOneObjectCache.MAX_CACHE_ENTRIES = 1000;\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }) {\n const yearString = ES.ISOYearString(isoYear);\n const monthString = ES.ISODateTimePartString(isoMonth);\n const dayString = ES.ISODateTimePartString(isoDay);\n return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\nfunction simpleDateDiff(one, two) {\n return {\n years: one.year - two.year,\n months: one.month - two.month,\n days: one.day - two.day\n };\n}\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nclass HelperBase {\n constructor() {\n // The short era format works for all calendars except Japanese, which will\n // override.\n this.eraLength = 'short';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = true;\n }\n getFormatter() {\n // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n // calendars that are used. Note that the nonIsoHelperBase object is spread\n // into each each calendar's implementation before any cache is created, so\n // each calendar gets its own separate cached formatter.\n if (typeof this.formatter === 'undefined') {\n this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n era: this.eraLength,\n timeZone: 'UTC'\n });\n }\n return this.formatter;\n }\n isoToCalendarDate(isoDate, cache) {\n const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n let parts, isoString;\n try {\n isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n parts = dateTimeFormat.formatToParts(new Date(isoString));\n }\n catch (e) {\n throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n }\n const result = {};\n for (let { type, value } of parts) {\n if (type === 'year')\n result.eraYear = +value;\n // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n if (type === 'relatedYear')\n result.eraYear = +value;\n if (type === 'month') {\n const matches = /^([0-9]*)(.*?)$/.exec(value);\n if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n throw new RangeError(`Unexpected month: ${value}`);\n }\n // If the month has no numeric part (should only see this for the Hebrew\n // calendar with newer FF / Chromium versions; see\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n // placeholder month index of `1` and rely on the derived class to\n // calculate the correct month index from the month name stored in\n // `monthExtra`.\n result.month = matches[1] ? +matches[1] : 1;\n if (result.month < 1) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)');\n }\n if (result.month > 13) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n // The ICU formats for the Hebrew calendar no longer support a numeric\n // month format. So we'll rely on the derived class to interpret it.\n // `monthExtra` is also used on the Chinese calendar to handle a suffix\n // \"bis\" indicating a leap month.\n if (matches[2])\n result.monthExtra = matches[2];\n }\n if (type === 'day')\n result.day = +value;\n if (this.hasEra && type === 'era' && value != null && value !== '') {\n // The convention for Temporal era values is lowercase, so following\n // that convention in this prototype. Punctuation is removed, accented\n // letters are normalized, and spaces are replaced with dashes.\n // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n // The call to normalize() and the replacement regex deals with era\n // names that contain non-ASCII characters like Japanese eras. Also\n // ignore extra content in parentheses like JPN era date ranges.\n value = value.split(' (')[0];\n result.era = value\n .normalize('NFD')\n .replace(/[^-0-9 \\p{L}]/gu, '')\n .replace(' ', '-')\n .toLowerCase();\n }\n }\n if (result.eraYear === undefined) {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n // Translate eras that may be handled differently by Temporal vs. by Intl\n // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n if (this.reviseIntlEra) {\n const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n result.era = era;\n result.eraYear = eraYear;\n }\n if (this.checkIcuBugs)\n this.checkIcuBugs(isoDate);\n const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n if (calendarDate.year === undefined)\n throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.month === undefined)\n throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.day === undefined)\n throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n cache.set(key, calendarDate);\n // Also cache the reverse mapping\n ['constrain', 'reject'].forEach((overflow) => {\n const keyReverse = JSON.stringify({\n func: 'calendarToIsoDate',\n year: calendarDate.year,\n month: calendarDate.month,\n day: calendarDate.day,\n overflow,\n id: this.id\n });\n cache.set(keyReverse, isoDate);\n });\n return calendarDate;\n }\n validateCalendarDate(calendarDate) {\n const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n // the derived class must deal with it.\n if (monthExtra !== undefined)\n throw new RangeError('Unexpected `monthExtra` value');\n if (year === undefined && eraYear === undefined)\n throw new TypeError('year or eraYear is required');\n if (month === undefined && monthCode === undefined)\n throw new TypeError('month or monthCode is required');\n if (day === undefined)\n throw new RangeError('Missing day');\n if (monthCode !== undefined) {\n if (typeof monthCode !== 'string') {\n throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n }\n if (!/^M([01]?\\d)(L?)$/.test(monthCode))\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n if (this.constantEra) {\n if (era !== undefined && era !== this.constantEra) {\n throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n }\n if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n }\n }\n }\n /**\n * Allows derived calendars to add additional fields and/or to make\n * adjustments e.g. to set the era based on the date or to revise the month\n * number in lunisolar calendars per\n * https://github.com/tc39/proposal-temporal/issues/1203.\n *\n * The base implementation fills in missing values by assuming the simplest\n * possible calendar:\n * - no eras or a constant era defined in `.constantEra`\n * - non-lunisolar calendar (no leap months)\n * */\n adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', \n // This param is only used by derived classes\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromLegacyDate = false) {\n if (this.calendarType === 'lunisolar')\n throw new RangeError('Override required for lunisolar calendars');\n let calendarDate = calendarDateParam;\n this.validateCalendarDate(calendarDate);\n // For calendars that always use the same era, set it here so that derived\n // calendars won't need to implement this method simply to set the era.\n if (this.constantEra) {\n // year and eraYear always match when there's only one possible era\n const { year, eraYear } = calendarDate;\n calendarDate = {\n ...calendarDate,\n era: this.constantEra,\n year: year !== undefined ? year : eraYear,\n eraYear: eraYear !== undefined ? eraYear : year\n };\n }\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, monthCode } = calendarDate;\n ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n return { ...calendarDate, month, monthCode };\n }\n regulateMonthDayNaive(calendarDate, overflow, cache) {\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, day } = calendarDate;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n }\n return { ...calendarDate, month, day };\n }\n calendarToIsoDate(dateParam, overflow = 'constrain', cache) {\n const originalDate = dateParam;\n // First, normalize the calendar date to ensure that (year, month, day)\n // are all present, converting monthCode and eraYear if needed.\n let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n // Fix obviously out-of-bounds values. Values that are valid generally, but\n // not in this particular year, may not be caught here for some calendars.\n // If so, these will be handled lower below.\n date = this.regulateMonthDayNaive(date, overflow, cache);\n const { year, month, day } = date;\n const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n let cached = cache.get(key);\n if (cached)\n return cached;\n // If YMD are present in the input but the input has been constrained\n // already, then cache both the original value and the constrained value.\n let keyOriginal;\n if (originalDate.year !== undefined &&\n originalDate.month !== undefined &&\n originalDate.day !== undefined &&\n (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) {\n keyOriginal = JSON.stringify({\n func: 'calendarToIsoDate',\n year: originalDate.year,\n month: originalDate.month,\n day: originalDate.day,\n overflow,\n id: this.id\n });\n cached = cache.get(keyOriginal);\n if (cached)\n return cached;\n }\n // First, try to roughly guess the result\n let isoEstimate = this.estimateIsoDate({ year, month, day });\n const calculateSameMonthResult = (diffDays) => {\n // If the estimate is in the same year & month as the target, then we can\n // calculate the result exactly and short-circuit any additional logic.\n // This optimization assumes that months are continuous. It would break if\n // a calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So\n // this optimization should be safe for all ICU calendars.\n let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n if (date.day > this.minimumMonthLength(date)) {\n // There's a chance that the calendar date is out of range. Throw or\n // constrain if so.\n let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n if (overflow === 'reject') {\n throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n }\n // Back up a day at a time until we're not hanging over the month end\n testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n }\n }\n return testIsoEstimate;\n };\n let sign = 0;\n let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n let diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n }\n else {\n sign = this.compareCalendarDates(date, roundtripEstimate);\n }\n }\n // If the initial guess is not in the same month, then then bisect the\n // distance to the target, starting with 8 days per step.\n let increment = 8;\n let maybeConstrained = false;\n while (sign) {\n isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n const oldRoundtripEstimate = roundtripEstimate;\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n const oldSign = sign;\n sign = this.compareCalendarDates(date, roundtripEstimate);\n if (sign) {\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n // Signal the loop condition that there's a match.\n sign = 0;\n // If the calendar day is larger than the minimal length for this\n // month, then it might be larger than the actual length of the month.\n // So we won't cache it as the correct calendar date for this ISO\n // date.\n maybeConstrained = date.day > this.minimumMonthLength(date);\n }\n else if (oldSign && sign !== oldSign) {\n if (increment > 1) {\n // If the estimate overshot the target, try again with a smaller increment\n // in the reverse direction.\n increment /= 2;\n }\n else {\n // Increment is 1, and neither the previous estimate nor the new\n // estimate is correct. The only way that can happen is if the\n // original date was an invalid value that will be constrained or\n // rejected here.\n if (overflow === 'reject') {\n throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n }\n else {\n // To constrain, pick the earliest value\n const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n // If current value is larger, then back up to the previous value.\n if (order > 0)\n isoEstimate = this.addDaysIso(isoEstimate, -1);\n maybeConstrained = true;\n sign = 0;\n }\n }\n }\n }\n }\n cache.set(key, isoEstimate);\n if (keyOriginal)\n cache.set(keyOriginal, isoEstimate);\n if (date.year === undefined ||\n date.month === undefined ||\n date.day === undefined ||\n date.monthCode === undefined ||\n (this.hasEra && (date.era === undefined || date.eraYear === undefined))) {\n throw new RangeError('Unexpected missing property');\n }\n if (!maybeConstrained) {\n // Also cache the reverse mapping\n const keyReverse = JSON.stringify({\n func: 'isoToCalendarDate',\n isoYear: isoEstimate.year,\n isoMonth: isoEstimate.month,\n isoDay: isoEstimate.day,\n id: this.id\n });\n cache.set(keyReverse, date);\n }\n return isoEstimate;\n }\n temporalToCalendarDate(date, cache) {\n const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n const result = this.isoToCalendarDate(isoDate, cache);\n return result;\n }\n compareCalendarDates(date1Param, date2Param) {\n // `date1` and `date2` are already records. The calls below simply validate\n // that all three required fields are present.\n const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n if (date1.year !== date2.year)\n return ES.ComparisonResult(date1.year - date2.year);\n if (date1.month !== date2.month)\n return ES.ComparisonResult(date1.month - date2.month);\n if (date1.day !== date2.day)\n return ES.ComparisonResult(date1.day - date2.day);\n return 0;\n }\n /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n regulateDate(calendarDate, overflow = 'constrain', cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n return this.isoToCalendarDate(isoDate, cache);\n }\n addDaysIso(isoDate, days) {\n const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n return added;\n }\n addDaysCalendar(calendarDate, days, cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIso = this.addDaysIso(isoDate, days);\n const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n return addedCalendar;\n }\n addMonthsCalendar(calendarDateParam, months, overflow, cache) {\n let calendarDate = calendarDateParam;\n const { day } = calendarDate;\n for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n const { month } = calendarDate;\n const oldCalendarDate = calendarDate;\n const days = months < 0\n ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n : this.daysInMonth(calendarDate, cache);\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n let addedIso = this.addDaysIso(isoDate, days);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n // Normally, we can advance one month by adding the number of days in the\n // current month. However, if we're at the end of the current month and\n // the next month has fewer days, then we rolled over to the after-next\n // month. Below we detect this condition and back up until we're back in\n // the desired month.\n if (months > 0) {\n const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n while (calendarDate.month - 1 !== month % monthsInOldYear) {\n addedIso = this.addDaysIso(addedIso, -1);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n }\n }\n if (calendarDate.day !== day) {\n // try to retain the original day-of-month, if possible\n calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n }\n }\n if (overflow === 'reject' && calendarDate.day !== day) {\n throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n }\n return calendarDate;\n }\n addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) {\n const { year, day, monthCode } = calendarDate;\n const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n const initialDays = days + weeks * 7;\n const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n return addedDays;\n }\n untilCalendar(calendarOne, calendarTwo, largestUnit, cache) {\n let days = 0;\n let weeks = 0;\n let months = 0;\n let years = 0;\n switch (largestUnit) {\n case 'day':\n days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n break;\n case 'week': {\n const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n days = totalDays % 7;\n weeks = (totalDays - days) / 7;\n break;\n }\n case 'month':\n case 'year': {\n const diffYears = calendarTwo.year - calendarOne.year;\n const diffMonths = calendarTwo.month - calendarOne.month;\n const diffDays = calendarTwo.day - calendarOne.day;\n const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n if (!sign) {\n return { years: 0, months: 0, weeks: 0, days: 0 };\n }\n if (largestUnit === 'year' && diffYears) {\n const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0);\n years = isOneFurtherInYear ? diffYears - sign : diffYears;\n }\n const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n // Now we have less than one year remaining. Add one month at a time\n // until we go over the target, then back up one month and calculate\n // remaining days and weeks.\n let current;\n let next = yearsAdded;\n do {\n months += sign;\n current = next;\n next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n if (next.day !== calendarOne.day) {\n // In case the day was constrained down, try to un-constrain it\n next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n }\n } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n months -= sign; // correct for loop above which overshoots by 1\n const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n days = remainingDays;\n break;\n }\n }\n return { years, months, weeks, days };\n }\n daysInMonth(calendarDate, cache) {\n // Add enough days to roll over to the next month. One we're in the next\n // month, we can calculate the length of the current month. NOTE: This\n // algorithm assumes that months are continuous. It would break if a\n // calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So this\n // code should be safe for all ICU calendars.\n const { day } = calendarDate;\n const max = this.maximumMonthLength(calendarDate);\n const min = this.minimumMonthLength(calendarDate);\n // easiest case: we already know the month length if min and max are the same.\n if (min === max)\n return min;\n // Add enough days to get into the next month, without skipping it\n const increment = day <= max - min ? max : min;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIsoDate = this.addDaysIso(isoDate, increment);\n const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n // Now back up to the last day of the original month\n const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n return endOfMonthCalendar.day;\n }\n daysInPreviousMonth(calendarDate, cache) {\n const { day, month, year } = calendarDate;\n // Check to see if we already know the month length, and return it if so\n const previousMonthYear = month > 1 ? year : year - 1;\n let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n previousMonthDate = { ...previousMonthDate, month: previousMonth };\n const min = this.minimumMonthLength(previousMonthDate);\n const max = this.maximumMonthLength(previousMonthDate);\n if (min === max)\n return max;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n return lastDayOfPreviousMonthCalendar.day;\n }\n startOfCalendarYear(calendarDate) {\n return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n }\n startOfCalendarMonth(calendarDate) {\n return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n }\n calendarDaysUntil(calendarOne, calendarTwo, cache) {\n const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n return this.isoDaysUntil(oneIso, twoIso);\n }\n isoDaysUntil(oneIso, twoIso) {\n const duration = ES.DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day');\n return duration.days;\n }\n monthDayFromFields(fields, overflow, cache) {\n let { year, month, monthCode, day, era, eraYear } = fields;\n if (monthCode === undefined) {\n if (year === undefined && (era === undefined || eraYear === undefined)) {\n throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required');\n }\n ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow));\n }\n let isoYear, isoMonth, isoDay;\n let closestCalendar, closestIso;\n // Look backwards starting from the calendar year of 1972-01-01 up to 100\n // calendar years to find a year that has this month and day. Normal months\n // and days will match immediately, but for leap days and leap months we may\n // have to look for a while.\n const startDateIso = { year: 1972, month: 1, day: 1 };\n const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache);\n for (let i = 0; i < 100; i++) {\n const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache);\n const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n return { month: isoMonth, day: isoDay, year: isoYear };\n }\n else if (overflow === 'constrain') {\n // non-ISO constrain algorithm tries to find the closest date in a matching month\n if (closestCalendar === undefined ||\n (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n roundTripCalendarDate.day > closestCalendar.day)) {\n closestCalendar = roundTripCalendarDate;\n closestIso = isoDate;\n }\n }\n }\n if (overflow === 'constrain' && closestIso !== undefined)\n return closestIso;\n throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n }\n}\nclass HebrewHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'hebrew';\n this.calendarType = 'lunisolar';\n this.months = {\n Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n };\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate) {\n const { year } = calendarDate;\n // FYI: In addition to adding a month in leap years, the Hebrew calendar\n // also has per-year changes to the number of days of Heshvan and Kislev.\n // Given that these can be calculated by counting the number of days in\n // those months, I assume that these DO NOT need to be exposed as\n // Hebrew-only prototype fields or methods.\n return (7 * year + 1) % 19 < 7;\n }\n monthsInYear(calendarDate) {\n return this.inLeapYear(calendarDate) ? 13 : 12;\n }\n minimumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'min');\n }\n maximumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'max');\n }\n minMaxMonthLength(calendarDate, minOrMax) {\n const { month, year } = calendarDate;\n const monthCode = this.getMonthCode(year, month);\n const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n if (monthInfo === undefined)\n throw new RangeError(`unmatched Hebrew month: ${month}`);\n const daysInMonth = monthInfo[1].days;\n return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n }\n /** Take a guess at what ISO date a particular calendar date corresponds to */\n estimateIsoDate(calendarDate) {\n const { year } = calendarDate;\n return { year: year - 3760, month: 1, day: 1 };\n }\n getMonthCode(year, month) {\n if (this.inLeapYear({ year })) {\n return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n }\n else {\n return buildMonthCode(month);\n }\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n // The incoming type is actually CalendarDate (same as args to\n // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n // reassignments below, so as an alternative to 10+ type casts, we'll lie\n // here and claim that the type has `day` and `year` filled in already.\n let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate;\n if (year === undefined && eraYear !== undefined)\n year = eraYear;\n if (eraYear === undefined && year !== undefined)\n eraYear = year;\n if (fromLegacyDate) {\n // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n // output returns the numeric equivalent of `month` as a string, meaning\n // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n // means Adar. In this case, `month` will already be correct and no action\n // is needed. However, in Node 14 and later formatToParts returns the name\n // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n // correct `month` using the string name as a key.\n if (monthExtra) {\n const monthInfo = this.months[monthExtra];\n if (!monthInfo)\n throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n }\n // Because we're getting data from legacy Date, then `month` will always be present\n monthCode = this.getMonthCode(year, month);\n const result = { year, month: month, day, era: undefined, eraYear, monthCode };\n return result;\n }\n else {\n // When called without input coming from legacy Date output, simply ensure\n // that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (month === undefined) {\n if (monthCode.endsWith('L')) {\n if (monthCode !== 'M05L') {\n throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n }\n month = 6;\n if (!this.inLeapYear({ year })) {\n if (overflow === 'reject') {\n throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n }\n else {\n // constrain to last day of previous month (Av)\n month = 5;\n day = 30;\n monthCode = 'M05';\n }\n }\n }\n else {\n month = monthCodeNumberPart(monthCode);\n // if leap month is before this one, the month index is one more than the month code\n if (this.inLeapYear({ year }) && month >= 6)\n month++;\n const largestMonth = this.monthsInYear({ year });\n if (month < 1 || month > largestMonth)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n }\n else {\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n else {\n month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n if (monthCode === undefined) {\n monthCode = this.getMonthCode(year, month);\n }\n else {\n const calculatedMonthCode = this.getMonthCode(year, month);\n if (calculatedMonthCode !== monthCode) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n }\n }\n }\n return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear };\n }\n }\n}\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nclass IslamicBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunar';\n this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n this.DAYS_PER_ISO_YEAR = 365.2425;\n this.constantEra = 'ah';\n }\n inLeapYear(calendarDate, cache) {\n // In leap years, the 12th month has 30 days. In non-leap years: 29.\n const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n return days === 30;\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n }\n}\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic';\n }\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-umalqura';\n }\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-tbla';\n }\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-civil';\n }\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-rgsa';\n }\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamicc';\n }\n}\nclass PersianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'persian';\n this.calendarType = 'solar';\n this.constantEra = 'ap';\n }\n inLeapYear(calendarDate, cache) {\n // Same logic (count days in the last month) for Persian as for Islamic,\n // even though Persian is solar and Islamic is lunar.\n return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 29;\n return month <= 6 ? 31 : 30;\n }\n maximumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 30;\n return month <= 6 ? 31 : 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: year + 621, month: 1, day: 1 };\n }\n}\nclass IndianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'indian';\n this.calendarType = 'solar';\n this.constantEra = 'saka';\n // Indian months always start at the same well-known Gregorian month and\n // day. So this conversion is easy and fast. See\n // https://en.wikipedia.org/wiki/Indian_national_calendar\n this.months = {\n 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n 2: { length: 31, month: 4, day: 21 },\n 3: { length: 31, month: 5, day: 22 },\n 4: { length: 31, month: 6, day: 22 },\n 5: { length: 31, month: 7, day: 23 },\n 6: { length: 31, month: 8, day: 23 },\n 7: { length: 30, month: 9, day: 23 },\n 8: { length: 30, month: 10, day: 23 },\n 9: { length: 30, month: 11, day: 22 },\n 10: { length: 30, month: 12, day: 22 },\n 11: { length: 30, month: 1, nextYear: true, day: 21 },\n 12: { length: 30, month: 2, nextYear: true, day: 20 }\n };\n // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n // calendar output to fail for all dates before 0001-01-01 ISO. For example,\n // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n // expected.\n this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n }\n inLeapYear(calendarDate) {\n // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n // Years are counted in the Saka era, which starts its year 0 in the year 78\n // of the Common Era. To determine leap years, add 78 to the Saka year – if\n // the result is a leap year in the Gregorian calendar, then the Saka year\n // is a leap year as well.\n return isGregorianLeapYear(calendarDate.year + 78);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n maximumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n getMonthInfo(calendarDate) {\n const { month } = calendarDate;\n let monthInfo = this.months[month];\n if (monthInfo === undefined)\n throw new RangeError(`Invalid month: ${month}`);\n if (this.inLeapYear(calendarDate) && monthInfo.leap)\n monthInfo = monthInfo.leap;\n return monthInfo;\n }\n estimateIsoDate(calendarDateParam) {\n // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n // calendar fast!\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const monthInfo = this.getMonthInfo(calendarDate);\n const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n const isoMonth = monthInfo.month;\n const isoDay = monthInfo.day;\n const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n return isoDate;\n }\n checkIcuBugs(isoDate) {\n if (this.vulnerableToBceBug && isoDate.year < 1) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n }\n}\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam) {\n let eras = erasParam;\n if (eras.length === 0) {\n throw new RangeError('Invalid era data: eras are required');\n }\n if (eras.length === 1 && eras[0].reverseOf) {\n throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n }\n if (eras.length === 1 && !eras[0].name) {\n throw new RangeError('Invalid era data: at least one named era is required');\n }\n if (eras.filter((e) => e.reverseOf != null).length > 1) {\n throw new RangeError('Invalid era data: only one era can count years backwards');\n }\n // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n // eras can never be anchors. The era without an `anchorEpoch` property is the\n // anchor.\n let anchorEra;\n eras.forEach((e) => {\n if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n if (anchorEra)\n throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n anchorEra = e;\n e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n }\n else if (!e.name) {\n throw new RangeError('If era name is blank, it must be the anchor era');\n }\n });\n // If the era name is undefined, then it's an anchor that doesn't interact\n // with eras at all. For example, Japanese `year` is always the same as ISO\n // `year`. So this \"era\" is the anchor era but isn't used for era matching.\n // Strip it from the list that's returned.\n eras = eras.filter((e) => e.name);\n eras.forEach((e) => {\n // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n // Replace the string-valued \"reverseOf\" property with the actual era object\n // that's reversed.\n const { reverseOf } = e;\n if (reverseOf) {\n const reversedEra = eras.find((era) => era.name === reverseOf);\n if (reversedEra === undefined)\n throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n e.reverseOf = reversedEra;\n e.anchorEpoch = reversedEra.anchorEpoch;\n e.isoEpoch = reversedEra.isoEpoch;\n }\n if (e.anchorEpoch.month === undefined)\n e.anchorEpoch.month = 1;\n if (e.anchorEpoch.day === undefined)\n e.anchorEpoch.day = 1;\n });\n // Ensure that the latest epoch is first in the array. This lets us try to\n // match eras in index order, with the last era getting the remaining older\n // years. Any reverse-signed era must be at the end.\n ArraySort.call(eras, (e1, e2) => {\n if (e1.reverseOf)\n return 1;\n if (e2.reverseOf)\n return -1;\n if (!e1.isoEpoch || !e2.isoEpoch)\n throw new RangeError('Invalid era data: missing ISO epoch');\n return e2.isoEpoch.year - e1.isoEpoch.year;\n });\n // If there's a reversed era, then the one before it must be the era that's\n // being reversed.\n const lastEraReversed = eras[eras.length - 1].reverseOf;\n if (lastEraReversed) {\n if (lastEraReversed !== eras[eras.length - 2])\n throw new RangeError('Invalid era data: invalid reverse-sign era');\n }\n // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n // zero-based index, with the oldest era being zero. This format is used by\n // older versions of ICU data.\n eras.forEach((e, i) => {\n e.genericName = `era${eras.length - 1 - i}`;\n });\n return { eras: eras, anchorEra: (anchorEra || eras[0]) };\n}\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n/** Base for all Gregorian-like calendars. */\nclass GregorianBaseHelper extends HelperBase {\n constructor(id, originalEras) {\n super();\n this.calendarType = 'solar';\n // Several calendars based on the Gregorian calendar use Julian dates (not\n // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n .startsWith('12');\n this.calendarIsVulnerableToJulianBug = false;\n this.id = id;\n const { eras, anchorEra } = adjustEras(originalEras);\n this.anchorEra = anchorEra;\n this.eras = eras;\n }\n inLeapYear(calendarDate) {\n // Calendars that don't override this method use the same months and leap\n // years as Gregorian. Once we know the ISO year corresponding to the\n // calendar year, we'll know if it's a leap year or not.\n const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n return isGregorianLeapYear(year);\n }\n monthsInYear( /* calendarDate */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 2)\n return this.inLeapYear(calendarDate) ? 29 : 28;\n return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n /** Fill in missing parts of the (year, era, eraYear) tuple */\n completeEraYear(calendarDate) {\n const checkField = (name, value) => {\n const currentValue = calendarDate[name];\n if (currentValue != null && currentValue != value) {\n throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n }\n };\n const eraFromYear = (year) => {\n let eraYear;\n const adjustedCalendarDate = { ...calendarDate, year };\n const matchingEra = this.eras.find((e, i) => {\n if (i === this.eras.length - 1) {\n if (e.reverseOf) {\n // This is a reverse-sign era (like BCE) which must be the oldest\n // era. Count years backwards.\n if (year > 0)\n throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n eraYear = e.anchorEpoch.year - year;\n return true;\n }\n // last era always gets all \"leftover\" (older than epoch) years,\n // so no need for a comparison like below.\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n if (comparison >= 0) {\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n return false;\n });\n if (!matchingEra)\n throw new RangeError(`Year ${year} was not matched by any era`);\n return { eraYear: eraYear, era: matchingEra.name };\n };\n let { year, eraYear, era } = calendarDate;\n if (year != null) {\n ({ eraYear, era } = eraFromYear(year));\n checkField('era', era);\n checkField('eraYear', eraYear);\n }\n else if (eraYear != null) {\n const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n if (!matchingEra)\n throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n if (eraYear < 1 && matchingEra.reverseOf) {\n throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n }\n if (matchingEra.reverseOf) {\n year = matchingEra.anchorEpoch.year - eraYear;\n }\n else {\n year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n }\n checkField('year', year);\n // We'll accept dates where the month/day is earlier than the start of\n // the era or after its end as long as it's in the same year. If that\n // happens, we'll adjust the era/eraYear pair to be the correct era for\n // the `year`.\n ({ eraYear, era } = eraFromYear(year));\n }\n else {\n throw new RangeError('Either `year` or `eraYear` and `era` are required');\n }\n return { ...calendarDate, year, eraYear, era };\n }\n adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') {\n let calendarDate = calendarDateParam;\n // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n const { month, monthCode } = calendarDate;\n if (month === undefined)\n calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) };\n this.validateCalendarDate(calendarDate);\n calendarDate = this.completeEraYear(calendarDate);\n return super.adjustCalendarDate(calendarDate, cache, overflow);\n }\n estimateIsoDate(calendarDateParam) {\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const { year, month, day } = calendarDate;\n const { anchorEra } = this;\n const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n }\n checkIcuBugs(isoDate) {\n if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n if (beforeJulianSwitch) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)');\n }\n }\n }\n}\nclass OrthodoxBaseHelper extends GregorianBaseHelper {\n constructor(id, originalEras) {\n super(id, originalEras);\n }\n inLeapYear(calendarDate) {\n // Leap years happen one year before the Julian leap year. Note that this\n // calendar is based on the Julian calendar which has a leap year every 4\n // years, unlike the Gregorian calendar which doesn't have leap years on\n // years divisible by 100 except years divisible by 400.\n //\n // Note that we're assuming that leap years in before-epoch times match\n // how leap years are defined now. This is probably not accurate but I'm\n // not sure how better to do it.\n const { year } = calendarDate;\n return (year + 1) % 4 === 0;\n }\n monthsInYear( /* calendarDate */) {\n return 13;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n if (month === 13)\n return this.inLeapYear(calendarDate) ? 6 : 5;\n return 30;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n}\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n// two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n// zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n constructor() {\n super('coptic', [\n { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n { name: 'era0', reverseOf: 'era1' }\n ]);\n }\n}\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethiopic', [\n { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n ]);\n }\n}\nclass RocHelper extends GregorianBaseHelper {\n constructor() {\n super('roc', [\n { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n { name: 'before-roc', reverseOf: 'minguo' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass BuddhistHelper extends GregorianBaseHelper {\n constructor() {\n super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass GregoryHelper extends GregorianBaseHelper {\n constructor() {\n super('gregory', [\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n }\n reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) {\n let { era, eraYear } = calendarDate;\n // Firefox 96 introduced a bug where the `'short'` format of the era\n // option mistakenly returns the one-letter (narrow) format instead. The\n // code below handles either the correct or Firefox-buggy format. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n if (era === 'bc' || era === 'b')\n era = 'bce';\n if (era === 'ad' || era === 'a')\n era = 'ce';\n return { era, eraYear };\n }\n}\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n// challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n// dates are modified, leading to considerable churn which is not good for\n// Temporal use.\n// - The earliest era (in 645 CE) may not end up being the earliest depending\n// on future historical scholarship\n// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n// that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n constructor() {\n super('japanese', [\n // The Japanese calendar `year` is just the ISO year, because (unlike other\n // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n // The last 3 Japanese eras confusingly return only one character in the\n // default \"short\" era, so need to use the long format.\n this.eraLength = 'long';\n }\n reviseIntlEra(calendarDate, isoDate) {\n const { era, eraYear } = calendarDate;\n const { year: isoYear } = isoDate;\n if (this.eras.find((e) => e.name === era))\n return { era, eraYear };\n return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear });\n }\n}\nclass ChineseBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunisolar';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate, cache) {\n const months = this.getMonthList(calendarDate.year, cache);\n return ObjectEntries(months).length === 13;\n }\n monthsInYear(calendarDate, cache) {\n return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n getMonthList(calendarYear, cache) {\n if (calendarYear === undefined) {\n throw new TypeError('Missing year');\n }\n const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n const getCalendarDate = (isoYear, daysPastFeb1) => {\n const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n const legacyDate = new Date(isoStringFeb1);\n // Now add the requested number of days, which may wrap to the next month.\n legacyDate.setUTCDate(daysPastFeb1 + 1);\n const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value;\n const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value;\n let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear');\n if (calendarYearToVerify !== undefined) {\n calendarYearToVerify = +calendarYearToVerify.value;\n }\n else {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n return { calendarMonthString, calendarDay, calendarYearToVerify };\n };\n // First, find a date close to Chinese New Year. Feb 17 will either be in\n // the first month or near the end of the last month of the previous year.\n let isoDaysDelta = 17;\n let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n // If we didn't guess the first month correctly, add (almost in some months)\n // a lunar month\n if (calendarMonthString !== '1') {\n isoDaysDelta += 29;\n ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n }\n // Now back up to near the start of the first month, but not too near that\n // off-by-one issues matter.\n isoDaysDelta -= calendarDay - 5;\n const result = {};\n let monthIndex = 1;\n let oldCalendarDay;\n let oldMonthString;\n let done = false;\n do {\n ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n if (oldCalendarDay) {\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n }\n if (calendarYearToVerify !== calendarYear) {\n done = true;\n }\n else {\n result[calendarMonthString] = { monthIndex: monthIndex++ };\n // Move to the next month. Because months are sometimes 29 days, the day of the\n // calendar month will move forward slowly but not enough to flip over to a new\n // month before the loop ends at 12-13 months.\n isoDaysDelta += 30;\n }\n oldCalendarDay = calendarDay;\n oldMonthString = calendarMonthString;\n } while (!done);\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n cache.set(key, result);\n return result;\n }\n estimateIsoDate(calendarDate) {\n const { year, month } = calendarDate;\n return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n if (fromLegacyDate) {\n // Legacy Date output returns a string that's an integer with an optional\n // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n // month. Below we'll normalize the output.\n year = eraYear;\n if (monthExtra && monthExtra !== 'bis')\n throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n const monthCode = buildMonthCode(month, monthExtra !== undefined);\n const monthString = `${month}${monthExtra || ''}`;\n const months = this.getMonthList(year, cache);\n const monthInfo = months[monthString];\n if (monthInfo === undefined)\n throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n month = monthInfo.monthIndex;\n return { year: year, month, day: day, era: undefined, eraYear, monthCode };\n }\n else {\n // When called without input coming from legacy Date output,\n // simply ensure that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (year === undefined)\n year = eraYear;\n if (eraYear === undefined)\n eraYear = year;\n if (month === undefined) {\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n let monthInfo = months[numberPart];\n month = monthInfo && monthInfo.monthIndex;\n // If this leap month isn't present in this year, constrain down to the last day of the previous month.\n if (month === undefined &&\n monthCode.endsWith('L') &&\n !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) &&\n overflow === 'constrain') {\n let withoutML = monthCode.slice(1, -1);\n if (withoutML[0] === '0')\n withoutML = withoutML.slice(1);\n monthInfo = months[withoutML];\n if (monthInfo) {\n ({ daysInMonth: day, monthIndex: month } = monthInfo);\n monthCode = buildMonthCode(withoutML);\n }\n }\n if (month === undefined) {\n throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n }\n }\n else if (monthCode === undefined) {\n const months = this.getMonthList(year, cache);\n const monthEntries = ObjectEntries(months);\n const largestMonth = monthEntries.length;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength());\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n }\n const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n if (matchingMonthEntry === undefined) {\n throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n }\n monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1);\n }\n else {\n // Both month and monthCode are present. Make sure they don't conflict.\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n const monthInfo = months[numberPart];\n if (!monthInfo)\n throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n if (month !== monthInfo.monthIndex) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n }\n }\n return {\n ...calendarDate,\n year: year,\n eraYear,\n month,\n monthCode: monthCode,\n day: day\n };\n }\n }\n}\nclass ChineseHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'chinese';\n }\n}\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'dangi';\n }\n}\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nconst nonIsoImpl = {\n // `helper` is added when this object is spread into each calendar's\n // implementation\n helper: undefined,\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n const result = ES.CreateTemporalDate(year, month, day, calendar);\n cache.setObject(result);\n return result;\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []);\n const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n const result = ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day);\n cache.setObject(result);\n return result;\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n // All built-in calendars require `day`, but some allow other fields to be\n // substituted for `month`. And for lunisolar calendars, either `monthCode`\n // or `year` must be provided because `month` is ambiguous without a year or\n // a code.\n const cache = new OneObjectCache();\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n // `year` is a reference year where this month/day exists in this calendar\n const result = ES.CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year);\n cache.setObject(result);\n return result;\n },\n fields(fieldsParam) {\n let fields = fieldsParam;\n if (ArrayIncludes.call(fields, 'year'))\n fields = [...fields, 'era', 'eraYear'];\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const fieldsCopy = { ...fields };\n const additionalFieldsCopy = { ...additionalFields };\n // era and eraYear are intentionally unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy;\n const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy;\n if (newMonth === undefined && newMonthCode === undefined) {\n original.month = month;\n original.monthCode = monthCode;\n }\n if (newYear === undefined && newEra === undefined && newEraYear === undefined) {\n // Only `year` is needed. We don't set era and eraYear because it's\n // possible to create a conflict for eras that start or end mid-year. See\n // https://github.com/tc39/proposal-temporal/issues/1784.\n original.year = year;\n }\n return { ...original, ...additionalFieldsCopy };\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n const { year, month, day } = isoAdded;\n const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendar);\n // The new object's cache starts with the cache of the old object\n const newCache = new OneObjectCache(cache);\n newCache.setObject(newTemporalObject);\n return newTemporalObject;\n },\n dateUntil(one, two, largestUnit) {\n const cacheOne = OneObjectCache.getCacheForObject(one);\n const cacheTwo = OneObjectCache.getCacheForObject(two);\n const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n return result;\n },\n year(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.year;\n },\n month(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.month;\n },\n day(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.day;\n },\n era(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.era;\n },\n eraYear(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.eraYear;\n },\n monthCode(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.monthCode;\n },\n dayOfWeek(date) {\n return impl['iso8601'].dayOfWeek(date);\n },\n dayOfYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.isoToCalendarDate(date, cache);\n const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n return diffDays + 1;\n },\n weekOfYear(date) {\n return impl['iso8601'].weekOfYear(date);\n },\n daysInWeek(date) {\n return impl['iso8601'].daysInWeek(date);\n },\n daysInMonth(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n // Easy case: if the helper knows the length without any heavy calculation.\n const max = this.helper.maximumMonthLength(calendarDate);\n const min = this.helper.minimumMonthLength(calendarDate);\n if (max === min)\n return max;\n // The harder case is where months vary every year, e.g. islamic calendars.\n // Find the answer by calculating the difference in days between the first\n // day of the current month and the first day of the next month.\n const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n return result;\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n return result;\n },\n monthsInYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.monthsInYear(calendarDate, cache);\n return result;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.inLeapYear(calendarDate, cache);\n return result;\n }\n};\nfor (const Helper of [\n HebrewHelper,\n PersianHelper,\n EthiopicHelper,\n EthioaaHelper,\n CopticHelper,\n ChineseHelper,\n DangiHelper,\n RocHelper,\n IndianHelper,\n BuddhistHelper,\n GregoryHelper,\n JapaneseHelper,\n IslamicHelper,\n IslamicUmalquraHelper,\n IslamicTblaHelper,\n IslamicCivilHelper,\n IslamicRgsaHelper,\n IslamicCcHelper\n]) {\n const helper = new Helper();\n // Clone the singleton non-ISO implementation that's the same for all\n // calendars. The `helper` property contains per-calendar logic.\n impl[helper.id] = { ...nonIsoImpl, helper };\n}\n//# sourceMappingURL=calendar.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDate {\n constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalDateSlots. This check\n // exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get year() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateFromFields(calendar, fields, options);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n }\n add(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.ToTemporalDuration(temporalDurationLike);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n subtract(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDate(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalDateToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n }\n toPlainDateTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n let timeZone, temporalTime;\n if (ES.IsObject(item)) {\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n // The cast below is needed because it's possible here for\n // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`,\n // not a TimeZoneProtocol.\n // TODO: should we check for that shape to improve on the (bad) error\n // message that the caller will get from ToTemporalTimeZone?\n timeZone = ES.ToTemporalTimeZone(item);\n }\n else {\n timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n temporalTime = item.plainTime;\n }\n }\n else {\n timeZone = ES.ToTemporalTimeZone(item);\n }\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0;\n if (temporalTime !== undefined) {\n temporalTime = ES.ToTemporalTime(temporalTime);\n hour = GetSlot(temporalTime, ISO_HOUR);\n minute = GetSlot(temporalTime, ISO_MINUTE);\n second = GetSlot(temporalTime, ISO_SECOND);\n millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n }\n const dt = ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDate(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDate(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n//# sourceMappingURL=plaindate.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDateTime {\n constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const hour = ES.ToIntegerThrowOnInfinity(hourParam);\n const minute = ES.ToIntegerThrowOnInfinity(minuteParam);\n const second = ES.ToIntegerThrowOnInfinity(secondParam);\n const millisecond = ES.ToIntegerThrowOnInfinity(millisecondParam);\n const microsecond = ES.ToIntegerThrowOnInfinity(microsecondParam);\n const nanosecond = ES.ToIntegerThrowOnInfinity(nanosecondParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get year() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get hour() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike);\n const options = ES.GetOptionsObject(optionsParam);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const props = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-time-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n let year = GetSlot(this, ISO_YEAR);\n let month = GetSlot(this, ISO_MONTH);\n let day = GetSlot(this, ISO_DAY);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDateTime(otherParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const showCalendar = ES.ToShowCalendarOption(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n }\n toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation);\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n toPlainDate() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n toPlainTime() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(this);\n }\n getISOFields() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDateTime(oneParam);\n const two = ES.ToTemporalDateTime(twoParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n//# sourceMappingURL=plaindatetime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class Duration {\n constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) {\n const years = ES.ToIntegerWithoutRounding(yearsParam);\n const months = ES.ToIntegerWithoutRounding(monthsParam);\n const weeks = ES.ToIntegerWithoutRounding(weeksParam);\n const days = ES.ToIntegerWithoutRounding(daysParam);\n const hours = ES.ToIntegerWithoutRounding(hoursParam);\n const minutes = ES.ToIntegerWithoutRounding(minutesParam);\n const seconds = ES.ToIntegerWithoutRounding(secondsParam);\n const milliseconds = ES.ToIntegerWithoutRounding(millisecondsParam);\n const microseconds = ES.ToIntegerWithoutRounding(microsecondsParam);\n const nanoseconds = ES.ToIntegerWithoutRounding(nanosecondsParam);\n ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n CreateSlots(this);\n SetSlot(this, YEARS, years);\n SetSlot(this, MONTHS, months);\n SetSlot(this, WEEKS, weeks);\n SetSlot(this, DAYS, days);\n SetSlot(this, HOURS, hours);\n SetSlot(this, MINUTES, minutes);\n SetSlot(this, SECONDS, seconds);\n SetSlot(this, MILLISECONDS, milliseconds);\n SetSlot(this, MICROSECONDS, microseconds);\n SetSlot(this, NANOSECONDS, nanoseconds);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get years() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, YEARS);\n }\n get months() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MONTHS);\n }\n get weeks() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, WEEKS);\n }\n get days() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, DAYS);\n }\n get hours() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, HOURS);\n }\n get minutes() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MINUTES);\n }\n get seconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, SECONDS);\n }\n get milliseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MILLISECONDS);\n }\n get microseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MICROSECONDS);\n }\n get nanoseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, NANOSECONDS);\n }\n get sign() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS));\n }\n get blank() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return (ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0);\n }\n with(durationLike) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const props = ES.PrepareTemporalFields(durationLike, \n // NOTE: Field order here is important.\n [\n 'days',\n 'hours',\n 'microseconds',\n 'milliseconds',\n 'minutes',\n 'months',\n 'nanoseconds',\n 'seconds',\n 'weeks',\n 'years'\n ], 'partial');\n if (!props) {\n throw new TypeError('invalid duration-like');\n }\n const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props;\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n negated() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.CreateNegatedTemporalDuration(this);\n }\n abs() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS)));\n }\n add(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n }\n subtract(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n let defaultLargestUnit = ES.DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n let smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined);\n let smallestUnitPresent = true;\n if (!smallestUnit) {\n smallestUnitPresent = false;\n smallestUnit = 'nanosecond';\n }\n defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']);\n let largestUnitPresent = true;\n if (!largestUnit) {\n largestUnitPresent = false;\n largestUnit = defaultLargestUnit;\n }\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (!smallestUnitPresent && !largestUnitPresent) {\n throw new RangeError('at least one of smallestUnit or largestUnit is required');\n }\n if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const roundingIncrement = ES.ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let relativeTo = ES.ToRelativeTemporalObject(options);\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n relativeTo = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo));\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n total(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n if (optionsParam === undefined)\n throw new TypeError('options argument is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('unit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n // Convert larger units down to days\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n let intermediate;\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate));\n // Finally, truncate to the correct unit and calculate remainder\n const { total } = ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo);\n return total;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n if (precision === 'minute')\n throw new RangeError('smallestUnit must not be \"minute\"');\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDurationToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') {\n return new Intl.DurationFormat(locales, options).format(this);\n }\n console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n return ES.TemporalDurationToString(this);\n }\n valueOf() {\n throw new TypeError('use compare() to compare Temporal.Duration');\n }\n static from(item) {\n if (ES.IsTemporalDuration(item)) {\n return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS));\n }\n return ES.ToTemporalDuration(item);\n }\n static compare(oneParam, twoParam, optionsParam = undefined) {\n const one = ES.ToTemporalDuration(oneParam);\n const two = ES.ToTemporalDuration(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n const y1 = GetSlot(one, YEARS);\n const mon1 = GetSlot(one, MONTHS);\n const w1 = GetSlot(one, WEEKS);\n let d1 = GetSlot(one, DAYS);\n const h1 = GetSlot(one, HOURS);\n const min1 = GetSlot(one, MINUTES);\n const s1 = GetSlot(one, SECONDS);\n const ms1 = GetSlot(one, MILLISECONDS);\n const µs1 = GetSlot(one, MICROSECONDS);\n let ns1 = GetSlot(one, NANOSECONDS);\n const y2 = GetSlot(two, YEARS);\n const mon2 = GetSlot(two, MONTHS);\n const w2 = GetSlot(two, WEEKS);\n let d2 = GetSlot(two, DAYS);\n const h2 = GetSlot(two, HOURS);\n const min2 = GetSlot(two, MINUTES);\n const s2 = GetSlot(two, SECONDS);\n const ms2 = GetSlot(two, MILLISECONDS);\n const µs2 = GetSlot(two, MICROSECONDS);\n let ns2 = GetSlot(two, NANOSECONDS);\n const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n }\n const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n//# sourceMappingURL=duration.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainMonthDay {\n constructor(isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar(), referenceISOYearParam = 1972) {\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISOYear = ES.ToIntegerThrowOnInfinity(referenceISOYearParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoMonth and isoDay are required');\n }\n ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n }\n get monthCode() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n with(temporalMonthDayLike, optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalMonthDayLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid month-day-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarMonthDayFromFields(calendar, fields, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalMonthDay(otherParam);\n for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalMonthDayToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalMonthDayToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['year']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalMonthDay(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR));\n }\n return ES.ToTemporalMonthDay(item, options);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n//# sourceMappingURL=plainmonthday.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nconst instant = () => {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.GetISO8601Calendar();\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return zonedDateTime(ES.GetISO8601Calendar(), temporalTimeZoneLike);\n};\nconst plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZone = () => {\n return ES.SystemTimeZone();\n};\nexport const Now = {\n instant,\n plainDateTime,\n plainDateTimeISO,\n plainDate,\n plainDateISO,\n plainTimeISO,\n timeZone,\n zonedDateTime,\n zonedDateTimeISO,\n [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n value: 'Temporal.Now',\n writable: false,\n enumerable: false,\n configurable: true\n});\n//# sourceMappingURL=now.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectAssign = Object.assign;\nfunction TemporalTimeToString(time, precision, options = undefined) {\n let hour = GetSlot(time, ISO_HOUR);\n let minute = GetSlot(time, ISO_MINUTE);\n let second = GetSlot(time, ISO_SECOND);\n let millisecond = GetSlot(time, ISO_MILLISECOND);\n let microsecond = GetSlot(time, ISO_MICROSECOND);\n let nanosecond = GetSlot(time, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const hourString = ES.ISODateTimePartString(hour);\n const minuteString = ES.ISODateTimePartString(minute);\n const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n return `${hourString}:${minuteString}${seconds}`;\n}\nexport class PlainTime {\n constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) {\n const isoHour = ES.ToIntegerThrowOnInfinity(isoHourParam);\n const isoMinute = ES.ToIntegerThrowOnInfinity(isoMinuteParam);\n const isoSecond = ES.ToIntegerThrowOnInfinity(isoSecondParam);\n const isoMillisecond = ES.ToIntegerThrowOnInfinity(isoMillisecondParam);\n const isoMicrosecond = ES.ToIntegerThrowOnInfinity(isoMicrosecondParam);\n const isoNanosecond = ES.ToIntegerThrowOnInfinity(isoNanosecondParam);\n ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n CreateSlots(this);\n SetSlot(this, ISO_HOUR, isoHour);\n SetSlot(this, ISO_MINUTE, isoMinute);\n SetSlot(this, ISO_SECOND, isoSecond);\n SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n SetSlot(this, CALENDAR, ES.GetISO8601Calendar());\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get calendar() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n // PlainTime's calendar isn't settable, so can't be a userland calendar\n return GetSlot(this, CALENDAR);\n }\n get hour() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n with(temporalTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalTimeLike);\n const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const fields = ES.ToTemporalTimeRecord(this);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n equals(otherParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalTime(otherParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return true;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return TemporalTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n }\n toPlainDateTime(temporalDateParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument');\n }\n const dateLike = item.plainDate;\n if (dateLike === undefined) {\n throw new TypeError('missing date property');\n }\n const temporalDate = ES.ToTemporalDate(dateLike);\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n throw new TypeError('missing timeZone property');\n }\n const timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n getISOFields() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n if (ES.IsTemporalTime(item)) {\n return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n return ES.ToTemporalTime(item, overflow);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalTime(oneParam);\n const two = ES.ToTemporalTime(twoParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n//# sourceMappingURL=plaintime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { TIMEZONE_ID, EPOCHNANOSECONDS, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class TimeZone {\n constructor(timeZoneIdentifierParam) {\n // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n // This check exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: identifier is required');\n }\n const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n CreateSlots(this);\n SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n getOffsetNanosecondsFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n return ES.ParseTimeZoneOffsetString(id);\n }\n return ES.GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id);\n }\n getOffsetStringFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n return ES.BuiltinTimeZoneGetOffsetStringFor(this, instant);\n }\n getPlainDateTimeFor(instantParam, calendarParam = ES.GetISO8601Calendar()) {\n const instant = ES.ToTemporalInstant(instantParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar);\n }\n getInstantFor(dateTimeParam, optionsParam = undefined) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n return ES.BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation);\n }\n getPossibleInstantsFor(dateTimeParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n const epochNs = ES.GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n const offsetNs = ES.ParseTimeZoneOffsetString(id);\n return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n }\n const possibleEpochNs = ES.GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n return possibleEpochNs.map((ns) => new Instant(ns));\n }\n getNextTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZoneNextTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n getPreviousTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZonePreviousTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n toString() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(GetSlot(this, TIMEZONE_ID));\n }\n toJSON() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalTimeZone(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\n//# sourceMappingURL=timezone.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainYearMonth {\n constructor(isoYearParam, isoMonthParam, calendarParam = ES.GetISO8601Calendar(), referenceISODayParam = 1) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISODay = ES.ToIntegerThrowOnInfinity(referenceISODayParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoYear and isoMonth are required');\n }\n ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n }\n get year() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalYearMonthLike, optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalYearMonthLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid year-month-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarYearMonthFromFields(calendar, fields, options);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalYearMonth(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalYearMonthToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalYearMonthToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['day']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalYearMonth(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY));\n }\n return ES.ToTemporalYearMonth(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalYearMonth(oneParam);\n const two = ES.ToTemporalYearMonth(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n//# sourceMappingURL=plainyearmonth.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { CALENDAR, EPOCHNANOSECONDS, ISO_HOUR, INSTANT, ISO_DAY, ISO_MONTH, ISO_YEAR, ISO_MICROSECOND, ISO_MILLISECOND, ISO_MINUTE, ISO_NANOSECOND, ISO_SECOND, TIME_ZONE, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO } from './ecmascript';\nexport class ZonedDateTime {\n constructor(epochNanosecondsParam, timeZoneParam, calendarParam = ES.GetISO8601Calendar()) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n // ToTemporalTimeZone(undefined) will end up calling TimeZone.from(\"undefined\"), which\n // could succeed.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get timeZone() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, TIME_ZONE);\n }\n get year() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get month() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthCode() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n }\n get day() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hour() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n }\n get eraYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get epochSeconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n }\n get dayOfWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get dayOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get weekOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hoursInDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const year = GetSlot(dt, ISO_YEAR);\n const month = GetSlot(dt, ISO_MONTH);\n const day = GetSlot(dt, ISO_DAY);\n const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n const timeZone = GetSlot(this, TIME_ZONE);\n const todayNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n const tomorrowNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12;\n }\n get daysInWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthsInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get inLeapYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get offset() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n get offsetNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n with(temporalZonedDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalZonedDateTimeLike)) {\n throw new TypeError('invalid zoned-date-time-like');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike);\n // TODO: Reorder according to spec.\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const offset = ES.ToTemporalOffset(options, 'prefer');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldsWithOffset = ES.ArrayPush(fieldNames, 'offset');\n const props = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial');\n const fieldsWithTimeZoneAndOffset = ES.ArrayPush(fieldsWithOffset, 'timeZone');\n let fields = ES.PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const thisDt = dateTime(this);\n const hour = GetSlot(thisDt, ISO_HOUR);\n const minute = GetSlot(thisDt, ISO_MINUTE);\n const second = GetSlot(thisDt, ISO_SECOND);\n const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n const thisDt = dateTime(this);\n const year = GetSlot(thisDt, ISO_YEAR);\n const month = GetSlot(thisDt, ISO_MONTH);\n const day = GetSlot(thisDt, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withTimeZone(timeZoneParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n // first, round the underlying DateTime fields\n const dt = dateTime(this);\n let year = GetSlot(dt, ISO_YEAR);\n let month = GetSlot(dt, ISO_MONTH);\n let day = GetSlot(dt, ISO_DAY);\n let hour = GetSlot(dt, ISO_HOUR);\n let minute = GetSlot(dt, ISO_MINUTE);\n let second = GetSlot(dt, ISO_SECOND);\n let millisecond = GetSlot(dt, ISO_MILLISECOND);\n let microsecond = GetSlot(dt, ISO_MICROSECOND);\n let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n const instantStart = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n if (JSBI.equal(dayLengthNs, ZERO)) {\n throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days');\n }\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, \n // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n // (which can hold up to 104 days in nanoseconds)\n JSBI.toNumber(dayLengthNs)));\n // Now reset all DateTime fields but leave the TimeZone. The offset will\n // also be retained if the new date/time values are still OK with the old\n // offset. Otherwise the offset will be changed to be compatible with the\n // new date/time values. If DST disambiguation is required, the `compatible`\n // disambiguation algorithm will be used.\n const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalZonedDateTime(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)))\n return false;\n if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE)))\n return false;\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const showCalendar = ES.ToShowCalendarOption(options);\n const showTimeZone = ES.ToShowTimeZoneNameOption(options);\n const showOffset = ES.ToShowOffsetOption(options);\n return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n unit,\n increment,\n roundingMode\n });\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n toJSON() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalZonedDateTimeToString(this, 'auto');\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n }\n startOfDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toInstant() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n }\n toPlainDate() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(dateTime(this));\n }\n toPlainTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(dateTime(this));\n }\n toPlainDateTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return dateTime(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const tz = GetSlot(this, TIME_ZONE);\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(dt, ISO_DAY),\n isoHour: GetSlot(dt, ISO_HOUR),\n isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n isoMinute: GetSlot(dt, ISO_MINUTE),\n isoMonth: GetSlot(dt, ISO_MONTH),\n isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n isoSecond: GetSlot(dt, ISO_SECOND),\n isoYear: GetSlot(dt, ISO_YEAR),\n offset: ES.BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n timeZone: tz\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalZonedDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n ES.ToTemporalDisambiguation(options);\n ES.ToTemporalOffset(options, 'reject');\n return ES.CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalZonedDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalZonedDateTime(oneParam);\n const two = ES.ToTemporalZonedDateTime(twoParam);\n const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return -1;\n if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\nfunction dateTime(zdt) {\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n//# sourceMappingURL=zoneddatetime.js.map","import { Instant } from './instant';\nimport JSBI from 'jsbi';\nimport * as ES from './ecmascript';\nimport { MILLION } from './ecmascript';\nexport function toTemporalInstant() {\n // Observable access to valueOf is not correct here, but unavoidable\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n return new Instant(ES.ToBigInt(epochNanoseconds));\n}\n//# sourceMappingURL=legacydate.js.map","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n Temporal.Instant,\n Temporal.Calendar,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.Duration,\n Temporal.PlainMonthDay,\n // Temporal.Now, // plain object (not a constructor), so no `prototype`\n Temporal.PlainTime,\n Temporal.TimeZone,\n Temporal.PlainYearMonth,\n Temporal.ZonedDateTime\n];\nfor (const type of types) {\n const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype');\n if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n descriptor.configurable = false;\n descriptor.enumerable = false;\n descriptor.writable = false;\n Object.defineProperty(type, 'prototype', descriptor);\n }\n}\nexport { Temporal, Intl, toTemporalInstant };\n//# sourceMappingURL=index.js.map"],"names":["INTRINSICS","MakeIntrinsicClass","Class","name","Object","defineProperty","prototype","Symbol","toStringTag","value","writable","enumerable","configurable","prop","getOwnPropertyNames","desc","getOwnPropertyDescriptor","DefineIntrinsic","key","undefined","Error","GetIntrinsic","intrinsic","EPOCHNANOSECONDS","TIMEZONE_ID","ISO_YEAR","ISO_MONTH","ISO_DAY","ISO_HOUR","ISO_MINUTE","ISO_SECOND","ISO_MILLISECOND","ISO_MICROSECOND","ISO_NANOSECOND","CALENDAR","INSTANT","TIME_ZONE","YEARS","MONTHS","WEEKS","DAYS","HOURS","MINUTES","SECONDS","MILLISECONDS","MICROSECONDS","NANOSECONDS","CALENDAR_ID","slots","WeakMap","CreateSlots","container","set","create","GetSlots","get","HasSlot","ids","myslots","reduce","all","id","GetSlot","TypeError","SetSlot","tzComponent","timeZoneID","RegExp","source","calComponent","calendarID","yearpart","monthpart","daypart","datesplit","timesplit","offset","zonesplit","calendar","zoneddatetime","time","yearmonth","monthday","fraction","durationTime","duration","ArrayIncludes","Array","includes","ArrayPrototypePush","push","IntlDateTimeFormat","globalThis","Intl","DateTimeFormat","MathMin","Math","min","MathMax","max","MathAbs","abs","MathFloor","floor","MathSign","sign","MathTrunc","trunc","NumberIsNaN","Number","isNaN","NumberIsFinite","isFinite","NumberCtor","StringCtor","String","NumberMaxSafeInteger","MAX_SAFE_INTEGER","ObjectAssign","assign","ObjectCreate","ObjectGetOwnPropertyDescriptor","ObjectIs","is","ReflectApply","Reflect","apply","ZERO","JSBI","BigInt","ONE","SIXTY","THOUSAND","MILLION","BILLION","NEGATIVE_ONE","DAY_NANOS","multiply","NS_MIN","NS_MAX","BEFORE_FIRST_OFFSET_TRANSITION","ABOUT_TEN_YEARS_NANOS","ABOUT_ONE_YEAR_NANOS","TWO_WEEKS_NANOS","BUILTIN_CALENDAR_IDS","IsInteger","IsObject","ToNumber","ToInteger","num","integer","ToString","ToIntegerThrowOnInfinity","RangeError","ToPositiveInteger","valueParam","property","ToIntegerWithoutRounding","divmod","x","y","quotient","divide","remainder","lessThan","ArrayPush","arr","newItem","BUILTIN_CASTS","Map","BUILTIN_DEFAULTS","SINGULAR_PLURAL_UNITS","SINGULAR_FOR","map","e","PLURAL_FOR","p","s","UNITS_DESCENDING","DURATION_FIELDS","from","keys","sort","IntlDateTimeFormatEnUsCache","getIntlDateTimeFormatEnUsForTimeZone","timeZoneIdentifier","instance","timeZone","hour12","era","year","month","day","hour","minute","second","IsTemporalInstant","item","IsTemporalTimeZone","IsTemporalCalendar","IsTemporalDuration","IsTemporalDate","IsTemporalTime","IsTemporalDateTime","IsTemporalYearMonth","IsTemporalMonthDay","IsTemporalZonedDateTime","RejectObjectWithCalendarOrTimeZone","ParseTemporalTimeZone","stringIdent","ianaName","z","ParseTemporalTimeZoneString","canonicalIdent","GetCanonicalTimeZoneIdentifier","toString","result","ParseISODateTime","FormatCalendarAnnotation","showCalendar","isoString","match","PARSE.zoneddatetime","exec","yearString","slice","hasTime","millisecond","microsecond","nanosecond","offsetSign","offsetHours","offsetMinutes","offsetSeconds","offsetFraction","endsWith","RejectDateTime","ParseTemporalYearMonthString","PARSE.yearmonth","referenceISODay","ParseTemporalMonthDayString","PARSE.monthday","referenceISOYear","ParseTemporalDurationString","PARSE.duration","every","element","years","months","weeks","days","hours","fHours","minutes","fMinutes","seconds","fSeconds","milliseconds","microseconds","nanoseconds","length","DurationHandleFractions","fHoursParam","minutesParam","fMinutesParam","secondsParam","millisecondsParam","microsecondsParam","nanosecondsParam","forEach","val","mins","secs","mils","fMilliseconds","mics","fMicroseconds","RejectDuration","ParseTemporalInstant","ParseTemporalInstantString","offsetNs","ParseTimeZoneOffsetString","BalanceISODateTime","epochNs","GetEpochFromISOParts","RegulateISODate","yearParam","monthParam","dayParam","overflow","RejectISODate","ConstrainISODate","RegulateTime","hourParam","minuteParam","secondParam","millisecondParam","microsecondParam","nanosecondParam","RejectTime","ConstrainTime","ConstrainToRange","ToTemporalDurationRecord","partial","ToTemporalPartialDurationRecord","temporalDurationLike","any","ToTemporalOverflow","options","GetOption","ToTemporalDisambiguation","ToTemporalRoundingMode","fallback","NegateTemporalRoundingMode","roundingMode","ToTemporalOffset","ToShowCalendarOption","ToTemporalRoundingIncrement","dividend","inclusive","maximum","Infinity","increment","GetNumberOption","minimum","valueRaw","ToTemporalDateTimeRoundingIncrement","smallestUnit","week","ToSecondsStringPrecision","GetTemporalUnit","ALLOWED_UNITS","allowed","c","join","precision","unit","digits","fractionalSecondDigits","stringDigits","REQUIRED","unitGroup","requiredOrDefault","extraValues","allowedSingular","singular","category","defaultVal","allowedValues","plural","retval","has","ToRelativeTemporalObject","relativeTo","offsetBehaviour","matchMinutes","TemporalDateTimeToDate","GetTemporalCalendarWithISODefault","fields","PrepareTemporalFields","CalendarFields","dateOptions","InterpretTemporalDateTimeFields","GetISO8601Calendar","ToTemporalCalendar","ToTemporalTimeZone","CreateTemporalZonedDateTime","InterpretISODateTimeOffset","CreateTemporalDate","DefaultTemporalLargestUnit","v","LargerOfTwoTemporalUnits","unit1","unit2","indexOf","MergeLargestUnitOption","optionsParam","largestUnit","bag","requiredFields","emptySourceErrorMessage","call","eraYear","ToTemporalTimeRecord","completeness","field","valueDesc","ToTemporalDate","itemParam","BuiltinTimeZoneGetPlainDateTimeFor","CalendarDateFromFields","ParseTemporalDateString","date","ToTemporalDateTime","CreateTemporalDateTime","ParseTemporalDateTimeString","ToTemporalDuration","ToTemporalInstant","ns","ToTemporalMonthDay","calendarAbsent","maybeStringCalendar","monthCode","CalendarMonthDayFromFields","CreateTemporalMonthDay","ToTemporalTime","ParseTemporalTimeString","PARSE.time","test","ToTemporalYearMonth","CalendarYearMonthFromFields","CreateTemporalYearMonth","disambiguation","offsetOpt","matchMinute","dt","BuiltinTimeZoneGetInstantFor","subtract","possibleInstants","GetPossibleInstantsFor","candidate","candidateOffset","GetOffsetNanosecondsFor","roundedCandidateOffset","toNumber","RoundNumberToIncrement","offsetStr","FormatTimeZoneOffsetString","timeZoneString","DisambiguatePossibleInstants","ToTemporalZonedDateTime","ParseTemporalZonedDateTimeString","CreateTemporalDateSlots","isoYear","isoMonth","isoDay","RejectDateRange","TemporalPlainDate","CreateTemporalDateTimeSlots","h","ms","RejectDateTimeRange","TemporalPlainDateTime","CreateTemporalMonthDaySlots","TemporalPlainMonthDay","CreateTemporalYearMonthSlots","RejectYearMonthRange","RejectToRange","TemporalPlainYearMonth","CreateTemporalZonedDateTimeSlots","epochNanoseconds","ValidateEpochNanoseconds","instant","TemporalZonedDateTime","fieldNamesParam","fieldNames","CalendarMergeFields","additionalFields","calMergeFields","mergeFields","CalendarDateAdd","dateAddParam","dateAdd","CalendarDateUntil","otherDate","dateUntilParam","dateUntil","CalendarYear","dateLike","CalendarMonth","CalendarMonthCode","CalendarDay","CalendarEra","CalendarEraYear","CalendarDayOfWeek","dayOfWeek","CalendarDayOfYear","dayOfYear","CalendarWeekOfYear","weekOfYear","CalendarDaysInWeek","daysInWeek","CalendarDaysInMonth","daysInMonth","CalendarDaysInYear","daysInYear","CalendarMonthsInYear","monthsInYear","CalendarInLeapYear","inLeapYear","calendarLikeParam","calendarLike","identifier","TemporalCalendar","IsBuiltinCalendar","CalendarEquals","one","two","ConsolidateCalendars","sOne","sTwo","dateFromFields","yearMonthFromFields","monthDayFromFields","temporalTimeZoneLikeParam","temporalTimeZoneLike","TimeZoneEquals","dateTime","TemporalDateTimeToTime","getOffsetNanosecondsFor","BuiltinTimeZoneGetOffsetStringFor","GetISOPartsFromEpoch","Instant","numInstants","utcns","dayBefore","dayAfter","add","offsetBefore","PlainDateTime","earlier","AddDateTime","later","possible","getPossibleInstantsFor","ISOYearString","ISODateTimePartString","part","FormatSecondsStringPart","fractionNumber","padStart","TemporalInstantToString","outputTimeZone","FormatISOTimeZoneOffsetString","TemporalDurationToString","formatNumber","DurationSign","RoundDuration","dateParts","timeParts","secondParts","nsBigInt","msBigInt","secondsBigInt","total","TotalDurationNanoseconds","decimalPart","unshift","equal","TemporalDateToString","TemporalDateTimeToString","RoundISODateTime","TemporalMonthDayToString","monthDay","resultString","calendarString","TemporalYearMonthToString","yearMonth","TemporalZonedDateTimeToString","zdt","showTimeZone","showOffset","RoundInstant","tz","TestTimeZoneOffsetString","string","OFFSET","resolvedOptions","GetIANATimeZoneOffsetNanoseconds","GetIANATimeZoneDateTimeParts","utc","offsetNanosecondsParam","offsetNanoseconds","hourString","minuteString","secondString","post","legacyDate","Date","setUTCHours","setUTCFullYear","getTime","greaterThan","epochMilliseconds","nanos","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","GetFormatterParts","formatter","parseFromEnUsFormat","datetime","parts","split","toUpperCase","format","maxJSBI","afterLatestPossibleTzdbRuleChange","SystemUTCEpochNanoSeconds","GetIANATimeZonePreviousTransition","afterLatestRule","isFarFuture","lowercap","rightNanos","rightOffsetNs","leftNanos","leftOffsetNs","bisect","LeapYear","ISODaysInMonth","standard","leapyear","DayOfWeek","m","Y","dow","DayOfYear","mon","w","d","BalanceISOYearMonth","BalanceISODate","testYear","deltaDays","BalanceTime","NonNegativeModulo","daysParam","hoursParam","offsetShift","NanosecondsToDays","TemporalInstant","dayLengthNs","startNs","start","endNs","end","dtStart","dtEnd","DifferenceISODateTime","intermediateNs","AddZonedDateTime","isOverflow","relativeInstant","oneDayFartherNs","relativeNs","BalanceDuration","nanosecondsBigInt","microsecondsBigInt","millisecondsBigInt","minutesBigInt","hoursBigInt","UnbalanceDurationRelative","yearsParam","monthsParam","weeksParam","relativeToParam","TemporalDuration","oneYear","oneMonth","oneWeek","relativeToDateOnly","newRelativeTo","untilOptions","oneYearMonths","oneYearDays","MoveRelativeDate","oneMonthDays","oneWeekDays","CalculateOffsetShift","after","CreateNegatedTemporalDuration","propSign","DifferenceISODate","y1","m1","d1","y2","m2","d2","CompareISODate","mid","AddISODate","midSign","larger","smaller","DifferenceTime","h1","min1","s1","ms1","ns1","h2","min2","s2","ms2","ns2","DifferenceInstant","diff","wholeDays","roundedRemainder","nsPerTimeUnit","roundedDiff","y1Param","mon1Param","d1Param","mon2","mon1","timeSign","date1","date2","DifferenceZonedDateTime","nsDiff","timeRemainderNs","intermediate","DifferenceTemporalInstant","operation","otherParam","other","first","GetOptionsObject","defaultLargestUnit","roundingIncrement","onens","twons","DifferenceTemporalPlainDate","plainDate","otherCalendar","calendarId","otherCalendarId","DifferenceTemporalPlainDateTime","plainDateTime","DifferenceTemporalPlainTime","plainTime","DifferenceTemporalPlainYearMonth","otherCalendarID","otherFields","thisFields","thisDate","DifferenceTemporalZonedDateTime","zonedDateTime","AdjustRoundedDurationDays","AddTime","AddDuration","w1","w2","dateDuration1","dateDuration2","dateLargestUnit","differenceOptions","AddInstant","sum","addedDate","dtIntermediate","AddDurationToOrSubtractDurationFromDuration","AddDurationToOrSubtractDurationFromInstant","durationLike","ToLimitedTemporalDuration","disallowedProperties","record","AddDurationToOrSubtractDurationFromPlainDateTime","AddDurationToOrSubtractDurationFromPlainTime","temporalTime","AddDurationToOrSubtractDurationFromPlainYearMonth","startDate","durationToAdd","optionsCopy","AddDurationToOrSubtractDurationFromZonedDateTime","quantity","mode","RoundTime","nsPerUnit","rounded","DaysUntil","MoveRelativeZonedDateTime","direction","dayStart","dayEnd","greaterThanOrEqual","zdtRelative","dayLength","yearsDuration","yearsLater","yearsMonthsWeeksLater","daysLater","yearsPassed","oldRelativeTo","divisor","yearsMonths","yearsMonthsLater","allNanoseconds","ComparisonResult","ToBigIntExternal","arg","jsbiBI","ToBigInt","prim","toPrimFn","toPrimitive","SyntaxError","message","startsWith","now","CreateOnePropObject","propName","propValue","o","PARSE.offset","getState","leftParam","rightParam","lstateParam","rstateParam","left","right","lstate","rstate","middle","mstate","DATE","YM","MD","TIME","DATETIME","ZONED","INST","ORIGINAL","TZ_RESOLVED","TZ_GIVEN","CAL_ID","LOCALE","OPTIONS","descriptor","ObjectHasOwnProperty","hasOwnProperty","getPropLazy","obj","getResolvedTimeZoneLazy","ES.ToTemporalTimeZone","DateTimeFormatImpl","locale","this","hasOptions","original","ro","clonedResolved","dateAmend","yearMonthAmend","monthDayAmend","timeAmend","datetimeAmend","zonedDateTimeAmend","instantAmend","supportedLocalesOf","locales","propertyDescriptors","rest","extractOverrides","adjustFormatterTimeZone","formatRange","a","b","isTemporalObject","sameTemporalType","aa","aformatter","atz","bb","bformatter","btz","formatToParts","formatRangeToParts","amend","amended","opt","weekday","timeZoneName","dateStyle","hasTimeOptions","dayPeriod","timeStyle","hasDateOptions","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","temporalObj","main","DateTime","ES.BuiltinTimeZoneGetInstantFor","ES.ToString","objTimeZone","constructor","arguments","ES.ToBigInt","ES.ValidateEpochNanoseconds","epochSeconds","epochMicroseconds","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","until","ES.DifferenceTemporalInstant","since","round","ES.CreateOnePropObject","ES.GetOptionsObject","ES.GetTemporalUnit","ES.REQUIRED","ES.ToTemporalRoundingMode","ES.ToTemporalRoundingIncrement","roundedNs","ES.RoundInstant","equals","ES.ToTemporalInstant","ES.ToSecondsStringPrecision","ES.TemporalInstantToString","toJSON","toLocaleString","valueOf","toZonedDateTime","ES.IsObject","ES.ToTemporalCalendar","ES.CreateTemporalZonedDateTime","toZonedDateTimeISO","timeZoneProperty","ES.GetISO8601Calendar","fromEpochSeconds","epochSecondsParam","ES.ToNumber","fromEpochMilliseconds","epochMillisecondsParam","fromEpochMicroseconds","epochMicrosecondsParam","fromEpochNanoseconds","epochNanosecondsParam","compare","oneParam","twoParam","oneNs","twoNs","ArraySort","ObjectEntries","entries","ObjectKeys","impl","Calendar","idParam","ES.IsBuiltinCalendar","ES.IsTemporalCalendar","fieldsArray","Set","delete","dateParam","durationParam","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","monthCodeNumberPart","buildMonthCode","leap","resolveNonLunisolarMonth","calendarDate","monthsPerYear","ES.RejectToRange","ES.ConstrainToRange","numberPart","fieldsParam","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","RegulateISOYearMonth","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","useYear","ES.CreateTemporalMonthDay","merged","nextKey","newKeys","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","WeekOfYear","doy","doj","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","OneObjectCache","cacheToClone","calls","hits","misses","performance","i","entry","MAX_CACHE_ENTRIES","report","setObject","objectMap","getCacheForObject","cache","toUtcIsoDateString","ES.ISOYearString","ES.ISODateTimePartString","simpleDateDiff","HelperBase","eraLength","hasEra","getFormatter","isoToCalendarDate","isoDate","JSON","stringify","func","cached","dateTimeFormat","type","matches","monthExtra","normalize","replace","toLowerCase","reviseIntlEra","checkIcuBugs","adjustCalendarDate","keyReverse","validateCalendarDate","constantEra","calendarDateParam","fromLegacyDate","calendarType","largestMonth","regulateMonthDayNaive","maximumMonthLength","calendarToIsoDate","originalDate","keyOriginal","isoEstimate","estimateIsoDate","calculateSameMonthResult","diffDays","testIsoEstimate","addDaysIso","minimumMonthLength","testCalendarDate","roundtripEstimate","diffTotalDaysEstimate","compareCalendarDates","maybeConstrained","oldRoundtripEstimate","oldSign","temporalToCalendarDate","date1Param","date2Param","ES.ComparisonResult","regulateDate","addDaysCalendar","addedIso","addMonthsCalendar","absMonths","oldCalendarDate","daysInPreviousMonth","monthsInOldYear","addCalendar","addedYears","addedMonths","initialDays","untilCalendar","calendarOne","calendarTwo","calendarDaysUntil","totalDays","diffYears","diffMonths","current","next","addedIsoDate","addedCalendarDate","endOfMonthIso","previousMonthDate","previousMonth","lastDayOfPreviousMonthIso","startOfCalendarYear","startOfCalendarMonth","oneIso","twoIso","isoDaysUntil","closestCalendar","closestIso","calendarYear","roundTripCalendarDate","HebrewHelper","super","Tishri","regular","Heshvan","Kislev","Tevet","Shevat","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul","minMaxMonthLength","minOrMax","getMonthCode","monthInfo","find","IslamicBaseHelper","DAYS_PER_ISLAMIC_YEAR","DAYS_PER_ISO_YEAR","IslamicHelper","IslamicUmalquraHelper","IslamicTblaHelper","IslamicCivilHelper","IslamicRgsaHelper","IslamicCcHelper","PersianHelper","IndianHelper","nextYear","vulnerableToBceBug","toLocaleDateString","isGregorianLeapYear","getMonthInfo","GregorianBaseHelper","originalEras","v8IsVulnerableToJulianBug","calendarIsVulnerableToJulianBug","eras","anchorEra","adjustEras","erasParam","reverseOf","filter","isAnchor","anchorEpoch","hasYearZero","reversedEra","isoEpoch","e1","e2","lastEraReversed","genericName","completeEraYear","checkField","currentValue","eraFromYear","adjustedCalendarDate","matchingEra","ES.CompareISODate","OrthodoxBaseHelper","EthioaaHelper","CopticHelper","EthiopicHelper","RocHelper","BuddhistHelper","GregoryHelper","JapaneseHelper","ChineseBaseHelper","getMonthList","getCalendarDate","daysPastFeb1","isoStringFeb1","setUTCDate","newYearGuess","calendarMonthString","tv","calendarDay","calendarYearToVerify","isoDaysDelta","oldCalendarDay","oldMonthString","monthIndex","done","monthString","withoutML","monthEntries","matchingMonthEntry","ChineseHelper","DangiHelper","nonIsoImpl","helper","fieldsCopy","additionalFieldsCopy","newMonth","newMonthCode","newYear","newEra","newEraYear","added","isoAdded","newTemporalObject","cacheOne","cacheTwo","startOfYear","startOfMonthCalendar","startOfNextMonthCalendar","startOfYearCalendar","startOfNextYearCalendar","Helper","PlainDate","isoYearParam","isoMonthParam","isoDayParam","calendarParam","ES.ToIntegerThrowOnInfinity","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","with","temporalDateLike","ES.RejectObjectWithCalendarOrTimeZone","ES.CalendarFields","props","ES.CalendarMergeFields","ES.CalendarDateFromFields","withCalendar","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","slot","ES.CalendarEquals","ES.TemporalDateToString","ES.ToShowCalendarOption","toPlainDateTime","temporalTimeParam","ES.CreateTemporalDateTime","ES.ToTemporalTime","timeZoneLike","toPlainYearMonth","ES.CalendarYearMonthFromFields","toPlainMonthDay","ES.CalendarMonthDayFromFields","getISOFields","ES.CreateTemporalDateTimeSlots","temporalDateTimeLike","ES.InterpretTemporalDateTimeFields","withPlainTime","withPlainDate","temporalDateParam","temporalDate","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","toPlainDate","ES.TemporalDateTimeToDate","toPlainTime","ES.TemporalDateTimeToTime","isoHour","isoMicrosecond","isoMillisecond","isoMinute","isoNanosecond","isoSecond","val1","val2","Duration","ES.ToIntegerWithoutRounding","ES.RejectDuration","ES.IsTemporalDuration","ES.DurationSign","blank","negated","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","smallestUnitPresent","ES.LargerOfTwoTemporalUnits","largestUnitPresent","ES.ToTemporalDateTimeRoundingIncrement","ES.ToRelativeTemporalObject","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","BalanceDurationRelative","untilResult","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.TemporalDurationToString","DurationFormat","console","warn","shift1","ES.CalculateOffsetShift","shift2","totalNs1","ES.TotalDurationNanoseconds","totalNs2","PlainMonthDay","referenceISOYearParam","ES.CreateTemporalMonthDaySlots","temporalMonthDayLike","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","receiverFieldNames","inputFieldNames","mergedFields","ES.SystemUTCEpochNanoSeconds","tZ","ES.BuiltinTimeZoneGetPlainDateTimeFor","plainDateTimeISO","SystemTimeZone","fmt","ES.SystemTimeZone","Now","plainDateISO","plainTimeISO","zonedDateTimeISO","TemporalTimeToString","ES.RoundTime","ES.FormatSecondsStringPart","PlainTime","isoHourParam","isoMinuteParam","isoSecondParam","isoMillisecondParam","isoMicrosecondParam","isoNanosecondParam","ES.RejectTime","temporalTimeLike","partialTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","TimeZone","timeZoneIdentifierParam","ES.GetCanonicalTimeZoneIdentifier","ES.IsTemporalTimeZone","instantParam","ES.TestTimeZoneOffsetString","ES.ParseTimeZoneOffsetString","ES.GetIANATimeZoneOffsetNanoseconds","getOffsetStringFor","ES.BuiltinTimeZoneGetOffsetStringFor","getPlainDateTimeFor","getInstantFor","dateTimeParam","ES.GetEpochFromISOParts","GetIANATimeZoneEpochValue","nsEarlier","nsLater","earliest","latest","ES.GetIANATimeZoneEpochValue","getNextTransition","startingPointParam","startingPoint","GetIANATimeZoneNextTransition","oneYearLater","uppercap","ES.GetIANATimeZoneNextTransition","getPreviousTransition","ES.GetIANATimeZonePreviousTransition","PlainYearMonth","referenceISODayParam","ES.CreateTemporalYearMonthSlots","temporalYearMonthLike","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ZonedDateTime","timeZoneParam","ES.CreateTemporalZonedDateTimeSlots","hoursInDay","today","tomorrowFields","tomorrow","todayNs","tomorrowNs","ES.GetOffsetNanosecondsFor","temporalZonedDateTimeLike","ES.ToTemporalOffset","fieldsWithOffset","ES.ArrayPush","fieldsWithTimeZoneAndOffset","ES.InterpretISODateTimeOffset","thisDt","withTimeZone","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","instantStart","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.TemporalZonedDateTimeToString","ToShowTimeZoneNameOption","ES.ToShowTimeZoneNameOption","ToShowOffsetOption","ES.ToShowOffsetOption","startOfDay","toInstant","toTemporalInstant","types","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.PlainTime","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime"],"mappings":"oBACA,MAAMA,EAAa,GA4BZ,SAASC,mBAAmBC,EAAOC,GACtCC,OAAOC,eAAeH,EAAMI,UAAWC,OAAOC,YAAa,CACvDC,MAAON,EACPO,UAAU,EACVC,YAAY,EACZC,cAAc,IAUlB,IAAK,MAAMC,KAAQT,OAAOU,oBAAoBZ,GAAQ,CAGlD,MAAMa,EAAOX,OAAOY,yBAAyBd,EAAOW,GAC/CE,EAAKH,cAAiBG,EAAKJ,aAEhCI,EAAKJ,YAAa,EAClBP,OAAOC,eAAeH,EAAOW,EAAME,IAEvC,IAAK,MAAMF,KAAQT,OAAOU,oBAAoBZ,EAAMI,WAAY,CAG5D,MAAMS,EAAOX,OAAOY,yBAAyBd,EAAMI,UAAWO,GACzDE,EAAKH,cAAiBG,EAAKJ,aAEhCI,EAAKJ,YAAa,EAClBP,OAAOC,eAAeH,EAAMI,UAAWO,EAAME,IAEjDE,gBAAgBd,EAAMD,GACtBe,gBAAgB,GAAGd,cAAkBD,EAAMI,WAExC,SAASW,gBAAgBd,EAAMM,GAClC,MAAMS,EAAM,IAAIf,KAChB,QAAwBgB,IAApBnB,EAAWkB,GACX,MAAM,IAAIE,MAAM,aAAajB,oBACjCH,EAAWkB,GAAOT,EAEf,SAASY,aAAaC,GACzB,OAAOtB,EAAWsB,GCvEf,MAAMC,EAAmB,wBAEnBC,EAAc,2BAEdC,EAAW,YACXC,EAAY,aACZC,EAAU,WACVC,EAAW,YACXC,EAAa,cACbC,EAAa,cACbC,EAAkB,mBAClBC,EAAkB,mBAClBC,EAAiB,kBACjBC,EAAW,gBAMXC,EAAU,sBACVC,EAAY,iBAEZC,EAAQ,aACRC,EAAS,cACTC,EAAQ,aACRC,EAAO,YACPC,EAAQ,aACRC,EAAU,eACVC,EAAU,eACVC,EAAe,oBACfC,EAAe,oBACfC,EAAc,mBAEdC,EAAc,2BACrBC,EAAQ,IAAIC,QACX,SAASC,YAAYC,GACxBH,EAAMI,IAAID,EAAW/C,OAAOiD,OAAO,OAEvC,SAASC,SAASH,GACd,OAAOH,EAAMO,IAAIJ,GAEd,SAASK,QAAQL,KAAcM,GAClC,IAAKN,GAAa,iBAAoBA,EAClC,OAAO,EACX,MAAMO,EAAUJ,SAASH,GACzB,QAASO,GAAWD,EAAIE,QAAO,CAACC,EAAKC,IAAOD,GAAOC,KAAMH,IAAS,GAE/D,SAASI,QAAQX,EAAWU,GAC/B,MAAMpD,EAAQ6C,SAASH,GAAWU,GAClC,QAAc1C,IAAVV,EACA,MAAM,IAAIsD,UAAU,yBAAyBF,KACjD,OAAOpD,EAEJ,SAASuD,QAAQb,EAAWU,EAAIpD,GACnC6C,SAASH,GAAWU,GAAMpD,ECvD9B,MAAMwD,EAAc,8FAEdC,EAAa,IAAIC,OAAO,SAASF,EAAYG,mBAAmBH,EAAYG,iCAD1D,6EAC2GA,WAC7HC,EAAe,mBACfC,EAAa,IAAIH,OAAO,MAAME,EAAaD,aAAaC,EAAaD,aACrEG,EAAW,4BACXC,EAAY,oBACZC,EAAU,0BACVC,EAAY,IAAIP,OAAO,IAAII,EAASH,eAAeI,EAAUJ,YAAYK,EAAQL,YAAYI,EAAUJ,WAAWK,EAAQL,YAC1HO,EAAY,4FACLC,EAAS,yFAChBC,EAAY,IAAIV,OAAO,gBAAgBS,EAAOR,mBAAmBF,EAAWE,gBAC5EU,EAAW,IAAIX,OAAO,YAAYG,EAAWF,cACtCW,EAAgB,IAAIZ,OAAO,IAAIO,EAAUN,sBAAsBO,EAAUP,WAAWS,EAAUT,YAAYU,EAASV,YAAa,KAChIY,EAAO,IAAIb,OAAO,MAAMQ,EAAUP,YAAYS,EAAUT,cAAcU,EAASV,YAAa,KAO5Fa,EAAY,IAAId,OAAO,KAAKI,EAASH,aAAaI,EAAUJ,YAC5Dc,EAAW,IAAIf,OAAO,YAAYK,EAAUJ,aAAaK,EAAQL,YACxEe,EAAW,0BAEXC,EAAe,IAAIjB,OAAO,MAAMgB,EAASf,eAAee,EAASf,eAAee,EAASf,aAClFiB,EAAW,IAAIlB,OAAO,aAFd,+CAE6CC,kBAAkBgB,EAAahB,YAAa,KC1BxGkB,EAAgBC,MAAMjF,UAAUkF,SAChCC,EAAqBF,MAAMjF,UAAUoF,KACrCC,EAAqBC,WAAWC,KAAKC,eACrCC,EAAUC,KAAKC,IACfC,EAAUF,KAAKG,IACfC,EAAUJ,KAAKK,IACfC,EAAYN,KAAKO,MACjBC,GAAWR,KAAKS,KAChBC,GAAYV,KAAKW,MACjBC,GAAcC,OAAOC,MACrBC,GAAiBF,OAAOG,SACxBC,GAAaJ,OACbK,GAAaC,OACbC,GAAuBP,OAAOQ,iBAC9BC,GAAelH,OAAOmH,OACtBC,GAAepH,OAAOiD,OAEtBoE,GAAiCrH,OAAOY,yBACxC0G,GAAWtH,OAAOuH,GAClBC,GAAeC,QAAQC,MAKhBC,GAAOC,EAAKC,OAAO,GAC1BC,GAAMF,EAAKC,OAAO,GAClBE,GAAQH,EAAKC,OAAO,IACbG,GAAWJ,EAAKC,OAAO,KACvBI,GAAUL,EAAKC,OAAO,KACtBK,GAAUN,EAAKC,OAAO,KAC7BM,GAAeP,EAAKC,QAAQ,GAE5BO,GAAYR,EAAKS,SAAST,EAAKC,OADjB,OACsCK,IACpDI,GAASV,EAAKS,SAAST,EAAKC,QAAQ,OAAQD,EAAKC,OAAO,OACxDU,GAASX,EAAKS,SAAST,EAAKC,OAAO,OAAQD,EAAKC,OAAO,OAGvDW,GAAiCZ,EAAKS,SAAST,EAAKC,QAAQ,QAASD,EAAKC,OAAO,OACjFY,GAAwBb,EAAKS,SAASD,GAAWR,EAAKC,OAAO,OAC7Da,GAAuBd,EAAKS,SAASD,GAAWR,EAAKC,OAAO,MAC5Dc,GAAkBf,EAAKS,SAASD,GAAWR,EAAKC,OAAO,KACvDe,GAAuB,CACzB,UACA,SACA,UACA,mBACA,eACA,gBACA,eACA,WACA,UACA,WACA,UACA,SACA,UACA,QACA,MACA,SACA,WACA,WACA,WAEJ,SAASC,UAAUxI,GACf,GAAqB,iBAAVA,IAAuBsG,GAAetG,GAC7C,OAAO,EACX,MAAM4F,EAAMD,EAAQ3F,GACpB,OAAO6F,EAAUD,KAASA,EAEvB,SAAS6C,SAASzI,GACrB,MAAyB,iBAAVA,GAAgC,OAAVA,GAAoC,mBAAVA,EAE5D,SAAS0I,SAAS1I,GACrB,GAAqB,iBAAVA,EACP,MAAM,IAAIsD,UAAU,mCACxB,OAAOkD,GAAWxG,GAEtB,SAAS2I,UAAU3I,GACf,MAAM4I,EAAMF,SAAS1I,GACrB,GAAImG,GAAYyC,GACZ,OAAO,EACX,MAAMC,EAAU5C,GAAU2C,GAC1B,OAAY,IAARA,EACO,EACJC,EAEJ,SAASC,SAAS9I,GACrB,GAAqB,iBAAVA,EACP,MAAM,IAAIsD,UAAU,6CAExB,OAAOmD,GAAWzG,GAEf,SAAS+I,yBAAyB/I,GACrC,MAAM6I,EAAUF,UAAU3I,GAC1B,IAAKsG,GAAeuC,GAChB,MAAM,IAAIG,WAAW,4BAEzB,OAAOH,EAEX,SAASI,kBAAkBC,EAAYC,GACnC,MAAMnJ,EAAQ2I,UAAUO,GACxB,IAAK5C,GAAetG,GAChB,MAAM,IAAIgJ,WAAW,4BAEzB,GAAIhJ,EAAQ,EAAG,CACX,QAAiBU,IAAbyI,EACA,MAAM,IAAIH,WAAW,aAAaG,yCAEtC,MAAM,IAAIH,WAAW,+DAEzB,OAAOhJ,EAEJ,SAASoJ,yBAAyBF,GACrC,MAAMlJ,EAAQ0I,SAASQ,GACvB,GAAI/C,GAAYnG,GACZ,OAAO,EACX,IAAKsG,GAAetG,GAChB,MAAM,IAAIgJ,WAAW,4BAEzB,IAAKR,UAAUxI,GACX,MAAM,IAAIgJ,WAAW,gCAAgChJ,KAEzD,OAAO2I,UAAU3I,GAErB,SAASqJ,OAAOC,EAAGC,GAGf,MAAO,CAAEC,SAFQjC,EAAKkC,OAAOH,EAAGC,GAEbG,UADDnC,EAAKmC,UAAUJ,EAAGC,IAGxC,SAAS3D,IAAI0D,GACT,OAAI/B,EAAKoC,SAASL,EAAGhC,IACVC,EAAKS,SAASsB,EAAGxB,IACrBwB,EAEJ,SAASM,UAAUC,KAAQC,GAE9B,OADA9E,EAAmBqC,MAAMwC,EAAKC,GACvBD,EAEX,MAAME,GAAgB,IAAIC,IAAI,CAC1B,CAAC,OAAQjB,0BACT,CAAC,QAASE,mBACV,CAAC,YAAaH,UACd,CAAC,MAAOG,mBACR,CAAC,OAAQF,0BACT,CAAC,SAAUA,0BACX,CAAC,SAAUA,0BACX,CAAC,cAAeA,0BAChB,CAAC,cAAeA,0BAChB,CAAC,aAAcA,0BACf,CAAC,QAASK,0BACV,CAAC,SAAUA,0BACX,CAAC,QAASA,0BACV,CAAC,OAAQA,0BACT,CAAC,QAASA,0BACV,CAAC,UAAWA,0BACZ,CAAC,UAAWA,0BACZ,CAAC,eAAgBA,0BACjB,CAAC,eAAgBA,0BACjB,CAAC,cAAeA,0BAChB,CAAC,MAAON,UACR,CAAC,UAAWH,WACZ,CAAC,SAAUG,YAETmB,GAAmB,IAAID,IAAI,CAC7B,CAAC,OAAQ,GACT,CAAC,SAAU,GACX,CAAC,SAAU,GACX,CAAC,cAAe,GAChB,CAAC,cAAe,GAChB,CAAC,aAAc,KAGbE,GAAwB,CAC1B,CAAC,QAAS,OAAQ,QAClB,CAAC,SAAU,QAAS,QACpB,CAAC,QAAS,OAAQ,QAClB,CAAC,OAAQ,MAAO,QAChB,CAAC,QAAS,OAAQ,QAClB,CAAC,UAAW,SAAU,QACtB,CAAC,UAAW,SAAU,QACtB,CAAC,eAAgB,cAAe,QAChC,CAAC,eAAgB,cAAe,QAChC,CAAC,cAAe,aAAc,SAE5BC,GAAe,IAAIH,IAAIE,GAAsBE,KAAKC,GAAM,CAACA,EAAE,GAAIA,EAAE,OACjEC,GAAa,IAAIN,IAAIE,GAAsBE,KAAI,EAAEG,EAAGC,KAAO,CAACA,EAAGD,MAC/DE,GAAmBP,GAAsBE,KAAI,GAAII,KAAOA,IACxDE,GAAkB5F,MAAM6F,KAAKR,GAAaS,QAAQC,OAElDC,GAA8B,IAAId,IACxC,SAASe,qCAAqCC,GAC1C,IAAIC,EAAWH,GAA4BhI,IAAIkI,GAe/C,YAdiBtK,IAAbuK,IACAA,EAAW,IAAI/F,EAAmB,QAAS,CACvCgG,SAAUzE,GAAWuE,GACrBG,QAAQ,EACRC,IAAK,QACLC,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,YAEZZ,GAA4BnI,IAAIqI,EAAoBC,IAEjDA,EAEJ,SAASU,kBAAkBC,GAC9B,OAAO7I,QAAQ6I,EAAM9K,KAAsBiC,QAAQ6I,EAAMjK,EAAWF,GAEjE,SAASoK,mBAAmBD,GAC/B,OAAO7I,QAAQ6I,EAAM7K,GAElB,SAAS+K,mBAAmBF,GAC/B,OAAO7I,QAAQ6I,EAAMtJ,GAElB,SAASyJ,mBAAmBH,GAC/B,OAAO7I,QAAQ6I,EAAMhK,EAAOC,EAAQE,EAAMC,EAAOC,EAASC,EAASC,EAAcC,EAAcC,GAE5F,SAAS2J,eAAeJ,GAC3B,OAAO7I,QAAQ6I,EF5MO,mBE8MnB,SAASK,eAAeL,GAC3B,OAAQ7I,QAAQ6I,EAAMzK,EAAUC,EAAYC,EAAYC,EAAiBC,EAAiBC,KACrFuB,QAAQ6I,EAAM5K,EAAUC,EAAWC,GAErC,SAASgL,mBAAmBN,GAC/B,OAAO7I,QAAQ6I,EAAM5K,EAAUC,EAAWC,EAASC,EAAUC,EAAYC,EAAYC,EAAiBC,EAAiBC,GAEpH,SAAS2K,oBAAoBP,GAChC,OAAO7I,QAAQ6I,EFrNa,yBEuNzB,SAASQ,mBAAmBR,GAC/B,OAAO7I,QAAQ6I,EFvNY,wBEyNxB,SAASS,wBAAwBT,GACpC,OAAO7I,QAAQ6I,EAAM9K,EAAkBa,EAAWF,GAE/C,SAAS6K,mCAAmCV,GAC/C,GAAI7I,QAAQ6I,EAAMnK,IAAasB,QAAQ6I,EAAMjK,GACzC,MAAM,IAAI2B,UAAU,2DAExB,QAAsB5C,IAAlBkL,EAAKvH,SACL,MAAM,IAAIf,UAAU,+CAExB,QAAsB5C,IAAlBkL,EAAKV,SACL,MAAM,IAAI5H,UAAU,+CAG5B,SAASiJ,sBAAsBC,GAC3B,IAAIC,SAAEA,EAAQtI,OAAEA,EAAMuI,EAAEA,GAsMrB,SAASC,4BAA4BH,GACxC,IACI,IAAII,EAAiBC,+BAA+BL,GACpD,GAAII,EACA,MAAO,CAAEH,SAAUG,EAAeE,YAE1C,OAGA,IAEI,MAAMC,EAASC,iBAAiBR,GAChC,GAAIO,EAAOL,GAAKK,EAAO5I,QAAU4I,EAAON,SACpC,OAAOM,EAGf,OAGA,MAAM,IAAI/D,WAAW,sBAAsBwD,KAzNbG,CAA4BH,GAC1D,OAAIC,IAEAC,EACO,MACJvI,GAEX,SAAS8I,yBAAyB7J,EAAI8J,GAClC,MAAqB,UAAjBA,GAEiB,SAAjBA,GAAkC,YAAP9J,EADpB,GAGJ,SAASA,KAEpB,SAAS4J,iBAAiBG,GAEtB,MAAMC,EAAQC,EAAoBC,KAAKH,GACvC,IAAKC,EACD,MAAM,IAAIpE,WAAW,4BAA4BmE,KACrD,IAAII,EAAaH,EAAM,GAGvB,GAFsB,MAAlBG,EAAW,KACXA,EAAa,IAAIA,EAAWC,MAAM,MACnB,YAAfD,EACA,MAAM,IAAIvE,WAAW,4BAA4BmE,KACrD,MAAM9B,EAAO1C,UAAU4E,GACjBjC,EAAQ3C,UAAUyE,EAAM,IAAMA,EAAM,IACpC7B,EAAM5C,UAAUyE,EAAM,IAAMA,EAAM,IAClC5B,EAAO7C,UAAUyE,EAAM,IACvBK,OAAuB/M,IAAb0M,EAAM,GAChB3B,EAAS9C,UAAUyE,EAAM,IAAMA,EAAM,KAC3C,IAAI1B,EAAS/C,UAAUyE,EAAM,IAAMA,EAAM,KAC1B,KAAX1B,IACAA,EAAS,IACb,MAAMhH,GAAY0I,EAAM,IAAMA,EAAM,KAAO,YACrCM,EAAc/E,UAAUjE,EAAS8I,MAAM,EAAG,IAC1CG,EAAchF,UAAUjE,EAAS8I,MAAM,EAAG,IAC1CI,EAAajF,UAAUjE,EAAS8I,MAAM,EAAG,IAC/C,IAAIrJ,EACAuI,GAAI,EACR,GAAIU,EAAM,IACNjJ,OAASzD,EACTgM,GAAI,OAEH,GAAIU,EAAM,KAAOA,EAAM,IAAK,CAC7B,MAAMS,EAA2B,MAAdT,EAAM,KAA6B,MAAdA,EAAM,IAAmB,IAAM,IACjEU,EAAcV,EAAM,KAAO,KAC3BW,EAAgBX,EAAM,KAAO,KAC7BY,EAAgBZ,EAAM,KAAO,KACnC,IAAIa,EAAiBb,EAAM,KAAO,IAElC,GADAjJ,EAAS,GAAG0J,IAAaC,KAAeC,KACnCE,EAAgB,CACjB,KAAOA,EAAeC,SAAS,MAC3BD,EAAiBA,EAAeT,MAAM,GAAI,GAC9CrJ,GAAU,IAAI6J,KAAiBC,SAEzBD,IACN7J,GAAU,IAAI6J,KAEH,WAAX7J,IACAA,EAAS,UAEjB,IAAIsI,EAAWW,EAAM,IACrB,GAAIX,EACA,IAEIA,EAAWI,+BAA+BJ,GAAUK,WAExD,OAIJ,MAAMzI,EAAW+I,EAAM,IAEvB,OADAe,eAAe9C,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAC1E,CACHvC,KAAAA,EACAC,MAAAA,EACAC,IAAAA,EACAkC,QAAAA,EACAjC,KAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAgC,YAAAA,EACAC,YAAAA,EACAC,WAAAA,EACAnB,SAAAA,EACAtI,OAAAA,EACAuI,EAAAA,EACArI,SAAAA,GAyED,SAAS+J,6BAA6BjB,GACzC,MAAMC,EAAQiB,EAAgBf,KAAKH,GACnC,IAAI9B,EAAMC,EAAOjH,EAAUiK,EAC3B,GAAIlB,EAAO,CACP,IAAIG,EAAaH,EAAM,GAGvB,GAFsB,MAAlBG,EAAW,KACXA,EAAa,IAAIA,EAAWC,MAAM,MACnB,YAAfD,EACA,MAAM,IAAIvE,WAAW,4BAA4BmE,KACrD9B,EAAO1C,UAAU4E,GACjBjC,EAAQ3C,UAAUyE,EAAM,IACxB/I,EAAW+I,EAAM,OAEhB,CACD,IAAIV,EAEJ,KADGrB,KAAAA,EAAMC,MAAAA,EAAOjH,SAAAA,EAAUkH,IAAK+C,EAAiB5B,EAAAA,GAAMM,iBAAiBG,IACnET,EACA,MAAM,IAAI1D,WAAW,iDAE7B,MAAO,CAAEqC,KAAAA,EAAMC,MAAAA,EAAOjH,SAAAA,EAAUiK,gBAAAA,GAG7B,SAASC,4BAA4BpB,GACxC,MAAMC,EAAQoB,EAAelB,KAAKH,GAClC,IAAI7B,EAAOC,EAAKlH,EAAUoK,EAC1B,GAAIrB,EACA9B,EAAQ3C,UAAUyE,EAAM,IACxB7B,EAAM5C,UAAUyE,EAAM,QAErB,CACD,IAAIV,EAEJ,KADGpB,MAAAA,EAAOC,IAAAA,EAAKlH,SAAAA,EAAUgH,KAAMoD,EAAkB/B,EAAAA,GAAMM,iBAAiBG,IACpET,EACA,MAAM,IAAI1D,WAAW,gDAE7B,MAAO,CAAEsC,MAAAA,EAAOC,IAAAA,EAAKlH,SAAAA,EAAUoK,iBAAAA,GAyB5B,SAASC,4BAA4BvB,GACxC,MAAMC,EAAQuB,EAAerB,KAAKH,GAClC,IAAKC,EACD,MAAM,IAAIpE,WAAW,qBAAqBmE,KAC9C,GAAIC,EAAMI,MAAM,GAAGoB,OAAOC,QAAwBnO,IAAZmO,IAClC,MAAM,IAAI7F,WAAW,qBAAqBmE,KAE9C,MAAMnH,EAAoB,MAAboH,EAAM,IAA2B,MAAbA,EAAM,IAAmB,EAAI,EACxD0B,EAAQnG,UAAUyE,EAAM,IAAMpH,EAC9B+I,EAASpG,UAAUyE,EAAM,IAAMpH,EAC/BgJ,EAAQrG,UAAUyE,EAAM,IAAMpH,EAC9BiJ,EAAOtG,UAAUyE,EAAM,IAAMpH,EAC7BkJ,EAAQvG,UAAUyE,EAAM,IAAMpH,EACpC,IAAImJ,EAAS/B,EAAM,GACfgC,EAAUzG,UAAUyE,EAAM,IAAMpH,EAChCqJ,EAAWjC,EAAM,GACjBkC,EAAU3G,UAAUyE,EAAM,KAAOpH,EACrC,MAAMuJ,EAAWnC,EAAM,IAAM,YAC7B,IAAIoC,EAAe7G,UAAU4G,EAAS/B,MAAM,EAAG,IAAMxH,EACjDyJ,EAAe9G,UAAU4G,EAAS/B,MAAM,EAAG,IAAMxH,EACjD0J,EAAc/G,UAAU4G,EAAS/B,MAAM,EAAG,IAAMxH,EAKpD,OAJAmJ,EAASA,EAAUnJ,EAAO2C,UAAUwG,GAAW,IAAMA,EAAOQ,OAAS,EACrEN,EAAWA,EAAYrJ,EAAO2C,UAAU0G,GAAa,IAAMA,EAASM,OAAS,IAC1EP,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAgErD,SAASE,wBAAwBC,EAAaC,EAAcC,EAAeC,EAAcC,EAAmBC,EAAmBC,GAC3H,IAAIhB,EAASU,EACTT,EAAUU,EACVT,EAAWU,EACXT,EAAUU,EACVR,EAAeS,EACfR,EAAeS,EACfR,EAAcS,EAClB,GAAe,IAAXhB,EAAc,CACd,CAACC,EAASC,EAAUC,EAASE,EAAcC,EAAcC,GAAaU,SAASC,IAC3E,GAAY,IAARA,EACA,MAAM,IAAIrH,WAAW,+CAE7B,MAAMsH,EAAgB,GAATnB,EACbC,EAAUnJ,GAAUqK,GACpBjB,EAAWiB,EAAO,EAEtB,GAAiB,IAAbjB,EAAgB,CAChB,CAACC,EAASE,EAAcC,EAAcC,GAAaU,SAASC,IACxD,GAAY,IAARA,EACA,MAAM,IAAIrH,WAAW,+CAE7B,MAAMuH,EAAkB,GAAXlB,EACbC,EAAUrJ,GAAUsK,GACpB,MAAMhB,EAAWgB,EAAO,EACxB,GAAiB,IAAbhB,EAAgB,CAChB,MAAMiB,EAAkB,IAAXjB,EACbC,EAAevJ,GAAUuK,GACzB,MAAMC,EAAgBD,EAAO,EAC7B,GAAsB,IAAlBC,EAAqB,CACrB,MAAMC,EAAuB,IAAhBD,EACbhB,EAAexJ,GAAUyK,GACzB,MAAMC,EAAgBD,EAAO,EAC7B,GAAsB,IAAlBC,EAAqB,CAErBjB,EAAczJ,GADe,IAAhB0K,MAM7B,MAAO,CAAEvB,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAxGUE,CAAwBT,EAAQC,EAASC,EAAUC,EAASE,EAAcC,EAAcC,IACzJkB,eAAe9B,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACzF,CAAEZ,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAGvF,SAASmB,qBAAqB1D,GACjC,IAAI9B,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,EAAUzJ,OAAEA,EAAMuI,EAAEA,GA9JzF,SAASoE,2BAA2B3D,GACvC,MAAMJ,EAASC,iBAAiBG,GAChC,IAAKJ,EAAOL,IAAMK,EAAO5I,OACrB,MAAM,IAAI6E,WAAW,gDACzB,OAAO+D,EA0J2F+D,CAA2B3D,GAC7H,IAAKT,IAAMvI,EACP,MAAM,IAAI6E,WAAW,gDAIzB,MAAM+H,EAAWrE,EAAI,EAAIsE,0BAA0B7M,KAChDkH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeqD,mBAAmB5F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAamD,IACtL,MAAMG,EAAUC,qBAAqB9F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GACvG,GAAgB,OAAZsD,EACA,MAAM,IAAIlI,WAAW,uCACzB,OAAOkI,EAEJ,SAASE,gBAAgBC,EAAWC,EAAYC,EAAUC,GAC7D,IAAInG,EAAOgG,EACP/F,EAAQgG,EACR/F,EAAMgG,EACV,OAAQC,GACJ,IAAK,SACDC,cAAcpG,EAAMC,EAAOC,GAC3B,MACJ,IAAK,cACEF,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAAQmG,iBAAiBrG,EAAMC,EAAOC,IAG9D,MAAO,CAAEF,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAEnB,SAASoG,aAAaC,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,EAAiBT,GACnH,IAAIhG,EAAOoG,EACPnG,EAASoG,EACTnG,EAASoG,EACTpE,EAAcqE,EACdpE,EAAcqE,EACdpE,EAAaqE,EACjB,OAAQT,GACJ,IAAK,SACDU,WAAW1G,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAC3D,MACJ,IAAK,cACEpC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GA6mE/D,SAASuE,cAAcP,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,GAC5F,MAAMzG,EAAO4G,iBAAiBR,EAAW,EAAG,IACtCnG,EAAS2G,iBAAiBP,EAAa,EAAG,IAC1CnG,EAAS0G,iBAAiBN,EAAa,EAAG,IAC1CpE,EAAc0E,iBAAiBL,EAAkB,EAAG,KACpDpE,EAAcyE,iBAAiBJ,EAAkB,EAAG,KACpDpE,EAAawE,iBAAiBH,EAAiB,EAAG,KACxD,MAAO,CAAEzG,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GApnEiBuE,CAAc3G,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,IAGxI,MAAO,CAAEpC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GA0D7D,SAASyE,yBAAyBzG,GAC9B,IAAKnD,SAASmD,GACV,OAAO8C,4BAA4B5F,SAAS8C,IAEhD,GAAIG,mBAAmBH,GACnB,MAAO,CACHkD,MAAOzL,QAAQuI,EAAMhK,GACrBmN,OAAQ1L,QAAQuI,EAAM/J,GACtBmN,MAAO3L,QAAQuI,EAAM9J,GACrBmN,KAAM5L,QAAQuI,EAAM7J,GACpBmN,MAAO7L,QAAQuI,EAAM5J,GACrBoN,QAAS/L,QAAQuI,EAAM3J,GACvBqN,QAASjM,QAAQuI,EAAM1J,GACvBsN,aAAcnM,QAAQuI,EAAMzJ,GAC5BsN,aAAcpM,QAAQuI,EAAMxJ,GAC5BsN,YAAarM,QAAQuI,EAAMvJ,IAGnC,MAAM0K,EAAS,CACX+B,MAAO,EACPC,OAAQ,EACRC,MAAO,EACPC,KAAM,EACNC,MAAO,EACPE,QAAS,EACTE,QAAS,EACTE,aAAc,EACdC,aAAc,EACdC,YAAa,GAEjB,IAAI4C,EAWR,SAASC,gCAAgCC,GACrC,IAAK/J,SAAS+J,GACV,MAAM,IAAIlP,UAAU,yBAExB,MAAMyJ,EAAS,CACX+B,WAAOpO,EACPqO,YAAQrO,EACRsO,WAAOtO,EACPuO,UAAMvO,EACNwO,WAAOxO,EACP0O,aAAS1O,EACT4O,aAAS5O,EACT8O,kBAAc9O,EACd+O,kBAAc/O,EACdgP,iBAAahP,GAEjB,IAAI+R,GAAM,EACV,IAAK,MAAMtJ,KAAYuB,GAAiB,CACpC,MAAM1K,EAAQwS,EAAqBrJ,QACrBzI,IAAVV,IACAyS,GAAM,EACN1F,EAAO5D,GAAYC,yBAAyBpJ,IAGpD,IAAKyS,EACD,MAAM,IAAInP,UAAU,yBAExB,OAAOyJ,EAtCOwF,CAAgC3G,GAC9C,IAAK,MAAMzC,KAAYuB,GAAiB,CACpC,MAAM1K,EAAQsS,EAAQnJ,QACRzI,IAAVV,IACA+M,EAAO5D,GAAYnJ,GAG3B,IAAI8O,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB3C,EAEvG,OADA6D,eAAe9B,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACzF,CAAEZ,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAwCvF,SAASgD,mBAAmBC,GAC/B,YAAgBjS,IAAZiS,EACO,YACJC,UAAUD,EAAS,WAAY,CAAC,YAAa,UAAW,aAE5D,SAASE,yBAAyBF,GACrC,YAAgBjS,IAAZiS,EACO,aACJC,UAAUD,EAAS,iBAAkB,CAAC,aAAc,UAAW,QAAS,UAAW,cAEvF,SAASG,uBAAuBH,EAASI,GAC5C,OAAOH,UAAUD,EAAS,eAAgB,CAAC,OAAQ,QAAS,QAAS,cAAeI,GAExF,SAASC,2BAA2BC,GAChC,OAAQA,GACJ,IAAK,OACD,MAAO,QACX,IAAK,QACD,MAAO,OACX,QACI,OAAOA,GAGZ,SAASC,iBAAiBP,EAASI,GACtC,YAAgBrS,IAAZiS,EACOI,EACJH,UAAUD,EAAS,SAAU,CAAC,SAAU,MAAO,SAAU,UAAWI,GAExE,SAASI,qBAAqBR,GACjC,OAAOC,UAAUD,EAAS,eAAgB,CAAC,OAAQ,SAAU,SAAU,QAQpE,SAASS,4BAA4BT,EAASU,EAAUC,GAC3D,IAAIC,EAAUC,EAAAA,OACG9S,IAAb2S,IACAE,EAAUF,GACTC,QAA0B5S,IAAb2S,IACdE,EAAUF,EAAW,EAAIA,EAAW,EAAI,GAC5C,MAAMI,EAwoGV,SAASC,gBAAgBf,EAASxJ,EAAUwK,EAASJ,EAASR,GAC1D,IAAIa,EAAWjB,EAAQxJ,GACvB,QAAiBzI,IAAbkT,EACA,OAAOb,EACX,MAAM/S,EAAQ0I,SAASkL,GACvB,GAAIzN,GAAYnG,IAAUA,EAAQ2T,GAAW3T,EAAQuT,EACjD,MAAM,IAAIvK,WAAW,GAAGtC,OAAOyC,sBAA6BwK,SAAeJ,UAAgBvT,KAE/F,OAAO6F,EAAU7F,GAhpGC0T,CAAgBf,EAAS,oBAAqB,EAAGY,EAAS,GAC5E,QAAiB7S,IAAb2S,GAA0BA,EAAWI,GAAc,EACnD,MAAM,IAAIzK,WAAW,8CAA8CqK,KAEvE,OAAOI,EAEJ,SAASI,oCAAoClB,EAASmB,GAazD,OAAOV,4BAA4BT,EAZT,CACtBtH,UAAM3K,EACN4K,WAAO5K,EACPqT,UAAMrT,EACN6K,SAAK7K,EACL8K,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,KAE8CkG,IAAe,GAE1E,SAASE,yBAAyBrB,GACrC,MAAMmB,EAAeG,gBAAgBtB,EAAS,eAAgB,YAAQjS,GACtE,GAAqB,SAAjBoT,EAAyB,CACzB,MAAMI,EAAgBhK,GAAsBhH,QAAO,CAACiR,GAAU5J,EAAGC,EAAG4J,MAGtD,SAANA,GAAsB,SAAN5J,GAChB2J,EAAQlP,KAAKuF,EAAGD,GAEb4J,IACR,IACH,MAAM,IAAInL,WAAW,+BAA+BkL,EAAcG,KAAK,cAAcP,KAEzF,OAAQA,GACJ,IAAK,SACD,MAAO,CAAEQ,UAAW,SAAUC,KAAM,SAAUd,UAAW,GAC7D,IAAK,SACD,MAAO,CAAEa,UAAW,EAAGC,KAAM,SAAUd,UAAW,GACtD,IAAK,cACD,MAAO,CAAEa,UAAW,EAAGC,KAAM,cAAed,UAAW,GAC3D,IAAK,cACD,MAAO,CAAEa,UAAW,EAAGC,KAAM,cAAed,UAAW,GAC3D,IAAK,aACD,MAAO,CAAEa,UAAW,EAAGC,KAAM,aAAcd,UAAW,GAG9D,IAAIe,EAAS7B,EAAQ8B,uBAGrB,QAFe/T,IAAX8T,IACAA,EAAS,QACS,iBAAXA,EAAqB,CAC5B,MAAME,EAAe5L,SAAS0L,GAC9B,GAAqB,SAAjBE,EACA,MAAO,CAAEJ,UAAW,OAAQC,KAAM,aAAcd,UAAW,GAC/D,MAAM,IAAIzK,WAAW,6DAA6D0L,KAEtF,GAAIvO,GAAYqO,IAAWA,EAAS,GAAKA,EAAS,EAC9C,MAAM,IAAIxL,WAAW,6DAA6DwL,KAEtF,MAAMF,EAAYzO,EAAU2O,GAC5B,OAAQF,GACJ,KAAK,EACD,MAAO,CAAEA,UAAAA,EAAWC,KAAM,SAAUd,UAAW,GACnD,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,CAAEa,UAAAA,EAAWC,KAAM,cAAed,UAAW,KAAO,EAAIa,IACnE,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,CAAEA,UAAAA,EAAWC,KAAM,cAAed,UAAW,KAAO,EAAIa,IACnE,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,CAAEA,UAAAA,EAAWC,KAAM,aAAcd,UAAW,KAAO,EAAIa,IAClE,QACI,MAAM,IAAItL,WAAW,6DAA6DwL,MAGvF,MAAMG,GAAW7U,OAAO,cAIxB,SAASmU,gBAAgBtB,EAASlS,EAAKmU,EAAWC,EAAmBC,EAAc,IACtF,MAAMC,EAAkB,GACxB,IAAK,OAASC,EAAUC,KAAa/K,GACf,aAAd0K,GAA4BA,IAAcK,GAC1CF,EAAgB9P,KAAK+P,GAG7BD,EAAgB9P,QAAQ6P,GACxB,IAAII,EAAaL,EACbK,IAAeP,GACfO,OAAaxU,OAEOA,IAAfwU,GACLH,EAAgB9P,KAAKiQ,GAEzB,MAAMC,EAAgB,IACfJ,GAEP,IAAK,MAAMC,KAAYD,EAAiB,CACpC,MAAMK,EAAS9K,GAAWxH,IAAIkS,QACftU,IAAX0U,GACAD,EAAclQ,KAAKmQ,GAE3B,IAAIC,EAASzC,UAAUD,EAASlS,EAAK0U,EAAeD,GACpD,QAAexU,IAAX2U,GAAwBR,IAAsBF,GAC9C,MAAM,IAAI3L,WAAW,GAAGvI,iBAG5B,OAAI0J,GAAamL,IAAID,GAGVlL,GAAarH,IAAIuS,GAErBA,EAEJ,SAASE,yBAAyB5C,GACrC,MAAM6C,EAAa7C,EAAQ6C,WAC3B,QAAmB9U,IAAf8U,EACA,OAAOA,EACX,IAEInK,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,EAAU6G,EAAU/G,EAFlGsR,EAAkB,SAClBC,GAAe,EAEnB,GAAIjN,SAAS+M,GAAa,CACtB,GAAInJ,wBAAwBmJ,IAAexJ,eAAewJ,GACtD,OAAOA,EACX,GAAItJ,mBAAmBsJ,GACnB,OAAOG,uBAAuBH,GAClCnR,EAAWuR,kCAAkCJ,GAC7C,MAYMK,EAASC,sBAAsBN,EAZlBO,eAAe1R,EAAU,CACxC,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,SAEyD,IACvD2R,EAAcjP,GAAa,MACjCiP,EAAYxE,SAAW,cACpBnG,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeqI,gCAAgC5R,EAAUwR,EAAQG,IAItI7R,EAASqR,EAAWrR,YACLzD,IAAXyD,IACAsR,EAAkB,QACtBvK,EAAWsK,EAAWtK,aAErB,CACD,IAAIuB,EAAUC,IACXrB,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYvJ,SAAAA,EAAUoI,SAAAA,EAAUtI,OAAAA,EAAQuI,EAAAA,GACzGM,iBAAiBlE,SAAS0M,KAC1B/I,IACAvB,EAAWuB,GACXC,EACA+I,EAAkB,QAEZtR,IACNsR,EAAkB,QAEjBpR,IACDA,EAAW6R,sBACf7R,EAAW8R,mBAAmB9R,GAC9BqR,GAAe,EAEnB,QAAiBhV,IAAbwK,EAAwB,CACxBA,EAAWkL,mBAAmBlL,GAC9B,IAAI6F,EAAW,EACS,WAApB0E,IACA1E,EAAWC,0BAA0BlI,SAAS3E,KAElD,OAAOkS,4BADkBC,2BAA2BjL,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY6H,EAAiB1E,EAAU7F,EAAU,aAAc,SAAUwK,GAC1IxK,EAAU7G,GAEnE,OAAOkS,mBAAmBlL,EAAMC,EAAOC,EAAKlH,GAEzC,SAASmS,2BAA2B1H,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACxH,IAAK,MAAOtP,EAAMqW,IAAM,CACpB,CAAC,QAAS3H,GACV,CAAC,SAAUC,GACX,CAAC,QAASC,GACV,CAAC,OAAQC,GACT,CAAC,QAASC,GACV,CAAC,UAAWE,GACZ,CAAC,UAAWE,GACZ,CAAC,eAAgBE,GACjB,CAAC,eAAgBC,GACjB,CAAC,cAAeC,IAEhB,GAAU,IAAN+G,EAGA,OAAOtM,GAAarH,IAAI1C,GAGhC,MAAO,aAEJ,SAASsW,yBAAyBC,EAAOC,GAC5C,OAAInM,GAAiBoM,QAAQF,GAASlM,GAAiBoM,QAAQD,GACpDA,EACJD,EAEX,SAASG,uBAAuBC,EAAcC,GAC1C,IAAIrE,EAAUoE,EAGd,YAFgBrW,IAAZiS,IACAA,EAAU5L,GAAa,OACpBF,GAAaE,GAAa,MAAO4L,EAAS,CAAEqE,YAAAA,IAEhD,SAASlB,sBAAsBmB,EAAKpB,EAAQqB,GAAgBC,wBAAEA,GAA4B,CAAEA,wBAAyB,kCACxH,MAAMpK,EAAShG,GAAa,MAC5B,IAAI0L,GAAM,EACV,IAAK,MAAMtJ,KAAY0M,EAAQ,CAC3B,IAAI7V,EAAQiX,EAAI9N,GAChB,QAAczI,IAAVV,EACAyS,GAAM,EACF1I,GAAcuL,IAAInM,KAIlBnJ,EAAQ+J,GAAcjH,IAAIqG,EAAlBY,CAA4B/J,IAExC+M,EAAO5D,GAAYnJ,OAElB,GAAuB,YAAnBkX,EAA8B,CAGnC,GAAIrS,EAAcuS,KAAKF,EAAgB/N,GACnC,MAAM,IAAI7F,UAAU,sBAAsB6F,2BAE9CnJ,EAAQiK,GAAiBnH,IAAIqG,GAC7B4D,EAAO5D,GAAYnJ,GAG3B,GAAuB,YAAnBkX,IAAiCzE,EACjC,MAAM,IAAInP,UAAU6T,GAExB,QAAoBzW,IAAfqM,EAAO3B,WAA2C1K,IAAnBqM,EAAOsK,SACvC,MAAM,IAAIrO,WAAW,4DAEzB,OAAO+D,EAEJ,SAASuK,qBAAqBL,EAAKM,EAAe,YAErD,MAAM1B,EAAS,CAAC,OAAQ,cAAe,cAAe,SAAU,aAAc,UACxEvD,EAAUwD,sBAAsBmB,EAAKpB,EAAQ,UAAW,CAAEsB,wBAAyB,sBACnFpK,EAAS,GACf,IAAK,MAAMyK,KAAS3B,EAAQ,CACxB,MAAM4B,EAAYzQ,GAA+BsL,EAASkF,QACxC9W,IAAd+W,EACA1K,EAAOyK,GAASC,EAAUzX,MAEJ,aAAjBuX,IACLxK,EAAOyK,GAAS,GAGxB,OAAOzK,EAEJ,SAAS2K,eAAeC,EAAWhF,GACtC,IAAI/G,EAAO+L,EACX,GAAIlP,SAASmD,GAAO,CAChB,GAAII,eAAeJ,GACf,OAAOA,EAKX,GAJIS,wBAAwBT,KACxB8G,mBAAmBC,GACnB/G,EAAOgM,mCAAmCvU,QAAQuI,EAAMjK,GAAY0B,QAAQuI,EAAMlK,GAAU2B,QAAQuI,EAAMnK,KAE1GyK,mBAAmBN,GAEnB,OADA8G,mBAAmBC,GACZ4D,mBAAmBlT,QAAQuI,EAAM5K,GAAWqC,QAAQuI,EAAM3K,GAAYoC,QAAQuI,EAAM1K,GAAUmC,QAAQuI,EAAMnK,IAEvH,MAAM4C,EAAWuR,kCAAkChK,GAGnD,OAAOiM,uBAAuBxT,EADfyR,sBAAsBlK,EADlBmK,eAAe1R,EAAU,CAAC,MAAO,QAAS,YAAa,SACnB,IACPsO,GAEpDD,mBAAmBC,GACnB,MAAMtH,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGlH,SAAEA,EAAQqI,EAAEA,GApoBjC,SAASoL,wBAAwB3K,GACpC,OAAOH,iBAAiBG,GAmoBkB2K,CAAwBhP,SAAS8C,IAC3E,GAAIc,EACA,MAAM,IAAI1D,WAAW,4CAEzB,OAAO,IADmBpI,aAAa,wBAChC,CAAsByK,EAAMC,EAAOC,EAAKlH,GAE5C,SAAS4R,gCAAgC5R,EAAUwR,EAAQlD,GAC9D,IAAInH,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAe0J,qBAAqBzB,GAC1F,MAAMrE,EAAWkB,mBAAmBC,GAC9BoF,EAAOF,uBAAuBxT,EAAUwR,EAAQlD,GAChDtH,EAAOhI,QAAQ0U,EAAM/W,GACrBsK,EAAQjI,QAAQ0U,EAAM9W,GACtBsK,EAAMlI,QAAQ0U,EAAM7W,GAE1B,QADGsK,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe+D,aAAanG,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY4D,IACpI,CAAEnG,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAExE,SAASoK,mBAAmBpM,EAAM+G,GACrC,IAAItH,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,EAClF,GAAIoE,SAASmD,GAAO,CAChB,GAAIM,mBAAmBN,GACnB,OAAOA,EACX,GAAIS,wBAAwBT,GAExB,OADA8G,mBAAmBC,GACZiF,mCAAmCvU,QAAQuI,EAAMjK,GAAY0B,QAAQuI,EAAMlK,GAAU2B,QAAQuI,EAAMnK,IAE9G,GAAIuK,eAAeJ,GAEf,OADA8G,mBAAmBC,GACZsF,uBAAuB5U,QAAQuI,EAAM5K,GAAWqC,QAAQuI,EAAM3K,GAAYoC,QAAQuI,EAAM1K,GAAU,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGmC,QAAQuI,EAAMnK,IAE7I4C,EAAWuR,kCAAkChK,GAC7C,MAYMiK,EAASC,sBAAsBlK,EAZlBmK,eAAe1R,EAAU,CACxC,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,SAEmD,MACpDgH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeqI,gCAAgC5R,EAAUwR,EAAQlD,QAErI,CAED,IAAIjG,EAGJ,GAJAgG,mBAAmBC,KAEhBtH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYvJ,SAAAA,EAAUqI,EAAAA,GAxrB5F,SAASwL,4BAA4B/K,GACxC,OAAOH,iBAAiBG,GAwrBhB+K,CAA4BpP,SAAS8C,KACrCc,EACA,MAAM,IAAI1D,WAAW,gDACzBmF,eAAe9C,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,QAChElN,IAAb2D,IACAA,EAAW6R,sBACf7R,EAAW8R,mBAAmB9R,GAElC,OAAO4T,uBAAuB5M,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAEzG,SAAS8T,mBAAmBvM,GAC/B,GAAIG,mBAAmBH,GACnB,OAAOA,EACX,IAAIkD,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB2C,yBAAyBzG,GAEhI,OAAO,IADkBhL,aAAa,uBAC/B,CAAqBkO,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAE1G,SAAS0I,kBAAkBxM,GAC9B,GAAID,kBAAkBC,GAClB,OAAOA,EACX,GAAIS,wBAAwBT,GAAO,CAE/B,OAAO,IADiBhL,aAAa,sBAC9B,CAAoByC,QAAQuI,EAAM9K,IAE7C,MAAMuX,EAAKxH,qBAAqB/H,SAAS8C,IAEzC,OAAO,IADiBhL,aAAa,sBAC9B,CAAoByX,GAExB,SAASC,mBAAmBX,EAAWhF,GAC1C,IAAI/G,EAAO+L,EACX,GAAIlP,SAASmD,GAAO,CAChB,GAAIQ,mBAAmBR,GACnB,OAAOA,EACX,IAAIvH,EAAUkU,EACd,GAAIxV,QAAQ6I,EAAMnK,GACd4C,EAAWhB,QAAQuI,EAAMnK,GACzB8W,GAAiB,MAEhB,CACD,IAAIC,EAAsB5M,EAAKvH,SAC/BkU,OAAyC7X,IAAxB8X,OACW9X,IAAxB8X,IACAA,EAAsBtC,sBAC1B7R,EAAW8R,mBAAmBqC,GAKlC5M,EAAOA,EACP,MACMiK,EAASC,sBAAsBlK,EADlBmK,eAAe1R,EAAU,CAAC,MAAO,QAAS,YAAa,SACnB,IAOvD,OAHIkU,QAAmC7X,IAAjBmV,EAAOvK,YAA4C5K,IAArBmV,EAAO4C,gBAA2C/X,IAAhBmV,EAAOxK,OACzFwK,EAAOxK,KAAO,MAEXqN,2BAA2BrU,EAAUwR,EAAQlD,GAExDD,mBAAmBC,GACnB,IAAIrH,MAAEA,EAAKC,IAAEA,EAAGkD,iBAAEA,EAAkBpK,SAAUmU,GAAwBjK,4BAA4BzF,SAAS8C,IACvGvH,EAAWmU,EAIf,QAHiB9X,IAAb2D,IACAA,EAAW6R,sBACf7R,EAAW8R,mBAAmB9R,QACL3D,IAArB+N,EAEA,OADAgD,cAAc,KAAMnG,EAAOC,GACpBoN,uBAAuBrN,EAAOC,EAAKlH,GAG9C,OAAOqU,2BAA2BrU,EADnBsU,uBAAuBrN,EAAOC,EAAKlH,EAAUoK,IAGzD,SAASmK,eAAejB,EAAWnG,EAAW,aACjD,IACIhG,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,EAD5DuH,EAAO+L,EAEX,GAAIlP,SAASmD,GAAO,CAChB,GAAIK,eAAeL,GACf,OAAOA,EAIX,GAHIS,wBAAwBT,KACxBA,EAAOgM,mCAAmCvU,QAAQuI,EAAMjK,GAAY0B,QAAQuI,EAAMlK,GAAU2B,QAAQuI,EAAMnK,KAE1GyK,mBAAmBN,GAAO,CAE1B,OAAO,IADmBhL,aAAa,wBAChC,CAAsByC,QAAQuI,EAAMzK,GAAWkC,QAAQuI,EAAMxK,GAAaiC,QAAQuI,EAAMvK,GAAagC,QAAQuI,EAAMtK,GAAkB+B,QAAQuI,EAAMrK,GAAkB8B,QAAQuI,EAAMpK,IAG9L,GADA6C,EAAWuR,kCAAkChK,GAClB,YAAvB9C,SAASzE,GACT,MAAM,IAAI2E,WAAW,8CAEtBwC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe0J,qBAAqB1L,MACpFJ,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe+D,aAAanG,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY4D,SAK3I,KAFGhG,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYvJ,SAAAA,GA9wBhE,SAASwU,wBAAwB1L,GACpC,MAAMC,EAAQ0L,EAAWxL,KAAKH,GAC9B,IAAI3B,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,EAChE,GAAI+I,EAAO,CACP5B,EAAO7C,UAAUyE,EAAM,IACvB3B,EAAS9C,UAAUyE,EAAM,IAAMA,EAAM,IACrC1B,EAAS/C,UAAUyE,EAAM,IAAMA,EAAM,IACtB,KAAX1B,IACAA,EAAS,IACb,MAAMhH,GAAY0I,EAAM,IAAMA,EAAM,IAAM,YAC1CM,EAAc/E,UAAUjE,EAAS8I,MAAM,EAAG,IAC1CG,EAAchF,UAAUjE,EAAS8I,MAAM,EAAG,IAC1CI,EAAajF,UAAUjE,EAAS8I,MAAM,EAAG,IACzCnJ,EAAW+I,EAAM,QAEhB,CACD,IAAIV,EAAGe,EAGP,KAFGA,QAAAA,EAASjC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYvJ,SAAAA,EAAUqI,EAAAA,GAC9EM,iBAAiBG,KAChBM,EACD,MAAM,IAAIzE,WAAW,8BAA8BmE,KACvD,GAAIT,EACA,MAAM,IAAI1D,WAAW,4CAG7B,GAAI,kBAAkB+P,KAAK5L,GACvB,MAAO,CAAE3B,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYvJ,SAAAA,GAKzE,IACI,MAAMiH,MAAEA,EAAKC,IAAEA,GAAQgD,4BAA4BpB,GACnDsE,cAAc,KAAMnG,EAAOC,GAE/B,MACI,IACI,MAAMF,KAAEA,EAAIC,MAAEA,GAAU8C,6BAA6BjB,GACrDsE,cAAcpG,EAAMC,EAAO,GAE/B,MACI,MAAO,CAAEE,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYvJ,SAAAA,IAG7E,MAAM,IAAI2E,WAAW,qCAAqCmE,0BAkuBsB0L,CAAwB/P,SAAS8C,KAC7GsG,WAAW1G,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,QAC1ClN,IAAb2D,GAAuC,YAAbA,EAC1B,MAAM,IAAI2E,WAAW,4CAI7B,OAAO,IADmBpI,aAAa,wBAChC,CAAsB4K,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAE1E,SAASoL,oBAAoBpN,EAAM+G,GACtC,GAAIlK,SAASmD,GAAO,CAChB,GAAIO,oBAAoBP,GACpB,OAAOA,EACX,MAAMvH,EAAWuR,kCAAkChK,GAGnD,OAAOqN,4BAA4B5U,EADpByR,sBAAsBlK,EADlBmK,eAAe1R,EAAU,CAAC,QAAS,YAAa,SACZ,IACFsO,GAEzDD,mBAAmBC,GACnB,IAAItH,KAAEA,EAAIC,MAAEA,EAAKgD,gBAAEA,EAAiBjK,SAAUmU,GAAwBpK,6BAA6BtF,SAAS8C,IAExGvH,EAAWmU,EAIf,QAHiB9X,IAAb2D,IACAA,EAAW6R,sBACf7R,EAAW8R,mBAAmB9R,QACN3D,IAApB4N,EAEA,OADAmD,cAAcpG,EAAMC,EAAO,GACpB4N,wBAAwB7N,EAAMC,EAAOjH,GAGhD,OAAO4U,4BAA4B5U,EADpB6U,wBAAwB7N,EAAMC,EAAOjH,EAAUiK,IAG3D,SAASgI,2BAA2BjL,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY6H,EAAiB1E,EAAU7F,EAAUiO,EAAgBC,EAAWC,GACrL,MACMC,EAAK,IADM1Y,aAAa,4BACnB,CAAayK,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAC1F,GAAwB,SAApB6H,GAA4C,WAAd2D,EAAwB,CAItD,OAAO/V,QADSkW,6BAA6BrO,EAAUoO,EAAIH,GACnCrY,GAK5B,GAAwB,UAApB2U,GAA6C,QAAd2D,EAAqB,CAEpD,MAAMlI,EAAUC,qBAAqB9F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GACvG,GAAgB,OAAZsD,EACA,MAAM,IAAIlI,WAAW,4CACzB,OAAOzB,EAAKiS,SAAStI,EAAS3J,EAAKC,OAAOuJ,IAG9C,MAAM0I,EAAmBC,uBAAuBxO,EAAUoO,GAC1D,IAAK,MAAMK,KAAaF,EAAkB,CACtC,MAAMG,EAAkBC,wBAAwB3O,EAAUyO,GACpDG,EAAyBvS,EAAKwS,SAASC,uBAAuBzS,EAAKC,OAAOoS,GAAkB,KAAM,eACxG,GAAIA,IAAoB7I,GAAasI,GAAeS,IAA2B/I,EAC3E,OAAO1N,QAAQsW,EAAW7Y,GAKlC,GAAkB,WAAdsY,EAAwB,CACxB,MAAMa,EAAYC,2BAA2BnJ,GACvCoJ,EAAiBtO,mBAAmBX,GAAY7H,QAAQ6H,EAAUnK,GAAe,YAIvF,MAAM,IAAIiI,WAAW,UAAUiR,oBAA4BX,EAAGxM,iBAAiBqN,KAKnF,OAAO9W,QADS+W,6BAA6BX,EAAkBvO,EAAUoO,EAAIH,GACrDrY,GAErB,SAASuZ,wBAAwBzO,EAAM+G,GAC1C,IAAItH,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY1C,EAAU/G,EAAQE,EAChGgV,GAAc,EACd5D,EAAkB,SACtB,GAAIhN,SAASmD,GAAO,CAChB,GAAIS,wBAAwBT,GACxB,OAAOA,EACXvH,EAAWuR,kCAAkChK,GAC7C,MAaMiK,EAASC,sBAAsBlK,EADHhC,UAZfmM,eAAe1R,EAAU,CACxC,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,SAEoD,WAAY,UACE,CAAC,eACpEgH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeqI,gCAAgC5R,EAAUwR,EAAQlD,IACtIzH,EAAWkL,mBAAmBP,EAAO3K,UACrC/G,EAAS0R,EAAO1R,YACDzD,IAAXyD,EACAsR,EAAkB,OAGlBtR,EAAS2E,SAAS3E,OAGrB,CAED,IAAIsI,EAAUC,EAGd,GAJAgG,mBAAmBC,KAEhBtH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYnB,SAAAA,EAAUtI,OAAAA,EAAQuI,EAAAA,EAAGrI,SAAAA,GA34BvG,SAASiW,iCAAiCnN,GAC7C,MAAMJ,EAASC,iBAAiBG,GAChC,IAAKJ,EAAON,SACR,MAAM,IAAIzD,WAAW,8DACzB,OAAO+D,EAw4BCuN,CAAiCxR,SAAS8C,MACzCa,EACD,MAAM,IAAIzD,WAAW,qCACrB0D,EACA+I,EAAkB,QAEZtR,IACNsR,EAAkB,QAGtBvK,EAAW,IADctK,aAAa,uBAC3B,CAAqB6L,GAC3BpI,IACDA,EAAW6R,sBACf7R,EAAW8R,mBAAmB9R,GAC9BgV,GAAc,EAElB,IAAItI,EAAW,EAGS,WAApB0E,IACA1E,EAAWC,0BAA0B7M,IAIzC,OAAOkS,4BADkBC,2BAA2BjL,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY6H,EAAiB1E,EAAU7F,EAFtI2H,yBAAyBF,GAC9BO,iBAAiBP,EAAS,UACsJ0G,GAC7InO,EAAU7G,GAE5D,SAASkW,wBAAwBxN,EAAQyN,EAASC,EAAUC,EAAQrW,GACvEoN,cAAc+I,EAASC,EAAUC,GACjCC,gBAAgBH,EAASC,EAAUC,GACnCjY,YAAYsK,GACZxJ,QAAQwJ,EAAQ/L,EAAUwZ,GAC1BjX,QAAQwJ,EAAQ9L,EAAWwZ,GAC3BlX,QAAQwJ,EAAQ7L,EAASwZ,GACzBnX,QAAQwJ,EAAQtL,EAAU4C,GAC1Bd,QAAQwJ,EF1vCc,mBE0vCM,GAUzB,SAASwJ,mBAAmBiE,EAASC,EAAUC,EAAQrW,EAAW6R,sBACrE,MAAM0E,EAAoBha,aAAa,wBACjCmM,EAAShG,GAAa6T,EAAkB/a,WAE9C,OADA0a,wBAAwBxN,EAAQyN,EAASC,EAAUC,EAAQrW,GACpD0I,EAEJ,SAAS8N,4BAA4B9N,EAAQyN,EAASC,EAAUC,EAAQI,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,EAAIhU,GAClG8J,eAAeqM,EAASC,EAAUC,EAAQI,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAC7D2C,oBAAoBR,EAASC,EAAUC,EAAQI,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAClE5V,YAAYsK,GACZxJ,QAAQwJ,EAAQ/L,EAAUwZ,GAC1BjX,QAAQwJ,EAAQ9L,EAAWwZ,GAC3BlX,QAAQwJ,EAAQ7L,EAASwZ,GACzBnX,QAAQwJ,EAAQ5L,EAAU2Z,GAC1BvX,QAAQwJ,EAAQ3L,EAAYoE,GAC5BjC,QAAQwJ,EAAQ1L,EAAYmJ,GAC5BjH,QAAQwJ,EAAQzL,EAAiByZ,GACjCxX,QAAQwJ,EAAQxL,EAAiB,GACjCgC,QAAQwJ,EAAQvL,EAAgB6W,GAChC9U,QAAQwJ,EAAQtL,EAAU4C,GAUvB,SAAS4T,uBAAuBuC,EAASC,EAAUC,EAAQI,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,EAAIhU,EAAW6R,sBAChG,MAAM+E,EAAwBra,aAAa,4BACrCmM,EAAShG,GAAakU,EAAsBpb,WAElD,OADAgb,4BAA4B9N,EAAQyN,EAASC,EAAUC,EAAQI,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,EAAIhU,GAC/E0I,EAEJ,SAASmO,4BAA4BnO,EAAQ0N,EAAUC,EAAQrW,EAAUoK,GAC5EgD,cAAchD,EAAkBgM,EAAUC,GAC1CC,gBAAgBlM,EAAkBgM,EAAUC,GAC5CjY,YAAYsK,GACZxJ,QAAQwJ,EAAQ9L,EAAWwZ,GAC3BlX,QAAQwJ,EAAQ7L,EAASwZ,GACzBnX,QAAQwJ,EAAQ/L,EAAUyN,GAC1BlL,QAAQwJ,EAAQtL,EAAU4C,GAC1Bd,QAAQwJ,EF7yCmB,wBE6yCM,GAU9B,SAAS4L,uBAAuB8B,EAAUC,EAAQrW,EAAW6R,qBAAsBzH,EAAmB,MACzG,MAAM0M,EAAwBva,aAAa,4BACrCmM,EAAShG,GAAaoU,EAAsBtb,WAElD,OADAqb,4BAA4BnO,EAAQ0N,EAAUC,EAAQrW,EAAUoK,GACzD1B,EAEJ,SAASqO,6BAA6BrO,EAAQyN,EAASC,EAAUpW,EAAUiK,GAC9EmD,cAAc+I,EAASC,EAAUnM,GAy2CrC,SAAS+M,qBAAqBhQ,EAAMC,GAChCgQ,cAAcjQ,GAvpFD,OACA,SADA,SAwpFTA,EACAiQ,cAAchQ,EAAO,EAAG,IAxpFf,SA0pFJD,GACLiQ,cAAchQ,EAAO,EAAG,GA92C5B+P,CAAqBb,EAASC,GAC9BhY,YAAYsK,GACZxJ,QAAQwJ,EAAQ/L,EAAUwZ,GAC1BjX,QAAQwJ,EAAQ9L,EAAWwZ,GAC3BlX,QAAQwJ,EAAQ7L,EAASoN,GACzB/K,QAAQwJ,EAAQtL,EAAU4C,GAC1Bd,QAAQwJ,EFt0CoB,yBEs0CM,GAU/B,SAASmM,wBAAwBsB,EAASC,EAAUpW,EAAW6R,qBAAsB5H,EAAkB,GAC1G,MAAMiN,EAAyB3a,aAAa,6BACtCmM,EAAShG,GAAawU,EAAuB1b,WAEnD,OADAub,6BAA6BrO,EAAQyN,EAASC,EAAUpW,EAAUiK,GAC3DvB,EAEJ,SAASyO,iCAAiCzO,EAAQ0O,EAAkBvQ,EAAU7G,GACjFqX,yBAAyBD,GACzBhZ,YAAYsK,GACZxJ,QAAQwJ,EAAQjM,EAAkB2a,GAClClY,QAAQwJ,EAAQpL,EAAWuJ,GAC3B3H,QAAQwJ,EAAQtL,EAAU4C,GAC1B,MACMsX,EAAU,IADQ/a,aAAa,sBACrB,CAAoByC,QAAQ0J,EAAQjM,IACpDyC,QAAQwJ,EAAQrL,EAASia,GAUtB,SAAStF,4BAA4BoF,EAAkBvQ,EAAU7G,EAAW6R,sBAC/E,MAAM0F,EAAwBhb,aAAa,4BACrCmM,EAAShG,GAAa6U,EAAsB/b,WAElD,OADA2b,iCAAiCzO,EAAQ0O,EAAkBvQ,EAAU7G,GAC9D0I,EAEJ,SAASmJ,qBAEZ,OAAO,IADkBtV,aAAa,uBAC/B,CAAqB,WAIzB,SAASmV,eAAe1R,EAAUwX,GACrC,IAAIC,EAAaD,EACbxX,EAASwR,SACTiG,EAAazX,EAASwR,OAAOiG,IAEjC,MAAM/O,EAAS,GACf,IAAK,MAAMrN,KAAQoc,EAAY,CAC3B,GAAoB,iBAATpc,EACP,MAAM,IAAI4D,UAAU,qCACxB0B,EAAmBoS,KAAKrK,EAAQrN,GAEpC,OAAOqN,EAEJ,SAASgP,oBAAoB1X,EAAUwR,EAAQmG,GAClD,MAAMC,EAAiB5X,EAAS6X,YAChC,IAAKD,EACD,MAAO,IAAKpG,KAAWmG,GAE3B,MAAMjP,EAAS3F,QAAQC,MAAM4U,EAAgB5X,EAAU,CAACwR,EAAQmG,IAChE,IAAKvT,SAASsE,GACV,MAAM,IAAIzJ,UAAU,0CACxB,OAAOyJ,EAEJ,SAASoP,gBAAgB9X,EAAU0T,EAAMnT,EAAU+N,EAASyJ,GAC/D,IAAIC,EAAUD,OACE1b,IAAZ2b,IACAA,EAAUhY,EAASgY,SAEvB,MAAMtP,EAAS5F,GAAakV,EAAShY,EAAU,CAAC0T,EAAMnT,EAAU+N,IAChE,IAAK3G,eAAee,GAChB,MAAM,IAAIzJ,UAAU,kBACxB,OAAOyJ,EAEX,SAASuP,kBAAkBjY,EAAU0T,EAAMwE,EAAW5J,EAAS6J,GAC3D,IAAIC,EAAYD,OACE9b,IAAd+b,IACAA,EAAYpY,EAASoY,WAEzB,MAAM1P,EAAS5F,GAAasV,EAAWpY,EAAU,CAAC0T,EAAMwE,EAAW5J,IACnE,IAAK5G,mBAAmBgB,GACpB,MAAM,IAAIzJ,UAAU,kBACxB,OAAOyJ,EAEJ,SAAS2P,aAAarY,EAAUsY,GACnC,MAAM5P,EAAS1I,EAASgH,KAAKsR,GAC7B,QAAejc,IAAXqM,EACA,MAAM,IAAI/D,WAAW,2CAEzB,OAAOD,yBAAyBgE,GAE7B,SAAS6P,cAAcvY,EAAUsY,GACpC,MAAM5P,EAAS1I,EAASiH,MAAMqR,GAC9B,QAAejc,IAAXqM,EACA,MAAM,IAAI/D,WAAW,oDAEzB,OAAOC,kBAAkB8D,GAEtB,SAAS8P,kBAAkBxY,EAAUsY,GACxC,MAAM5P,EAAS1I,EAASoU,UAAUkE,GAClC,QAAejc,IAAXqM,EACA,MAAM,IAAI/D,WAAW,8CAEzB,OAAOF,SAASiE,GAEb,SAAS+P,YAAYzY,EAAUsY,GAClC,MAAM5P,EAAS1I,EAASkH,IAAIoR,GAC5B,QAAejc,IAAXqM,EACA,MAAM,IAAI/D,WAAW,kDAEzB,OAAOC,kBAAkB8D,GAEtB,SAASgQ,YAAY1Y,EAAUsY,GAClC,IAAI5P,EAAS1I,EAAS+G,IAAIuR,GAI1B,YAHejc,IAAXqM,IACAA,EAASjE,SAASiE,IAEfA,EAEJ,SAASiQ,gBAAgB3Y,EAAUsY,GACtC,IAAI5P,EAAS1I,EAASgT,QAAQsF,GAI9B,YAHejc,IAAXqM,IACAA,EAAShE,yBAAyBgE,IAE/BA,EAEJ,SAASkQ,kBAAkB5Y,EAAUsY,GACxC,OAAOtY,EAAS6Y,UAAUP,GAEvB,SAASQ,kBAAkB9Y,EAAUsY,GACxC,OAAOtY,EAAS+Y,UAAUT,GAEvB,SAASU,mBAAmBhZ,EAAUsY,GACzC,OAAOtY,EAASiZ,WAAWX,GAExB,SAASY,mBAAmBlZ,EAAUsY,GACzC,OAAOtY,EAASmZ,WAAWb,GAExB,SAASc,oBAAoBpZ,EAAUsY,GAC1C,OAAOtY,EAASqZ,YAAYf,GAEzB,SAASgB,mBAAmBtZ,EAAUsY,GACzC,OAAOtY,EAASuZ,WAAWjB,GAExB,SAASkB,qBAAqBxZ,EAAUsY,GAC3C,OAAOtY,EAASyZ,aAAanB,GAE1B,SAASoB,mBAAmB1Z,EAAUsY,GACzC,OAAOtY,EAAS2Z,WAAWrB,GAExB,SAASxG,mBAAmB8H,GAC/B,IAAIC,EAAeD,EACnB,GAAIxV,SAASyV,GAAe,CACxB,GAAInb,QAAQmb,EAAczc,GACtB,OAAO4B,QAAQ6a,EAAczc,GACjC,KAAM,aAAcyc,GAChB,OAAOA,EAEX,GADAA,EAAeA,EAAa7Z,SACxBoE,SAASyV,MAAmB,aAAcA,GAC1C,OAAOA,EAEf,MAAMC,EAAarV,SAASoV,GACtBE,EAAmBxd,aAAa,uBACtC,GAAIyd,kBAAkBF,GAClB,OAAO,IAAIC,EAAiBD,GAChC,IAAI9Z,EACJ,MACOA,SAAAA,GAAa2I,iBAAiBmR,IAErC,MACI,MAAM,IAAInV,WAAW,qBAAqBmV,KAI9C,OAFK9Z,IACDA,EAAW,WACR,IAAI+Z,EAAiB/Z,GAEhC,SAASuR,kCAAkChK,GACvC,GAAI7I,QAAQ6I,EAAMnK,GACd,OAAO4B,QAAQuI,EAAMnK,GACzB,MAAM4C,SAAEA,GAAauH,EACrB,YAAiBlL,IAAb2D,EACO6R,qBACJC,mBAAmB9R,GAEvB,SAASia,eAAeC,EAAKC,GAChC,GAAID,IAAQC,EACR,OAAO,EAGX,OAFa1V,SAASyV,KACTzV,SAAS0V,GAGnB,SAASC,qBAAqBF,EAAKC,GACtC,GAAID,IAAQC,EACR,OAAOA,EACX,MAAME,EAAO5V,SAASyV,GAChBI,EAAO7V,SAAS0V,GACtB,GAAIE,IAASC,GAAiB,YAATD,EACjB,OAAOF,EAEN,GAAa,YAATG,EACL,OAAOJ,EAGP,MAAM,IAAIvV,WAAW,4BAGtB,SAAS6O,uBAAuBxT,EAAUwR,EAAQlD,GACrD,MAAM5F,EAAS1I,EAASua,eAAe/I,EAAQlD,GAC/C,IAAK3G,eAAee,GAChB,MAAM,IAAIzJ,UAAU,kBACxB,OAAOyJ,EAEJ,SAASkM,4BAA4B5U,EAAUwR,EAAQlD,GAC1D,MAAM5F,EAAS1I,EAASwa,oBAAoBhJ,EAAQlD,GACpD,IAAKxG,oBAAoBY,GACrB,MAAM,IAAIzJ,UAAU,kBACxB,OAAOyJ,EAEJ,SAAS2L,2BAA2BrU,EAAUwR,EAAQlD,GACzD,MAAM5F,EAAS1I,EAASya,mBAAmBjJ,EAAQlD,GACnD,IAAKvG,mBAAmBW,GACpB,MAAM,IAAIzJ,UAAU,kBACxB,OAAOyJ,EAEJ,SAASqJ,mBAAmB2I,GAC/B,IAAIC,EAAuBD,EAC3B,GAAItW,SAASuW,GAAuB,CAChC,GAAI3S,wBAAwB2S,GACxB,OAAO3b,QAAQ2b,EAAsBrd,GACzC,KAAM,aAAcqd,GAChB,OAAOA,EAEX,GADAA,EAAuBA,EAAqB9T,SACxCzC,SAASuW,MAA2B,aAAcA,GAClD,OAAOA,EAGf,MACM9T,EAAWqB,sBADEzD,SAASkW,IAG5B,OAAO,IADkBpe,aAAa,uBAC/B,CAAqBsK,GAEzB,SAAS+T,eAAeV,EAAKC,GAChC,GAAID,IAAQC,EACR,OAAO,EAGX,OAFY1V,SAASyV,KACTzV,SAAS0V,GAGlB,SAAS7I,uBAAuBuJ,GACnC,OAAO3I,mBAAmBlT,QAAQ6b,EAAUle,GAAWqC,QAAQ6b,EAAUje,GAAYoC,QAAQ6b,EAAUhe,GAAUmC,QAAQ6b,EAAUzd,IAEhI,SAAS0d,uBAAuBD,GAEnC,OAAO,IADMte,aAAa,wBACnB,CAASyC,QAAQ6b,EAAU/d,GAAWkC,QAAQ6b,EAAU9d,GAAaiC,QAAQ6b,EAAU7d,GAAagC,QAAQ6b,EAAU5d,GAAkB+B,QAAQ6b,EAAU3d,GAAkB8B,QAAQ6b,EAAU1d,IAElM,SAASqY,wBAAwB3O,EAAUyQ,GAC9C,IAAIyD,EAA0BlU,EAASkU,wBACvC,GAAuC,mBAA5BA,EACP,MAAM,IAAI9b,UAAU,wCAExB,MAAMyN,EAAW3J,QAAQC,MAAM+X,EAAyBlU,EAAU,CAACyQ,IACnE,GAAwB,iBAAb5K,EACP,MAAM,IAAIzN,UAAU,2CAExB,IAAKkF,UAAUuI,IAAapL,EAAQoL,GAAY,OAC5C,MAAM,IAAI/H,WAAW,oDAEzB,OAAO+H,EAEJ,SAASsO,kCAAkCnU,EAAUyQ,GAExD,OAAOzB,2BADUL,wBAAwB3O,EAAUyQ,IAGhD,SAAS/D,mCAAmC1M,EAAUyQ,EAAStX,GAClE,MAAMgU,EAAKhV,QAAQsY,EAAS7a,GACtBiQ,EAAW8I,wBAAwB3O,EAAUyQ,GACnD,IAAItQ,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAe0R,qBAAqBjH,GAE5G,QADGhN,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeqD,mBAAmB5F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAamD,IAC/KkH,uBAAuB5M,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAEzG,SAASkV,6BAA6BrO,EAAUgU,EAAU/F,GAE7D,OAAOiB,6BADkBV,uBAAuBxO,EAAUgU,GACJhU,EAAUgU,EAAU/F,GAE9E,SAASiB,6BAA6BX,EAAkBvO,EAAUgU,EAAU/F,GACxE,MAAMoG,EAAU3e,aAAa,sBACvB4e,EAAc/F,EAAiB9J,OACrC,GAAoB,IAAhB6P,EACA,OAAO/F,EAAiB,GAC5B,GAAI+F,EACA,OAAQrG,GACJ,IAAK,aAEL,IAAK,UACD,OAAOM,EAAiB,GAC5B,IAAK,QACD,OAAOA,EAAiB+F,EAAc,GAC1C,IAAK,SACD,MAAM,IAAIxW,WAAW,2BAIjC,MAAMqC,EAAOhI,QAAQ6b,EAAUle,GACzBsK,EAAQjI,QAAQ6b,EAAUje,GAC1BsK,EAAMlI,QAAQ6b,EAAUhe,GACxBsK,EAAOnI,QAAQ6b,EAAU/d,GACzBsK,EAASpI,QAAQ6b,EAAU9d,GAC3BsK,EAASrI,QAAQ6b,EAAU7d,GAC3BqM,EAAcrK,QAAQ6b,EAAU5d,GAChCqM,EAActK,QAAQ6b,EAAU3d,GAChCqM,EAAavK,QAAQ6b,EAAU1d,GAC/Bie,EAAQtO,qBAAqB9F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GACrG,GAAc,OAAV6R,EACA,MAAM,IAAIzW,WAAW,uCACzB,MAAM0W,EAAY,IAAIH,EAAQhY,EAAKiS,SAASiG,EAAO1X,KAC7C4X,EAAW,IAAIJ,EAAQhY,EAAKqY,IAAIH,EAAO1X,KACvC8X,EAAehG,wBAAwB3O,EAAUwU,GAEjDhQ,EADcmK,wBAAwB3O,EAAUyU,GACpBE,EAClC,OAAQ1G,GACJ,IAAK,UAAW,CACZ,MAAM9U,EAAWhB,QAAQ6b,EAAUzd,GAC7Bqe,EAAgBlf,aAAa,4BAC7Bmf,EAAUC,YAAY3U,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,EAAU,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAIqL,OAAahP,GAE7J,OAAOgZ,uBAAuBxO,EADD,IAAI4U,EAAcC,EAAQ1U,KAAM0U,EAAQzU,MAAOyU,EAAQxU,IAAKwU,EAAQvU,KAAMuU,EAAQtU,OAAQsU,EAAQrU,OAAQqU,EAAQrS,YAAaqS,EAAQpS,YAAaoS,EAAQnS,WAAYvJ,IACvI,GAElE,IAAK,aAEL,IAAK,QAAS,CACV,MAAMA,EAAWhB,QAAQ6b,EAAUzd,GAC7Bqe,EAAgBlf,aAAa,4BAC7Bqf,EAAQD,YAAY3U,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,EAAU,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGqL,OAAahP,GAEpJwf,EAAWxG,uBAAuBxO,EADb,IAAI4U,EAAcG,EAAM5U,KAAM4U,EAAM3U,MAAO2U,EAAM1U,IAAK0U,EAAMzU,KAAMyU,EAAMxU,OAAQwU,EAAMvU,OAAQuU,EAAMvS,YAAauS,EAAMtS,YAAasS,EAAMrS,WAAYvJ,IAEjL,OAAO6b,EAASA,EAASvQ,OAAS,GAEtC,IAAK,SACD,MAAM,IAAI3G,WAAW,0BAIjC,SAAS0Q,uBAAuBxO,EAAUgU,GACtC,MAAMzF,EAAmBvO,EAASiV,uBAAuBjB,GACnDnS,EAAS,GACf,IAAK,MAAM4O,KAAWlC,EAAkB,CACpC,IAAK9N,kBAAkBgQ,GACnB,MAAM,IAAIrY,UAAU,0CAExB0B,EAAmBoS,KAAKrK,EAAQ4O,GAEpC,OAAO5O,EAEJ,SAASqT,cAAc/U,GAC1B,IAAIkC,EACJ,GAAIlC,EAAO,GAAKA,EAAO,KAAM,CAGzBkC,GAFalC,EAAO,EAAI,IAAM,KAEV,SADD1F,EAAQ0F,KACemC,OAAO,QAGjDD,EAAa,OAAOlC,IAAOmC,OAAO,GAEtC,OAAOD,EAEJ,SAAS8S,sBAAsBC,GAClC,MAAO,KAAKA,IAAO9S,OAAO,GAEvB,SAAS+S,wBAAwB7U,EAAQgC,EAAaC,EAAaC,EAAY0G,GAClF,GAAkB,WAAdA,EACA,MAAO,GACX,MAAM/D,EAAO,IAAI8P,sBAAsB3U,KACvC,IACIhH,EADA8b,EAA+B,IAAd9S,EAAkC,IAAdC,EAAoBC,EAE7D,GAAkB,SAAd0G,EAAsB,CACtB,GAAuB,IAAnBkM,EACA,OAAOjQ,EAEX,IADA7L,EAAW,GAAG8b,IAAiBC,SAAS,EAAG,KACF,MAAlC/b,EAASA,EAASiL,OAAS,IAC9BjL,EAAWA,EAAS8I,MAAM,GAAI,OAEjC,CACD,GAAkB,IAAd8G,EACA,OAAO/D,EACX7L,EAAW,GAAG8b,IAAiBC,SAAS,EAAG,KAAKjT,MAAM,EAAG8G,GAE7D,MAAO,GAAG/D,KAAQ7L,IAEf,SAASgc,wBAAwB/E,EAASzQ,EAAUoJ,GACvD,IAAIqM,EAAiBzV,EACrB,QAAuBxK,IAAnBigB,EAA8B,CAE9BA,EAAiB,IADQ/f,aAAa,uBACrB,CAAqB,OAE1C,MACMse,EAAWtH,mCAAmC+I,EAAgBhF,EADxDzF,sBAEN7K,EAAO+U,cAAc/c,QAAQ6b,EAAUle,IACvCsK,EAAQ+U,sBAAsBhd,QAAQ6b,EAAUje,IAChDsK,EAAM8U,sBAAsBhd,QAAQ6b,EAAUhe,IAC9CsK,EAAO6U,sBAAsBhd,QAAQ6b,EAAU/d,IAC/CsK,EAAS4U,sBAAsBhd,QAAQ6b,EAAU9d,IACjDkO,EAAUiR,wBAAwBld,QAAQ6b,EAAU7d,GAAagC,QAAQ6b,EAAU5d,GAAkB+B,QAAQ6b,EAAU3d,GAAkB8B,QAAQ6b,EAAU1d,GAAiB8S,GAClL,IAAI6F,EAAiB,IACrB,QAAiBzZ,IAAbwK,EAAwB,CAExBiP,EAAiByG,8BADA/G,wBAAwB8G,EAAgBhF,IAG7D,MAAO,GAAGtQ,KAAQC,KAASC,KAAOC,KAAQC,IAAS6D,IAAU6K,IAE1D,SAAS0G,yBAAyBjc,EAAU0P,EAAY,OAAQ3B,GACnE,SAASmO,aAAalY,GAClB,OAAIA,GAAOjC,GACAiC,EAAIkE,SAAS,IACjBvF,EAAKC,OAAOoB,GAAKkE,SAAS,IAErC,MAAMgC,EAAQzL,QAAQuB,EAAUhD,GAC1BmN,EAAS1L,QAAQuB,EAAU/C,GAC3BmN,EAAQ3L,QAAQuB,EAAU9C,GAC1BmN,EAAO5L,QAAQuB,EAAU7C,GACzBmN,EAAQ7L,QAAQuB,EAAU5C,GAC1BoN,EAAU/L,QAAQuB,EAAU3C,GAClC,IAAIqN,EAAUjM,QAAQuB,EAAU1C,GAC5B6Y,EAAK1X,QAAQuB,EAAUzC,GACvB,EAAKkB,QAAQuB,EAAUxC,GACvBiW,EAAKhV,QAAQuB,EAAUvC,GAC3B,MAAM2D,EAAO+a,aAAajS,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASyL,EAAI,EAAI1C,GACvF,GAAI1F,EAAS,CACT,MAAM4B,KAAEA,EAAId,UAAEA,EAASR,aAAEA,GAAiBN,IAEtCrD,QAAAA,EACAE,aAAcuL,EACdtL,aAAc,EACdC,YAAa2I,GACb2I,cAAc,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG1R,EAASyL,EAAI,EAAI1C,EAAI5E,EAAWc,EAAMtB,IAE9E,MAAMgO,EAAY,GACdnS,GACAmS,EAAUhc,KAAK,GAAG6b,aAAanb,EAAQmJ,QACvCC,GACAkS,EAAUhc,KAAK,GAAG6b,aAAanb,EAAQoJ,QACvCC,GACAiS,EAAUhc,KAAK,GAAG6b,aAAanb,EAAQqJ,QACvCC,GACAgS,EAAUhc,KAAK,GAAG6b,aAAanb,EAAQsJ,QAC3C,MAAMiS,EAAY,GACdhS,GACAgS,EAAUjc,KAAK,GAAG6b,aAAanb,EAAQuJ,QACvCE,GACA8R,EAAUjc,KAAK,GAAG6b,aAAanb,EAAQyJ,QAC3C,MAAM+R,EAAc,GACpB,IACIC,EAAU,EAAUC,EAAUC,EAD9BC,EAAQC,yBAAyB,EAAG,EAAG,EAAGlS,EAASyL,EAAI,EAAI1C,EAAI,KAEhE7O,SAAU+X,EAAO7X,UAAW0X,GAAa/X,OAAOkY,EAAO5Z,OACvD6B,SAAU+X,EAAO7X,UAAW,GAAaL,OAAOkY,EAAO5Z,OACvD6B,SAAU8X,EAAe5X,UAAW2X,GAAahY,OAAOkY,EAAO5Z,KAClE,MAAMjD,EAA8C,IAAnCiB,EAAQ4B,EAAKwS,SAASsH,IAAsD,IAAnC1b,EAAQ4B,EAAKwS,SAAS,IAAmBpU,EAAQ4B,EAAKwS,SAASqH,IACzH,IAAIK,EACJ,GAAkB,SAAdnN,GACA,GAAiB,IAAb5P,EAEA,IADA+c,EAAc,GAAG/c,IAAW+b,SAAS,EAAG,KACO,MAAxCgB,EAAYA,EAAY9R,OAAS,IACpC8R,EAAcA,EAAYjU,MAAM,GAAI,QAIzB,IAAd8G,IACLmN,EAAc,GAAG/c,IAAW+b,SAAS,EAAG,KAAKjT,MAAM,EAAG8G,IAW1D,OATImN,GACAN,EAAYO,QAAQ,IAAKD,GACxBla,EAAKoa,MAAML,EAAeha,MAAS6Z,EAAYxR,QAAwB,SAAd2E,GAC1D6M,EAAYO,QAAQ9b,IAAI0b,GAAexU,YAEvCqU,EAAYxR,QACZuR,EAAUjc,KAAK,GAAGkc,EAAY9M,KAAK,QACnC6M,EAAUvR,QACVuR,EAAUQ,QAAQ,KACjBT,EAAUtR,QAAWuR,EAAUvR,OAE7B,GAAG3J,EAAO,EAAI,IAAM,MAAMib,EAAU5M,KAAK,MAAM6M,EAAU7M,KAAK,MAD1D,OAGR,SAASuN,qBAAqB7J,EAAM7K,EAAe,QAMtD,MAAO,GALMkT,cAAc/c,QAAQ0U,EAAM/W,OAC3Bqf,sBAAsBhd,QAAQ0U,EAAM9W,OACtCof,sBAAsBhd,QAAQ0U,EAAM7W,MAE/B+L,yBADEnE,SAASzF,QAAQ0U,EAAMtW,IACYyL,KAGnD,SAAS2U,yBAAyB3C,EAAU5K,EAAWpH,EAAe,OAAQyF,GACjF,IAAItH,EAAOhI,QAAQ6b,EAAUle,GACzBsK,EAAQjI,QAAQ6b,EAAUje,GAC1BsK,EAAMlI,QAAQ6b,EAAUhe,GACxBsK,EAAOnI,QAAQ6b,EAAU/d,GACzBsK,EAASpI,QAAQ6b,EAAU9d,GAC3BsK,EAASrI,QAAQ6b,EAAU7d,GAC3BqM,EAAcrK,QAAQ6b,EAAU5d,GAChCqM,EAActK,QAAQ6b,EAAU3d,GAChCqM,EAAavK,QAAQ6b,EAAU1d,GACnC,GAAImR,EAAS,CACT,MAAM4B,KAAEA,EAAId,UAAEA,EAASR,aAAEA,GAAiBN,IACvCtH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAekU,iBAAiBzW,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY6F,EAAWc,EAAMtB,IAUxM,MAAO,GARYmN,cAAc/U,MACbgV,sBAAsB/U,MACxB+U,sBAAsB9U,MACrB8U,sBAAsB7U,MACpB6U,sBAAsB5U,KACrB8U,wBAAwB7U,EAAQgC,EAAaC,EAAaC,EAAY0G,KAE3ErH,yBADEnE,SAASzF,QAAQ6b,EAAUzd,IACQyL,KAGnD,SAAS6U,yBAAyBC,EAAU9U,EAAe,QAG9D,IAAI+U,EAAe,GAFL5B,sBAAsBhd,QAAQ2e,EAAU/gB,OAC1Cof,sBAAsBhd,QAAQ2e,EAAU9gB,MAEpD,MACM2C,EAAaiF,SADFzF,QAAQ2e,EAAUvgB,IAEnC,GAAqB,WAAjByL,GAA4C,YAAfrJ,EAA0B,CAEvDoe,EAAe,GADF7B,cAAc/c,QAAQ2e,EAAUhhB,OACnBihB,IAE9B,MAAMC,EAAiBjV,yBAAyBpJ,EAAYqJ,GAG5D,OAFIgV,IACAD,GAAgBC,GACbD,EAEJ,SAASE,0BAA0BC,EAAWlV,EAAe,QAGhE,IAAI+U,EAAe,GAFN7B,cAAc/c,QAAQ+e,EAAWphB,OAChCqf,sBAAsBhd,QAAQ+e,EAAWnhB,MAEvD,MACM4C,EAAaiF,SADFzF,QAAQ+e,EAAW3gB,IAEpC,GAAqB,WAAjByL,GAA4C,YAAfrJ,EAA0B,CAEvDoe,GAAgB,IADJ5B,sBAAsBhd,QAAQ+e,EAAWlhB,MAGzD,MAAMghB,EAAiBjV,yBAAyBpJ,EAAYqJ,GAG5D,OAFIgV,IACAD,GAAgBC,GACbD,EAEJ,SAASI,8BAA8BC,EAAKhO,EAAWpH,EAAe,OAAQqV,EAAe,OAAQC,EAAa,OAAQ7P,GAC7H,IAAIgJ,EAAUtY,QAAQif,EAAK5gB,GAC3B,GAAIiR,EAAS,CACT,MAAM4B,KAAEA,EAAId,UAAEA,EAASR,aAAEA,GAAiBN,EACpC0F,EAAKoK,aAAapf,QAAQif,EAAKxhB,GAAmB2S,EAAWc,EAAMtB,GAEzE0I,EAAU,IADc/a,aAAa,sBAC3B,CAAoByX,GAElC,MAAMqK,EAAKrf,QAAQif,EAAK3gB,GAElBud,EAAWtH,mCAAmC8K,EAAI/G,EAD5CzF,sBAQZ,IAAInJ,EAAS,GANAqT,cAAc/c,QAAQ6b,EAAUle,OAC/Bqf,sBAAsBhd,QAAQ6b,EAAUje,OAC1Cof,sBAAsBhd,QAAQ6b,EAAUhe,OACvCmf,sBAAsBhd,QAAQ6b,EAAU/d,OACtCkf,sBAAsBhd,QAAQ6b,EAAU9d,MACvCmf,wBAAwBld,QAAQ6b,EAAU7d,GAAagC,QAAQ6b,EAAU5d,GAAkB+B,QAAQ6b,EAAU3d,GAAkB8B,QAAQ6b,EAAU1d,GAAiB8S,KAElL,GAAmB,UAAfkO,EAAwB,CAExBzV,GAAU6T,8BADO/G,wBAAwB6I,EAAI/G,IAG5B,UAAjB4G,IACAxV,GAAU,IAAI2V,MAGlB,OADA3V,GAAUE,yBADSnE,SAASzF,QAAQif,EAAK7gB,IACMyL,GACxCH,EAEJ,SAAS4V,yBAAyBC,GACrC,OAAOC,GAAO9J,KAAKtS,GAAWmc,IAE3B,SAAS5R,0BAA0B4R,GACtC,MAAMxV,EAAQyV,GAAOvV,KAAK7G,GAAWmc,IACrC,IAAKxV,EACD,MAAM,IAAIpE,WAAW,6BAA6B4Z,KAOtD,OAL0B,MAAbxV,EAAM,IAA2B,MAAbA,EAAM,IAAmB,EAAI,IAKL,KAAhB,IAAhB,IAJVA,EAAM,MACHA,EAAM,IAAM,OACZA,EAAM,IAAM,QACPA,EAAM,IAAM,GAAK,aAAaI,MAAM,EAAG,IAG3D,SAASX,+BAA+B7B,GAC3C,GAAI2X,yBAAyB3X,GAAqB,CAE9C,OAAOkP,2BADUlJ,0BAA0BhG,IAI/C,OADkBD,qCAAqCtE,GAAWuE,IACjD8X,kBAAkB5X,SAEhC,SAAS6X,iCAAiCtH,EAAkBrY,GAC/D,MAAMiI,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAeoV,6BAA6BvH,EAAkBrY,GAClI6f,EAAM9R,qBAAqB9F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GACnG,GAAY,OAARqV,EACA,MAAM,IAAIja,WAAW,mCACzB,OAAOzB,EAAKwS,SAASxS,EAAKiS,SAASyJ,EAAKxH,IAE5C,SAASvB,2BAA2BgJ,GAChC,MAAMld,EAAOkd,EAAyB,EAAI,IAAM,IAC1CC,EAAoBxd,EAAQud,GAC5BxT,EAAcyT,EAAoB,IAClC7T,EAAUzJ,EAAUsd,EAAoB,KAAO,GAC/C/T,EAAUvJ,EAAUsd,EAAoB,MAAQ,GAEhDC,EAAa/C,sBADLxa,EAAUsd,EAAoB,QAEtCE,EAAehD,sBAAsBjR,GACrCkU,EAAejD,sBAAsB/Q,GAC3C,IAAIiU,EAAO,GACX,GAAI7T,EAAa,CACb,IAAIhL,EAAW,GAAGgL,IAAc+Q,SAAS,EAAG,KAC5C,KAAyC,MAAlC/b,EAASA,EAASiL,OAAS,IAC9BjL,EAAWA,EAAS8I,MAAM,GAAI,GAClC+V,EAAO,IAAID,KAAgB5e,SAEtB4K,IACLiU,EAAO,IAAID,KAEf,MAAO,GAAGtd,IAAOod,KAAcC,IAAeE,IAElD,SAAS3C,8BAA8BsC,GACnC,IAAIC,EAAoB5b,EAAKwS,SAASC,uBAAuBzS,EAAKC,OAAO0b,GAAyB,KAAM,eACxG,MAAMld,EAAOmd,EAAoB,EAAI,IAAM,IAC3CA,EAAoBxd,EAAQwd,GAC5B,MAAM/T,EAAW+T,EAAoB,KAAQ,GAI7C,MAAO,GAAGnd,IAFSqa,sBADLxa,EAAUsd,EAAoB,WAEvB9C,sBAAsBjR,KAGxC,SAAS+B,qBAAqB9F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAGnG,MAAM4V,EAAa,IAAIC,KACvBD,EAAWE,YAAYlY,EAAMC,EAAQC,EAAQgC,GAC7C8V,EAAWG,eAAetY,EAAMC,EAAQ,EAAGC,GAC3C,MAAMwP,EAAKyI,EAAWI,UACtB,GAAIzd,GAAY4U,GACZ,OAAO,KACX,IAAI1C,EAAK9Q,EAAKS,SAAST,EAAKC,OAAOuT,GAAKnT,IAGxC,OAFAyQ,EAAK9Q,EAAKqY,IAAIvH,EAAI9Q,EAAKS,SAAST,EAAKC,OAAOmG,GAAchG,KAC1D0Q,EAAK9Q,EAAKqY,IAAIvH,EAAI9Q,EAAKC,OAAOoG,IAC1BrG,EAAKoC,SAAS0O,EAAIpQ,KAAWV,EAAKsc,YAAYxL,EAAInQ,IAC3C,KACJmQ,EAEX,SAASiH,qBAAqB7D,GAC1B,MAAMjS,SAAEA,EAAQE,UAAEA,GAAcL,OAAOoS,EAAkB7T,IACzD,IAAIkc,EAAoBvc,EAAKwS,SAASvQ,GAClCua,EAAQxc,EAAKwS,SAASrQ,GACtBqa,EAAQ,IACRA,GAAS,IACTD,GAAqB,GAEzB,MAAMnW,EAAc9H,EAAUke,EAAQ,KAAO,IACvCnW,EAAamW,EAAQ,IACrBnY,EAAO,IAAI6X,KAAKK,GAQtB,MAAO,CAAEA,kBAAAA,EAAmBzY,KAPfO,EAAKoY,iBAOgB1Y,MANpBM,EAAKqY,cAAgB,EAMM1Y,IAL7BK,EAAKsY,aAK6B1Y,KAJjCI,EAAKuY,cAIkC1Y,OAHrCG,EAAKwY,gBAGwC1Y,OAF7CE,EAAKyY,gBAEgD3W,YADhD9B,EAAK0Y,qBACwD3W,YAAAA,EAAaC,WAAAA,GAG3F,SAASoV,6BAA6BvH,EAAkBrY,GAC3D,MAAM0gB,kBAAEA,EAAiBpW,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAe0R,qBAAqB7D,IACnFpQ,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,GAmIrC,SAAS6Y,kBAAkBrZ,EAAU4Y,GACxC,MAAMU,EAAYzZ,qCAAqCG,GAGvD,OArCG,SAASuZ,oBAAoBC,GAChC,MAAMC,EAAQD,EAASE,MAAM,UAC7B,GAAqB,IAAjBD,EAAMhV,OACN,MAAM,IAAI3G,WAAW,wBAAwB0b,KAEjD,MAAMpZ,GAASqZ,EAAM,GACfpZ,GAAOoZ,EAAM,GACnB,IAAItZ,GAAQsZ,EAAM,GAClB,MAAMvZ,EAAMuZ,EAAM,GAAGE,cACrB,GAAY,MAARzZ,GAAuB,OAARA,EACfC,EAAe,EAAPA,OAEP,GAAY,MAARD,GAAuB,OAARA,EACpB,MAAM,IAAIpC,WAAW,eAAeoC,SAAWsZ,KAEnD,IAAIlZ,GAAQmZ,EAAM,GACL,KAATnZ,IAEAA,EAAO,GAEX,MAAMC,GAAUkZ,EAAM,GAChBjZ,GAAUiZ,EAAM,GACtB,KAAKre,GAAe+E,IACf/E,GAAegF,IACfhF,GAAeiF,IACfjF,GAAekF,IACflF,GAAemF,IACfnF,GAAeoF,IAChB,MAAM,IAAI1C,WAAW,sBAAsB0b,KAE/C,MAAO,CAAErZ,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,GAOlC+Y,CADUD,EAAUM,OAAO,IAAIrB,KAAKK,KAtIQS,CAAkBnhB,EAAI0gB,GACzE,OAAO7S,mBAAmB5F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAEhG,SAASmX,QAAQxG,EAAKC,GAClB,OAAOjX,EAAKoC,SAAS4U,EAAKC,GAAOA,EAAMD,EAQ3C,SAASyG,oCACL,OAAOzd,EAAKqY,IAAIqF,KAA6B7c,IAqC1C,SAAS8c,kCAAkCzJ,EAAkBrY,GAgBhE,MAAM+hB,EAAkBH,oCAClBI,EAAc7d,EAAKsc,YAAYpI,EAAkB0J,GACjDE,EAAWD,EAAc7d,EAAKiS,SAASiC,EAAkBpT,IAAwBF,GACvF,IAAImd,EAAa/d,EAAKiS,SAASiC,EAAkBhU,IACjD,MAAM8d,EAAgBxC,iCAAiCuC,EAAYliB,GACnE,IAAIoiB,EAAYF,EACZG,EAAeF,EACnB,KAAOA,IAAkBE,GAAgBle,EAAKsc,YAAYyB,EAAYD,IAClEG,EAAYje,EAAKiS,SAAS8L,EAAYhd,IACtCmd,EAAe1C,iCAAiCyC,EAAWpiB,GACvDmiB,IAAkBE,IAClBH,EAAaE,GAGrB,GAAID,IAAkBE,EAAc,CAChC,GAAIL,EAAa,CASb,OAAOF,kCADgB3d,EAAKiS,SAAS2L,EAAiBpd,IACG3E,GAE7D,OAAO,KAGX,OADesiB,QAAQxU,GAAY6R,iCAAiC7R,EAAS9N,IAAKoiB,EAAWF,EAAYG,EAAcF,GA2EpH,SAASI,SAASta,GACrB,QAAI3K,IAAc2K,EACd,OAAO,EAIX,OAHeA,EAAO,GAAM,MACXA,EAAO,KAAQ,IACfA,EAAO,KAAQ,GAG7B,SAASua,eAAeva,EAAMC,GAKjC,MAJY,CACRua,SAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACvDC,SAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAEhDH,SAASta,GAAQ,WAAa,YAAYC,EAAQ,GAE1D,SAASya,UAAU1a,EAAMC,EAAOC,GACnC,MAAMya,EAAI1a,GAASA,EAAQ,EAAI,IAAM,GAC/B2a,EAAI5a,GAAQC,EAAQ,EAAI,EAAI,GAC5B8I,EAAIvO,EAAUogB,EAAI,KAClB1c,EAAI0c,EAAQ,IAAJ7R,EAMR8R,GALI3a,EAEC1F,EAAU,IAAMmgB,EAAI,KACpBzc,EAAI1D,EAAU0D,EAAI,KAClB1D,EAAUuO,EAAI,GAAK,EAAIA,IACA,EAClC,OAAO8R,GAAOA,GAAO,EAAI,EAAI,GAE1B,SAASC,UAAU9a,EAAMC,EAAOC,GACnC,IAAI0D,EAAO1D,EACX,IAAK,IAAIya,EAAI1a,EAAQ,EAAG0a,EAAI,EAAGA,IAC3B/W,GAAQ2W,eAAeva,EAAM2a,GAEjC,OAAO/W,EAsBJ,SAAS8R,aAAaxX,EAAG6c,EAAKC,EAAGC,EAAGxL,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAC1D,IAAK,MAAMjY,IAAQ,CAACmJ,EAAG6c,EAAKC,EAAGC,EAAGxL,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GACjD,GAAa,IAATjY,EACA,OAAOA,EAAO,GAAK,EAAI,EAE/B,OAAO,EAEX,SAASmmB,oBAAoBlV,EAAWC,GACpC,IAAIjG,EAAOgG,EACP/F,EAAQgG,EACZ,IAAKhL,GAAe+E,KAAU/E,GAAegF,GACzC,MAAM,IAAItC,WAAW,4BAOzB,OANAsC,GAAS,EACTD,GAAQxF,EAAUyF,EAAQ,IAC1BA,GAAS,GACLA,EAAQ,IACRA,GAAS,IACbA,GAAS,EACF,CAAED,KAAAA,EAAMC,MAAAA,GAEnB,SAASkb,eAAenV,EAAWC,EAAYC,GAC3C,IAAIlG,EAAOgG,EACP/F,EAAQgG,EACR/F,EAAMgG,EACV,IAAKjL,GAAeiF,GAChB,MAAM,IAAIvC,WAAW,8BACtBqC,KAAAA,EAAMC,MAAAA,GAAUib,oBAAoBlb,EAAMC,IAC7C,IAAIsS,EAAa,EACb6I,EAAWnb,EAAQ,EAAID,EAAOA,EAAO,EACzC,KAASuS,EAAa+H,SAASc,GAAY,IAAM,IAAMlb,GAAOqS,GAC1DvS,GAAQ,EACRob,GAAY,EACZlb,GAAOqS,EAGX,IADA6I,GAAY,EACH7I,EAAa+H,SAASc,GAAY,IAAM,IAAMlb,EAAMqS,GACzDvS,GAAQ,EACRob,GAAY,EACZlb,GAAOqS,EAEX,KAAOrS,EAAM,KACNF,KAAAA,EAAMC,MAAAA,GAAUib,oBAAoBlb,EAAMC,EAAQ,IACrDC,GAAOqa,eAAeva,EAAMC,GAEhC,KAAOC,EAAMqa,eAAeva,EAAMC,IAC9BC,GAAOqa,eAAeva,EAAMC,KACzBD,KAAAA,EAAMC,MAAAA,GAAUib,oBAAoBlb,EAAMC,EAAQ,IAEzD,MAAO,CAAED,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAE1B,SAAS0F,mBAAmBI,EAAWC,EAAYC,EAAUK,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,GAClI,MAAMyU,UAAEA,EAASlb,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAe+Y,YAAY/U,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,IACjK5G,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQib,eAAenV,EAAWC,EAAYC,EAAWmV,GAC9E,MAAO,CAAErb,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAE/E,SAAS+Y,YAAY/U,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,GAC1F,IAAIzG,EAAOoG,EACPnG,EAASoG,EACTnG,EAASoG,EACTpE,EAAcqE,EACdpE,EAAcqE,EACdpE,EAAaqE,EACjB,KAAK3L,GAAekF,IACflF,GAAemF,IACfnF,GAAeoF,IACfpF,GAAeoH,IACfpH,GAAeqH,IACfrH,GAAesH,IAChB,MAAM,IAAI5E,WAAW,4BAEzB2E,GAAe9H,EAAU+H,EAAa,KACtCA,EAAagZ,kBAAkBhZ,EAAY,KAC3CF,GAAe7H,EAAU8H,EAAc,KACvCA,EAAciZ,kBAAkBjZ,EAAa,KAC7CjC,GAAU7F,EAAU6H,EAAc,KAClCA,EAAckZ,kBAAkBlZ,EAAa,KAC7CjC,GAAU5F,EAAU6F,EAAS,IAC7BA,EAASkb,kBAAkBlb,EAAQ,IACnCF,GAAQ3F,EAAU4F,EAAS,IAC3BA,EAASmb,kBAAkBnb,EAAQ,IACnC,MAAMib,EAAY7gB,EAAU2F,EAAO,IAEnC,OADAA,EAAOob,kBAAkBpb,EAAM,IACxB,CAAEkb,UAAAA,EAAWlb,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAEjE,SAAS4T,yBAAyBqF,EAAWC,EAAYhX,EAAcE,EAAcC,EAAmBC,EAAmBC,EAAkB4W,GAChJ,MAAM9X,EAAO1H,EAAKC,OAAOqf,GACzB,IAAInX,EAAcnI,EAAKC,OAAO2I,GACZ,IAAd0W,IACAnX,EAAcnI,EAAKiS,SAASjS,EAAKC,OAAO2I,GAAmB5I,EAAKC,OAAOuf,KAC3E,MAAM7X,EAAQ3H,EAAKqY,IAAIrY,EAAKC,OAAOsf,GAAavf,EAAKS,SAASiH,EAAM1H,EAAKC,OAAO,MAC1E4H,EAAU7H,EAAKqY,IAAIrY,EAAKC,OAAOsI,GAAevI,EAAKS,SAASkH,EAAOxH,KACnE4H,EAAU/H,EAAKqY,IAAIrY,EAAKC,OAAOwI,GAAezI,EAAKS,SAASoH,EAAS1H,KACrE8H,EAAejI,EAAKqY,IAAIrY,EAAKC,OAAOyI,GAAoB1I,EAAKS,SAASsH,EAAS3H,KAC/E8H,EAAelI,EAAKqY,IAAIrY,EAAKC,OAAO0I,GAAoB3I,EAAKS,SAASwH,EAAc7H,KAC1F,OAAOJ,EAAKqY,IAAIrY,EAAKC,OAAOkI,GAAcnI,EAAKS,SAASyH,EAAc9H,KAE1E,SAASqf,kBAAkB7W,EAAkBqF,GACzC,MAAMyR,EAAkBrmB,aAAa,sBAC/BoF,EAAOD,GAASwB,EAAKwS,SAAS5J,IACpC,IAAIT,EAAcnI,EAAKC,OAAO2I,GAC1B+W,EAAc,OAClB,GAAa,IAATlhB,EACA,MAAO,CAAEiJ,KAAM,EAAGS,YAAapI,GAAM4f,YAAAA,GACzC,IAAK7a,wBAAwBmJ,GAAa,CACtC,IAAIvG,EAEJ,QADGzF,SAAUyF,EAAMvF,UAAWgG,GAAgBrG,OAAOqG,EAAanI,EAAKC,OAAO0f,KACvE,CAAEjY,KAAM1H,EAAKwS,SAAS9K,GAAOS,YAAAA,EAAawX,YAAAA,GAErD,MAAMC,EAAU9jB,QAAQmS,EAAY1U,GAC9BsmB,EAAQ/jB,QAAQmS,EAAY9T,GAC5B2lB,EAAQ9f,EAAKqY,IAAIuH,EAASzX,GAC1B4X,EAAM,IAAIL,EAAgBI,GAC1Bnc,EAAW7H,QAAQmS,EAAY7T,GAC/B0C,EAAWhB,QAAQmS,EAAY/T,GAE/B8lB,EAAU3P,mCAAmC1M,EAAUkc,EAAO/iB,GAC9DmjB,EAAQ5P,mCAAmC1M,EAAUoc,EAAKjjB,GAChE,IAAI4K,KAAEA,GAASwY,sBAAsBpkB,QAAQkkB,EAASvmB,GAAWqC,QAAQkkB,EAAStmB,GAAYoC,QAAQkkB,EAASrmB,GAAUmC,QAAQkkB,EAASpmB,GAAWkC,QAAQkkB,EAASnmB,GAAaiC,QAAQkkB,EAASlmB,GAAagC,QAAQkkB,EAASjmB,GAAkB+B,QAAQkkB,EAAShmB,GAAkB8B,QAAQkkB,EAAS/lB,GAAiB6B,QAAQmkB,EAAOxmB,GAAWqC,QAAQmkB,EAAOvmB,GAAYoC,QAAQmkB,EAAOtmB,GAAUmC,QAAQmkB,EAAOrmB,GAAWkC,QAAQmkB,EAAOpmB,GAAaiC,QAAQmkB,EAAOnmB,GAAagC,QAAQmkB,EAAOlmB,GAAkB+B,QAAQmkB,EAAOjmB,GAAkB8B,QAAQmkB,EAAOhmB,GAAiB6C,EAAU,MAAO0C,GAAa,OACrlB2gB,EAAiBC,iBAAiBP,EAAOlc,EAAU7G,EAAU,EAAG,EAAG,EAAG4K,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAU/F,GAAa,IAATjJ,EACA,KAAOiJ,EAAO,GAAK1H,EAAKsc,YAAY6D,EAAgBL,MAC9CpY,EACFyY,EAAiBC,iBAAiBP,EAAOlc,EAAU7G,EAAU,EAAG,EAAG,EAAG4K,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAInGS,EAAcnI,EAAKiS,SAAS6N,EAAOK,GACnC,IAAIE,GAAa,EACbC,EAAkB,IAAIZ,EAAgBS,GAC1C,EAAG,CAEC,MAAMI,EAAkBH,iBAAiBE,EAAiB3c,EAAU7G,EAAU,EAAG,EAAG,EAAG2B,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACtG+hB,EAAa1kB,QAAQwkB,EAAiB/mB,GAC5ComB,EAAc3f,EAAKwS,SAASxS,EAAKiS,SAASsO,EAAiBC,IAC3DH,EAAargB,EAAKsc,YAAYtc,EAAKS,SAAST,EAAKiS,SAAS9J,EAAanI,EAAKC,OAAO0f,IAAe3f,EAAKC,OAAOxB,IAAQsB,IAClHsgB,IACAlY,EAAcnI,EAAKiS,SAAS9J,EAAanI,EAAKC,OAAO0f,IACrDW,EAAkB,IAAIZ,EAAgBa,GACtC7Y,GAAQjJ,SAEP4hB,GACT,MAAO,CAAE3Y,KAAAA,EAAMS,YAAAA,EAAawX,YAAavhB,EAAQuhB,IAE9C,SAASc,gBAAgBnB,EAAWC,EAAYhX,EAAcE,EAAcC,EAAmBC,EAAmBC,EAAkB6G,EAAaxB,GACpJ,IACIyS,EAAmBC,EAAoBC,EAAoB7G,EAAe8G,EAAeC,EADzFpZ,EAAO4X,EAEX,GAAIxa,wBAAwBmJ,GAAa,CACrC,MAAM6R,EAAQM,iBAAiBtkB,QAAQmS,EAAY9T,GAAU2B,QAAQmS,EAAY7T,GAAY0B,QAAQmS,EAAY/T,GAAW,EAAG,EAAG,EAAGwN,EAAM6X,EAAYhX,EAAcE,EAAcC,EAAmBC,EAAmBC,GACnNgX,EAAU9jB,QAAQmS,EAAY1U,GACpCmnB,EAAoB1gB,EAAKiS,SAAS6N,EAAOF,QAGzCc,EAAoBzG,yBAAyBvS,EAAM6X,EAAYhX,EAAcE,EAAcC,EAAmBC,EAAmBC,EAAkB,GAEnI,SAAhB6G,GAA0C,UAAhBA,GAA2C,SAAhBA,GAA0C,QAAhBA,IAC5E/H,KAAAA,EAAMS,YAAauY,GAAsBjB,kBAAkBiB,EAAmBzS,IAGjFvG,EAAO,EAEX,MAAMjJ,EAAOuB,EAAKoC,SAASse,EAAmB3gB,KAAS,EAAI,EAG3D,OAFA2gB,EAAoBriB,IAAIqiB,GACxBC,EAAqBC,EAAqB7G,EAAgB8G,EAAgBC,EAAc/gB,GAChF0P,GACJ,IAAK,OACL,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,SACExN,SAAU0e,EAAoBxe,UAAWue,GAAsB5e,OAAO4e,EAAmBtgB,OACzF6B,SAAU2e,EAAoBze,UAAWwe,GAAuB7e,OAAO6e,EAAoBvgB,OAC3F6B,SAAU8X,EAAe5X,UAAWye,GAAuB9e,OAAO8e,EAAoBxgB,OACtF6B,SAAU4e,EAAe1e,UAAW4X,GAAkBjY,OAAOiY,EAAe5Z,OAC5E8B,SAAU6e,EAAa3e,UAAW0e,GAAkB/e,OAAO+e,EAAe1gB,KAC7E,MACJ,IAAK,WACE8B,SAAU0e,EAAoBxe,UAAWue,GAAsB5e,OAAO4e,EAAmBtgB,OACzF6B,SAAU2e,EAAoBze,UAAWwe,GAAuB7e,OAAO6e,EAAoBvgB,OAC3F6B,SAAU8X,EAAe5X,UAAWye,GAAuB9e,OAAO8e,EAAoBxgB,OACtF6B,SAAU4e,EAAe1e,UAAW4X,GAAkBjY,OAAOiY,EAAe5Z,KAC/E,MACJ,IAAK,WACE8B,SAAU0e,EAAoBxe,UAAWue,GAAsB5e,OAAO4e,EAAmBtgB,OACzF6B,SAAU2e,EAAoBze,UAAWwe,GAAuB7e,OAAO6e,EAAoBvgB,OAC3F6B,SAAU8X,EAAe5X,UAAWye,GAAuB9e,OAAO8e,EAAoBxgB,KACzF,MACJ,IAAK,gBACE6B,SAAU0e,EAAoBxe,UAAWue,GAAsB5e,OAAO4e,EAAmBtgB,OACzF6B,SAAU2e,EAAoBze,UAAWwe,GAAuB7e,OAAO6e,EAAoBvgB,KAC9F,MACJ,IAAK,gBACE6B,SAAU0e,EAAoBxe,UAAWue,GAAsB5e,OAAO4e,EAAmBtgB,KAC5F,MACJ,IAAK,aACD,MACJ,QACI,MAAM,IAAIhH,MAAM,sBAQxB,MAAO,CAAEsO,KAAAA,EAAMC,MAND3H,EAAKwS,SAASsO,GAAeriB,EAMrBoJ,QALN7H,EAAKwS,SAASqO,GAAiBpiB,EAKhBsJ,QAJf/H,EAAKwS,SAASuH,GAAiBtb,EAIPwJ,aAHnBjI,EAAKwS,SAASoO,GAAsBniB,EAGHyJ,aAFjClI,EAAKwS,SAASmO,GAAsBliB,EAEW0J,YADhDnI,EAAKwS,SAASkO,GAAqBjiB,GAGpD,SAASsiB,0BAA0BC,EAAYC,EAAaC,EAAY5B,EAAW7P,EAAa0R,GACnG,IAAI5Z,EAAQyZ,EACRxZ,EAASyZ,EACTxZ,EAAQyZ,EACRxZ,EAAO4X,EACX,MAAM8B,EAAmB/nB,aAAa,uBAChCoF,EAAO+a,aAAajS,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACrE,IAAI5K,EACAmR,EACAkT,IACAlT,EAAakC,eAAegR,GAC5BrkB,EAAWhB,QAAQmS,EAAY/T,IAEnC,MAAMmnB,EAAU,IAAID,EAAiB3iB,GAC/B6iB,EAAW,IAAIF,EAAiB,EAAG3iB,GACnC8iB,EAAU,IAAIH,EAAiB,EAAG,EAAG3iB,GAC3C,OAAQgR,GACJ,IAAK,OAED,MACJ,IAAK,QACD,CACI,IAAK3S,EACD,MAAM,IAAI2E,WAAW,qDAEzB,MAAMqT,EAAUhY,EAASgY,QACnBI,EAAYpY,EAASoY,UAC3B,IAAIsM,EAAqBvT,EACzB,KAAO7P,EAAQmJ,GAAS,GAAG,CACvB,MAAMka,EAAgB7M,gBAAgB9X,EAAU0kB,EAAoBH,OAASloB,EAAW2b,GAClF4M,EAAeliB,GAAa,MAClCkiB,EAAajS,YAAc,QAC3B,MACMkS,EAAgB7lB,QADFiZ,kBAAkBjY,EAAU0kB,EAAoBC,EAAeC,EAAcxM,GACtD5a,GAC3CknB,EAAqBC,EACrBja,GAAUma,EACVpa,GAAS9I,GAGjB,MACJ,IAAK,OACD,IAAK3B,EACD,MAAM,IAAI2E,WAAW,oDAEzB,KAAOrD,EAAQmJ,GAAS,GAAG,CACvB,IAAIqa,IACD3T,WAAAA,EAAYvG,KAAMka,GAAgBC,iBAAiB/kB,EAAUmR,EAAYoT,IAC5E3Z,GAAQka,EACRra,GAAS9I,EAGb,KAAOL,EAAQoJ,GAAU,GAAG,CACxB,IAAIsa,IACD7T,WAAAA,EAAYvG,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IAC7E5Z,GAAQoa,EACRta,GAAU/I,EAEd,MACJ,QAEI,KAAOL,EAAQmJ,GAAS,GAAG,CACvB,IAAKzK,EACD,MAAM,IAAI2E,WAAW,6DACzB,IAAImgB,IACD3T,WAAAA,EAAYvG,KAAMka,GAAgBC,iBAAiB/kB,EAAUmR,EAAYoT,IAC5E3Z,GAAQka,EACRra,GAAS9I,EAGb,KAAOL,EAAQoJ,GAAU,GAAG,CACxB,IAAK1K,EACD,MAAM,IAAI2E,WAAW,6DACzB,IAAIqgB,IACD7T,WAAAA,EAAYvG,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IAC7E5Z,GAAQoa,EACRta,GAAU/I,EAGd,KAAOL,EAAQqJ,GAAS,GAAG,CACvB,IAAK3K,EACD,MAAM,IAAI2E,WAAW,6DACzB,IAAIsgB,IACD9T,WAAAA,EAAYvG,KAAMqa,GAAgBF,iBAAiB/kB,EAAUmR,EAAYsT,IAC5E7Z,GAAQqa,EACRta,GAAShJ,GAIrB,MAAO,CAAE8I,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAgG5B,SAASsa,qBAAqB/T,EAAYjM,EAAG6c,EAAKC,EAAGC,GACxD,GAAIja,wBAAwBmJ,GAAa,CACrC,MAAMmG,EAAUtY,QAAQmS,EAAY9T,GAC9BwJ,EAAW7H,QAAQmS,EAAY7T,GAC/B0C,EAAWhB,QAAQmS,EAAY/T,GAC/Boe,EAAehG,wBAAwB3O,EAAUyQ,GACjD6N,EAAQ7B,iBAAiBhM,EAASzQ,EAAU7G,EAAUkF,EAAG6c,EAAKC,EAAGC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAIzF,OADoBzM,wBAAwB3O,EADvB,IADGtK,aAAa,sBAChB,CAAoB4oB,IAEpB3J,EAEzB,OAAO,EAEJ,SAAS4J,8BAA8B7kB,GAE1C,OAAO,IADkBhE,aAAa,uBAC/B,EAAsByC,QAAQuB,EAAUhD,IAASyB,QAAQuB,EAAU/C,IAAUwB,QAAQuB,EAAU9C,IAASuB,QAAQuB,EAAU7C,IAAQsB,QAAQuB,EAAU5C,IAASqB,QAAQuB,EAAU3C,IAAWoB,QAAQuB,EAAU1C,IAAWmB,QAAQuB,EAAUzC,IAAgBkB,QAAQuB,EAAUxC,IAAgBiB,QAAQuB,EAAUvC,IAEjT,SAAS+P,iBAAiBpS,EAAOwF,EAAKE,GAGzC,OAAOJ,EAAQI,EAAKD,EAAQD,EAAKxF,IAErC,SAAS0R,iBAAiBrG,EAAMiG,EAAYC,GACxC,MAAMjG,EAAQ8G,iBAAiBd,EAAY,EAAG,IAE9C,MAAO,CAAEjG,KAAAA,EAAMC,MAAAA,EAAOC,IADV6G,iBAAiBb,EAAU,EAAGqU,eAAeva,EAAMC,KAY5D,SAASgQ,cAActb,EAAOwF,EAAKE,GACtC,GAAI1F,EAAQwF,GAAOxF,EAAQ0F,EACvB,MAAM,IAAIsD,WAAW,uBAAuBxD,QAAUxF,QAAY0F,KAE1E,SAAS+L,cAAcpG,EAAMC,EAAOC,GAChC+P,cAAchQ,EAAO,EAAG,IACxBgQ,cAAc/P,EAAK,EAAGqa,eAAeva,EAAMC,IAE/C,SAASqP,gBAAgBtP,EAAMC,EAAOC,GAElCyP,oBAAoB3P,EAAMC,EAAOC,EAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAEnD,SAAS2G,WAAW1G,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GACvE0N,cAAc9P,EAAM,EAAG,IACvB8P,cAAc7P,EAAQ,EAAG,IACzB6P,cAAc5P,EAAQ,EAAG,IACzB4P,cAAc5N,EAAa,EAAG,KAC9B4N,cAAc3N,EAAa,EAAG,KAC9B2N,cAAc1N,EAAY,EAAG,KAEjC,SAASO,eAAe9C,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GACtF6D,cAAcpG,EAAMC,EAAOC,GAC3B2G,WAAW1G,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAE/D,SAASoN,oBAAoB3P,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAG3F,GAFA0N,cAAcjQ,GAtoFD,OACA,SADA,SAwoFRA,GACD,MACI8F,qBAAqB9F,EAAMC,EAAOC,EAAM,EAAGC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAa,IAzoFnG,SA0oFRvC,GACG,MACI8F,qBAAqB9F,EAAMC,EAAOC,EAAM,EAAGC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAa,GAChH,MAAM,IAAI5E,WAAW,uCAGtB,SAAS0S,yBAAyBD,GACrC,GAAIlU,EAAKoC,SAAS8R,EAAkBxT,KAAWV,EAAKsc,YAAYpI,EAAkBvT,IAC9E,MAAM,IAAIc,WAAW,sCAYtB,SAAS4H,eAAerH,EAAG6c,EAAKC,EAAGC,EAAGxL,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAC5D,MAAMrS,EAAO+a,aAAaxX,EAAG6c,EAAKC,EAAGC,EAAGxL,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAC3D,IAAK,MAAMjY,IAAQ,CAACmJ,EAAG6c,EAAKC,EAAGC,EAAGxL,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAAK,CACtD,IAAK/R,GAAelG,GAChB,MAAM,IAAI4I,WAAW,kDACzB,MAAM0gB,EAAW3jB,GAAS3F,GAC1B,GAAiB,IAAbspB,GAAkBA,IAAa1jB,EAC/B,MAAM,IAAIgD,WAAW,qDAG1B,SAAS2gB,kBAAkBC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIjT,GACtD,OAAQA,GACJ,IAAK,OACL,IAAK,QAAS,CACV,MAAMhR,GAAQkkB,eAAeN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACjD,GAAa,IAATjkB,EACA,MAAO,CAAE8I,MAAO,EAAGC,OAAQ,EAAGC,MAAO,EAAGC,KAAM,GAClD,MAAMmY,EAAQ,CAAE/b,KAAMue,EAAIte,MAAOue,EAAIte,IAAKue,GACpCxC,EAAM,CAAEjc,KAAM0e,EAAIze,MAAO0e,EAAIze,IAAK0e,GACxC,IAAInb,EAAQwY,EAAIjc,KAAO+b,EAAM/b,KACzB8e,EAAMC,WAAWR,EAAIC,EAAIC,EAAIhb,EAAO,EAAG,EAAG,EAAG,aAC7Cub,GAAWH,eAAeC,EAAI9e,KAAM8e,EAAI7e,MAAO6e,EAAI5e,IAAKwe,EAAIC,EAAIC,GACpE,GAAgB,IAAZI,EACA,MAAuB,SAAhBrT,EACD,CAAElI,MAAAA,EAAOC,OAAQ,EAAGC,MAAO,EAAGC,KAAM,GACpC,CAAEH,MAAO,EAAGC,OAAgB,GAARD,EAAYE,MAAO,EAAGC,KAAM,GAE1D,IAAIF,EAASuY,EAAIhc,MAAQ8b,EAAM9b,MAO/B,GANI+e,IAAYrkB,IACZ8I,GAAS9I,EACT+I,GAAiB,GAAP/I,GAEdmkB,EAAMC,WAAWR,EAAIC,EAAIC,EAAIhb,EAAOC,EAAQ,EAAG,EAAG,aAClDsb,GAAWH,eAAeC,EAAI9e,KAAM8e,EAAI7e,MAAO6e,EAAI5e,IAAKwe,EAAIC,EAAIC,GAChD,IAAZI,EACA,MAAuB,SAAhBrT,EACD,CAAElI,MAAAA,EAAOC,OAAAA,EAAQC,MAAO,EAAGC,KAAM,GACjC,CAAEH,MAAO,EAAGC,OAAQA,EAAiB,GAARD,EAAYE,MAAO,EAAGC,KAAM,GAE/Dob,IAAYrkB,IAGZ+I,GAAU/I,EACN+I,KAAY/I,IACZ8I,GAAS9I,EACT+I,EAAS,GAAK/I,GAElBmkB,EAAMC,WAAWR,EAAIC,EAAIC,EAAIhb,EAAOC,EAAQ,EAAG,EAAG,cAEtD,IAAIE,EAAO,EAyBX,OAhBIA,EAFAkb,EAAI7e,QAAUgc,EAAIhc,MAEXgc,EAAI/b,IAAM4e,EAAI5e,IAEhBvF,EAAO,GAGJmkB,EAAI5e,KAAOqa,eAAe0B,EAAIjc,KAAMic,EAAIhc,OAASgc,EAAI/b,KAKtD+b,EAAI/b,KAAOqa,eAAeuE,EAAI9e,KAAM8e,EAAI7e,OAAS6e,EAAI5e,KAE5C,UAAhByL,IACAjI,GAAkB,GAARD,EACVA,EAAQ,GAEL,CAAEA,MAAAA,EAAOC,OAAAA,EAAQC,MAAO,EAAGC,KAAAA,GAEtC,IAAK,OACL,IAAK,MAAO,CACR,IAAIqb,EAAQC,EAASvkB,EACjBkkB,eAAeN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAAM,GACzCM,EAAU,CAAElf,KAAMue,EAAIte,MAAOue,EAAIte,IAAKue,GACtCQ,EAAS,CAAEjf,KAAM0e,EAAIze,MAAO0e,EAAIze,IAAK0e,GACrCjkB,EAAO,IAGPukB,EAAU,CAAElf,KAAM0e,EAAIze,MAAO0e,EAAIze,IAAK0e,GACtCK,EAAS,CAAEjf,KAAMue,EAAIte,MAAOue,EAAIte,IAAKue,GACrC9jB,GAAQ,GAEZ,IAAIiJ,EAAOkX,UAAUmE,EAAOjf,KAAMif,EAAOhf,MAAOgf,EAAO/e,KAAO4a,UAAUoE,EAAQlf,KAAMkf,EAAQjf,MAAOif,EAAQhf,KAC7G,IAAK,IAAIF,EAAOkf,EAAQlf,KAAMA,EAAOif,EAAOjf,OAAQA,EAChD4D,GAAQ0W,SAASta,GAAQ,IAAM,IAEnC,IAAI2D,EAAQ,EAOZ,MANoB,SAAhBgI,IACAhI,EAAQnJ,EAAUoJ,EAAO,GACzBA,GAAQ,GAEZD,GAAShJ,EACTiJ,GAAQjJ,EACD,CAAE8I,MAAO,EAAGC,OAAQ,EAAGC,MAAAA,EAAOC,KAAAA,GAEzC,QACI,MAAM,IAAItO,MAAM,uBAG5B,SAAS6pB,eAAeC,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAKC,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,GACzE,IAAIhc,EAAQ4b,EAAKL,EACbrb,EAAU2b,EAAOL,EACjBpb,EAAU0b,EAAKL,EACfnb,EAAeyb,EAAML,EACrBnb,EAAe,EAAM,EACrBC,EAAcwb,EAAML,EACxB,MAAM7kB,EAAO+a,aAAa,EAAG,EAAG,EAAG,EAAG7R,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAC3FR,GAASlJ,EACToJ,GAAWpJ,EACXsJ,GAAWtJ,EACXwJ,GAAgBxJ,EAChByJ,GAAgBzJ,EAChB0J,GAAe1J,EACf,IAAI0gB,EAAY,EAUhB,KARIA,UAAAA,EACAlb,KAAM0D,EACNzD,OAAQ2D,EACR1D,OAAQ4D,EACR5B,YAAa8B,EACb7B,YAAa8B,EACb7B,WAAY8B,GACZiX,YAAYzX,EAAOE,EAASE,EAASE,EAAcC,EAAcC,IACpD,GAAbgX,EACA,MAAM,IAAI/lB,MAAM,kEAOpB,OANAuO,GAASlJ,EACToJ,GAAWpJ,EACXsJ,GAAWtJ,EACXwJ,GAAgBxJ,EAChByJ,GAAgBzJ,EAChB0J,GAAe1J,EACR,CAAEkJ,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAElE,SAASyb,kBAAkBN,EAAKK,EAAKzX,EAAWc,EAAMtB,GAClD,MAAMmY,EAAO7jB,EAAKiS,SAAS0R,EAAKL,GAC1BnhB,EAAYnC,EAAKmC,UAAU0hB,EAAM7jB,EAAKC,OAAO,SAC7C6jB,EAAY9jB,EAAKiS,SAAS4R,EAAM1hB,GAChC4hB,EAAmBtR,uBAAuBtQ,EAAW6hB,GAAchX,GAAQd,EAAWR,GACtFuY,EAAcjkB,EAAKqY,IAAIyL,EAAWC,GAClC5b,EAAcnI,EAAKwS,SAASxS,EAAKmC,UAAU8hB,EAAa7jB,KACxD8H,EAAelI,EAAKwS,SAASxS,EAAKmC,UAAUnC,EAAKkC,OAAO+hB,EAAa7jB,IAAWA,KAChF6H,EAAejI,EAAKwS,SAASxS,EAAKmC,UAAUnC,EAAKkC,OAAO+hB,EAAa5jB,IAAUD,KAErF,MAAO,CAAE2H,QADO/H,EAAKwS,SAASxS,EAAKkC,OAAO+hB,EAAa3jB,KACrC2H,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAElD,SAAS+X,sBAAsBgE,EAASC,EAAWC,EAASlB,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAKd,EAAI6B,EAAM3B,EAAIa,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAK7mB,EAAU2S,EAAarE,GACvJ,IAAIiX,EAAK6B,EACLI,EAAOH,EACP5B,EAAK6B,GACLzc,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB8a,eAAeC,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAKC,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,GAC/I,MAAMY,EAAW/K,aAAa,EAAG,EAAG,EAAG,EAAG7R,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAC9Ewa,eAAeH,EAAI6B,EAAM3B,EAAIL,EAAIiC,EAAM/B,MACtCgC,MACXzgB,KAAMue,EAAIte,MAAOugB,EAAMtgB,IAAKue,GAAOtD,eAAeoD,EAAIiC,EAAM/B,EAAKgC,MACjE5c,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,iBAAiB8D,EAAU5c,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAasH,KAEzK,MAAM+U,EAAQxV,mBAAmBqT,EAAIiC,EAAM/B,EAAIzlB,GACzC2nB,EAAQzV,mBAAmBwT,EAAI6B,EAAM3B,EAAI5lB,GAEzC4kB,EAAenS,uBAAuBnE,EADpB+D,yBAAyB,MAAOM,IAOxD,IAAIlI,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,GAASqN,kBAAkBjY,EAAU0nB,EAAOC,EAAO/C,GAG/E,QADGha,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB/Y,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAasH,IAC/J,CAAElI,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAE9F,SAASuc,wBAAwBpB,EAAKK,EAAKhgB,EAAU7G,EAAU2S,EAAarE,GACxE,MAAMuZ,EAAS3kB,EAAKiS,SAAS0R,EAAKL,GAClC,GAAItjB,EAAKoa,MAAMuK,EAAQ5kB,IACnB,MAAO,CACHwH,MAAO,EACPC,OAAQ,EACRC,MAAO,EACPC,KAAM,EACNC,MAAO,EACPE,QAAS,EACTE,QAAS,EACTE,aAAc,EACdC,aAAc,EACdC,YAAa,GAIrB,MAAMuX,EAAkBrmB,aAAa,sBAC/BwmB,EAAQ,IAAIH,EAAgB4D,GAC5BvD,EAAM,IAAIL,EAAgBiE,GAC1B3D,EAAU3P,mCAAmC1M,EAAUkc,EAAO/iB,GAC9DmjB,EAAQ5P,mCAAmC1M,EAAUoc,EAAKjjB,GAChE,IAAIyK,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,GAASwY,sBAAsBpkB,QAAQkkB,EAASvmB,GAAWqC,QAAQkkB,EAAStmB,GAAYoC,QAAQkkB,EAASrmB,GAAUmC,QAAQkkB,EAASpmB,GAAWkC,QAAQkkB,EAASnmB,GAAaiC,QAAQkkB,EAASlmB,GAAagC,QAAQkkB,EAASjmB,GAAkB+B,QAAQkkB,EAAShmB,GAAkB8B,QAAQkkB,EAAS/lB,GAAiB6B,QAAQmkB,EAAOxmB,GAAWqC,QAAQmkB,EAAOvmB,GAAYoC,QAAQmkB,EAAOtmB,GAAUmC,QAAQmkB,EAAOrmB,GAAWkC,QAAQmkB,EAAOpmB,GAAaiC,QAAQmkB,EAAOnmB,GAAagC,QAAQmkB,EAAOlmB,GAAkB+B,QAAQmkB,EAAOjmB,GAAkB8B,QAAQmkB,EAAOhmB,GAAiB6C,EAAU2S,EAAarE,GACxmB,MAAM+U,EAAiBC,iBAAiBP,EAAOlc,EAAU7G,EAAUyK,EAAOC,EAAQC,EAAO,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAE3G,IAAImd,EAAkB5kB,EAAKiS,SAAS0R,EAAKxD,GACzC,MAAM0E,EAAe/V,4BAA4BqR,EAAgBxc,EAAU7G,KACxEqL,YAAayc,EAAiBld,KAAAA,GAAS+X,kBAAkBmF,EAAiBC,IAE7E,MAAMld,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgBsY,gBAAgB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGzgB,EAAKwS,SAASoS,GAAkB,QAC/I,MAAO,CAAErd,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAGvF,SAAS2c,0BAA0BC,EAAW3Q,EAAS4Q,EAAYxV,GACtE,MAAMyV,EAAQpU,kBAAkBmU,GAChC,IAAIE,EAAO/gB,GAEN+gB,EAAO/gB,GADM,UAAd4gB,EACkB,CAAC3Q,EAAS6Q,GAGV,CAACA,EAAO7Q,GAE9B,MAAMhJ,EAAU+Z,iBAAiB3V,GAC3BjD,EAAeG,gBAAgBtB,EAAS,eAAgB,OAAQ,cAChEga,EAAqBjW,yBAAyB,SAAU5C,GAC9D,IAAIkD,EAAc/C,gBAAgBtB,EAAS,cAAe,OAAQ,QAGlE,GAFoB,SAAhBqE,IACAA,EAAc2V,GACdjW,yBAAyBM,EAAalD,KAAkBkD,EACxD,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,MAAMb,EAAeH,uBAAuBH,EAAS,SAS/Cia,EAAoBxZ,4BAA4BT,EARpB,CAC9BnH,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,KAEyEkG,IAAe,GAClG+Y,EAAQxpB,QAAQopB,EAAO3rB,GACvBgsB,EAAQzpB,QAAQqI,EAAQ5K,GAC9B,IACIoO,EAAOE,GADPE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgByb,kBAAkB0B,EAAOC,EAAOF,EAAmB9Y,EAAcb,KAEzH/D,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB,EAAG,EAAG,EAAG1Y,EAASE,EAAcC,EAAcC,EAAasH,IAEnJ,OAAO,IADUpW,aAAa,uBACvB,CAAa,EAAG,EAAG,EAAG,EAAGsO,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAElF,SAASqd,4BAA4BT,EAAWU,EAAWT,EAAYxV,GAC1E,MAAM/Q,EAAqB,UAAdsmB,GAAyB,EAAI,EACpCE,EAAQ9U,eAAe6U,GACvBloB,EAAWhB,QAAQ2pB,EAAWvrB,GAC9BwrB,EAAgB5pB,QAAQmpB,EAAO/qB,GAC/ByrB,EAAapkB,SAASzE,GACtB8oB,EAAkBrkB,SAASmkB,GACjC,GAAIC,IAAeC,EACf,MAAM,IAAInkB,WAAW,8CAA8CkkB,SAAkBC,eAEzF,MAAMxa,EAAU+Z,iBAAiB3V,GAC3BjD,EAAeG,gBAAgBtB,EAAS,eAAgB,OAAQ,OAChEga,EAAqBjW,yBAAyB,MAAO5C,GAC3D,IAAIkD,EAAc/C,gBAAgBtB,EAAS,cAAe,OAAQ,QAGlE,GAFoB,SAAhBqE,IACAA,EAAc2V,GACdjW,yBAAyBM,EAAalD,KAAkBkD,EACxD,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,IAAIb,EAAeH,uBAAuBH,EAAS,SACjC,UAAd2Z,IACArZ,EAAeD,2BAA2BC,IAC9C,MAAM2Z,EAAoBxZ,4BAA4BT,OAASjS,GAAW,GACpEuoB,EAAenS,uBAAuBnE,EAASqE,GACrD,IAAIlI,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,GAASqN,kBAAkBjY,EAAU2oB,EAAWR,EAAOvD,GAC9D,QAAjBnV,GAAgD,IAAtB8Y,KACvB9d,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAAS+R,cAAclS,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG2d,EAAmB9Y,EAAcb,EAAc+Z,IAGjJ,OAAO,IADUpsB,aAAa,uBACvB,CAAaoF,EAAO8I,EAAO9I,EAAO+I,EAAQ/I,EAAOgJ,EAAOhJ,EAAOiJ,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAExF,SAASme,gCAAgCd,EAAWe,EAAed,EAAYxV,GAClF,MAAM/Q,EAAqB,UAAdsmB,GAAyB,EAAI,EACpCE,EAAQxU,mBAAmBuU,GAC3BloB,EAAWhB,QAAQgqB,EAAe5rB,GAClCwrB,EAAgB5pB,QAAQmpB,EAAO/qB,GAC/ByrB,EAAapkB,SAASzE,GACtB8oB,EAAkBrkB,SAASmkB,GACjC,GAAIC,IAAeC,EACf,MAAM,IAAInkB,WAAW,8CAA8CkkB,SAAkBC,eAEzF,MAAMxa,EAAU+Z,iBAAiB3V,GAC3BjD,EAAeG,gBAAgBtB,EAAS,eAAgB,WAAY,cACpEga,EAAqBjW,yBAAyB,MAAO5C,GAC3D,IAAIkD,EAAc/C,gBAAgBtB,EAAS,cAAe,WAAY,QAGtE,GAFoB,SAAhBqE,IACAA,EAAc2V,GACdjW,yBAAyBM,EAAalD,KAAkBkD,EACxD,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,IAAIb,EAAeH,uBAAuBH,EAAS,SACjC,UAAd2Z,IACArZ,EAAeD,2BAA2BC,IAC9C,MAAM2Z,EAAoB/Y,oCAAoClB,EAASmB,GACvE,IAAIhF,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB+X,sBAAsBpkB,QAAQgqB,EAAersB,GAAWqC,QAAQgqB,EAAepsB,GAAYoC,QAAQgqB,EAAensB,GAAUmC,QAAQgqB,EAAelsB,GAAWkC,QAAQgqB,EAAejsB,GAAaiC,QAAQgqB,EAAehsB,GAAagC,QAAQgqB,EAAe/rB,GAAkB+B,QAAQgqB,EAAe9rB,GAAkB8B,QAAQgqB,EAAe7rB,GAAiB6B,QAAQmpB,EAAOxrB,GAAWqC,QAAQmpB,EAAOvrB,GAAYoC,QAAQmpB,EAAOtrB,GAAUmC,QAAQmpB,EAAOrrB,GAAWkC,QAAQmpB,EAAOprB,GAAaiC,QAAQmpB,EAAOnrB,GAAagC,QAAQmpB,EAAOlrB,GAAkB+B,QAAQmpB,EAAOjrB,GAAkB8B,QAAQmpB,EAAOhrB,GAAiB6C,EAAU2S,EAAarE,GAChuB,MAAM6C,EAAaG,uBAAuB0X,KACvCve,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsR,cAAclS,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAakd,EAAmB9Y,EAAcb,EAAcuC,MAC5PvG,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB/Y,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAasH,IAEtK,OAAO,IADUpW,aAAa,uBACvB,CAAaoF,EAAO8I,EAAO9I,EAAO+I,EAAQ/I,EAAOgJ,EAAOhJ,EAAOiJ,EAAMjJ,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,GAExK,SAAS4d,4BAA4BhB,EAAWiB,EAAWhB,EAAYxV,GAC1E,MAAM/Q,EAAqB,UAAdsmB,GAAyB,EAAI,EACpCE,EAAQ5T,eAAe2T,GACvB5Z,EAAU+Z,iBAAiB3V,GACjC,IAAIC,EAAc/C,gBAAgBtB,EAAS,cAAe,OAAQ,QAC9C,SAAhBqE,IACAA,EAAc,QAClB,MAAMlD,EAAeG,gBAAgBtB,EAAS,eAAgB,OAAQ,cACtE,GAAI+D,yBAAyBM,EAAalD,KAAkBkD,EACxD,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,IAAIb,EAAeH,uBAAuBH,EAAS,SACjC,UAAd2Z,IACArZ,EAAeD,2BAA2BC,IAC9C,MAQM2Z,EAAoBxZ,4BAA4BT,EAR/B,CACnBnH,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,KAE8DkG,IAAe,GAC7F,IAAI5E,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB8a,eAAennB,QAAQkqB,EAAWpsB,GAAWkC,QAAQkqB,EAAWnsB,GAAaiC,QAAQkqB,EAAWlsB,GAAagC,QAAQkqB,EAAWjsB,GAAkB+B,QAAQkqB,EAAWhsB,GAAkB8B,QAAQkqB,EAAW/rB,GAAiB6B,QAAQmpB,EAAOrrB,GAAWkC,QAAQmpB,EAAOprB,GAAaiC,QAAQmpB,EAAOnrB,GAAagC,QAAQmpB,EAAOlrB,GAAkB+B,QAAQmpB,EAAOjrB,GAAkB8B,QAAQmpB,EAAOhrB,MACtc0N,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsR,cAAc,EAAG,EAAG,EAAG,EAAG9R,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAakd,EAAmB9Y,EAAcb,MAClM/D,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB,EAAG9Y,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAasH,IAE7J,OAAO,IADUpW,aAAa,uBACvB,CAAa,EAAG,EAAG,EAAG,EAAGoF,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,GAE5H,SAAS8d,iCAAiClB,EAAWlK,EAAWmK,EAAYxV,GAC/E,MAAM/Q,EAAqB,UAAdsmB,GAAyB,EAAI,EACpCE,EAAQxT,oBAAoBuT,GAC5BloB,EAAWhB,QAAQ+e,EAAW3gB,GAC9BwrB,EAAgB5pB,QAAQmpB,EAAO/qB,GAC/BoC,EAAaiF,SAASzE,GACtBopB,EAAkB3kB,SAASmkB,GACjC,GAAIppB,IAAe4pB,EACf,MAAM,IAAIzkB,WAAW,+CAA+CnF,SAAkB4pB,eAE1F,MAAM9a,EAAU+Z,iBAAiB3V,GAC3B7C,EAAgBhK,GAAsBhH,QAAO,CAACiR,GAAU5J,EAAGC,EAAG4J,MACtD,SAANA,GAAsB,SAAN5J,GAAsB,QAANA,GAChC2J,EAAQlP,KAAKuF,EAAGD,GACb4J,IACR,IACGL,EAAeG,gBAAgBtB,EAAS,eAAgB,OAAQ,SACtE,GAAqB,SAAjBmB,GAA4C,QAAjBA,EAC3B,MAAM,IAAI9K,WAAW,+BAA+BkL,EAAcG,KAAK,cAAcP,KAEzF,IAAIkD,EAAc/C,gBAAgBtB,EAAS,cAAe,OAAQ,QAClE,GAAoB,SAAhBqE,GAA0C,QAAhBA,EAC1B,MAAM,IAAIhO,WAAW,8BAA8BkL,EAAcG,KAAK,cAAc2C,KAIxF,GAFoB,SAAhBA,IACAA,EAAc,QACdN,yBAAyBM,EAAalD,KAAkBkD,EACxD,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,IAAIb,EAAeH,uBAAuBH,EAAS,SACjC,UAAd2Z,IACArZ,EAAeD,2BAA2BC,IAC9C,MAAM2Z,EAAoBxZ,4BAA4BT,OAASjS,GAAW,GACpEob,EAAa/F,eAAe1R,EAAU,CAAC,YAAa,SACpDqpB,EAAc5X,sBAAsB0W,EAAO1Q,EAAY,IAC7D4R,EAAYniB,IAAM,EAClB,MAAMoiB,EAAa7X,sBAAsBsM,EAAWtG,EAAY,IAChE6R,EAAWpiB,IAAM,EAIjB,MAAMgR,EAAY1E,uBAAuBxT,EAAUqpB,GAC7CE,EAAW/V,uBAAuBxT,EAAUspB,GAC5C1E,EAAenS,uBAAuBnE,EAASqE,GACrD,IAAIlI,MAAEA,EAAKC,OAAEA,GAAWuN,kBAAkBjY,EAAUupB,EAAUrR,EAAW0M,GACpD,UAAjBnV,GAAkD,IAAtB8Y,KACzB9d,MAAAA,EAAOC,OAAAA,GAAWiS,cAAclS,EAAOC,EAAQ,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG6d,EAAmB9Y,EAAcb,EAAc2a,IAG7H,OAAO,IADUhtB,aAAa,uBACvB,CAAaoF,EAAO8I,EAAO9I,EAAO+I,EAAQ,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEnE,SAAS8e,gCAAgCvB,EAAWwB,EAAevB,EAAYxV,GAClF,MAAM/Q,EAAqB,UAAdsmB,GAAyB,EAAI,EACpCE,EAAQnS,wBAAwBkS,GAChCloB,EAAWhB,QAAQyqB,EAAersB,GAClCwrB,EAAgB5pB,QAAQmpB,EAAO/qB,GAC/ByrB,EAAapkB,SAASzE,GACtB8oB,EAAkBrkB,SAASmkB,GACjC,GAAIC,IAAeC,EACf,MAAM,IAAInkB,WAAW,8CAA8CkkB,SAAkBC,eAEzF,MAAMxa,EAAU+Z,iBAAiB3V,GAC3BjD,EAAeG,gBAAgBtB,EAAS,eAAgB,WAAY,cACpEga,EAAqBjW,yBAAyB,OAAQ5C,GAC5D,IAAIkD,EAAc/C,gBAAgBtB,EAAS,cAAe,WAAY,QAGtE,GAFoB,SAAhBqE,IACAA,EAAc2V,GACdjW,yBAAyBM,EAAalD,KAAkBkD,EACxD,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,IAAIb,EAAeH,uBAAuBH,EAAS,SACjC,UAAd2Z,IACArZ,EAAeD,2BAA2BC,IAC9C,MAAM2Z,EAAoB/Y,oCAAoClB,EAASmB,GACjE+W,EAAMxnB,QAAQyqB,EAAehtB,GAC7BoqB,EAAM7nB,QAAQmpB,EAAO1rB,GAC3B,IAAIgO,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EACrF,GAAoB,SAAhBsH,GAA0C,UAAhBA,GAA2C,SAAhBA,GAA0C,QAAhBA,EAE/ElI,EAAQ,EACRC,EAAS,EACTC,EAAQ,EACRC,EAAO,IACJK,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgByb,kBAAkBN,EAAKK,EAAK0B,EAIpF9Y,EAAcb,MACX/D,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB,EAAG,EAAG,EAAG1Y,EAASE,EAAcC,EAAcC,EAAasH,QAElJ,CACD,MAAM9L,EAAW7H,QAAQyqB,EAAensB,GACxC,IAAKsd,eAAe/T,EAAU7H,QAAQmpB,EAAO7qB,IACzC,MAAM,IAAIqH,WAAW,kLAGzB,MAAMigB,EAAenS,uBAAuBnE,EAASqE,KAClDlI,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAChFuc,wBAAwBpB,EAAKK,EAAKhgB,EAAU7G,EAAU2S,EAAaiS,MACpEna,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsR,cAAclS,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAakd,EAAmB9Y,EAAcb,EAAc6a,MAC5Phf,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAChFqe,0BAA0Bjf,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAakd,EAAmB9Y,EAAcb,EAAc6a,IAG/K,OAAO,IADUltB,aAAa,uBACvB,CAAaoF,EAAO8I,EAAO9I,EAAO+I,EAAQ/I,EAAOgJ,EAAOhJ,EAAOiJ,EAAMjJ,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,GAExK,SAAS0a,WAAW/Y,EAAWC,EAAYC,EAAUgX,EAAYC,EAAaC,EAAY5B,EAAWrV,GACxG,IAAInG,EAAOgG,EACP/F,EAAQgG,EACR/F,EAAMgG,EAGNvC,EAAQyZ,EACRxZ,EAAO4X,EAQX,OAPAxb,GAJYkd,EAKZjd,GAJakd,IAKVnd,KAAAA,EAAMC,MAAAA,GAAUib,oBAAoBlb,EAAMC,MAC1CD,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAAQ6F,gBAAgB/F,EAAMC,EAAOC,EAAKiG,IAC1DvC,GAAQ,EAAID,EACZzD,GAAO0D,IACJ5D,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAAQib,eAAenb,EAAMC,EAAOC,IAC7C,CAAEF,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAE1B,SAASyiB,QAAQpc,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,EAAiB/C,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAC5J,IAAIlE,EAAOoG,EACPnG,EAASoG,EACTnG,EAASoG,EACTpE,EAAcqE,EACdpE,EAAcqE,EACdpE,EAAaqE,EACjBzG,GAAQ0D,EACRzD,GAAU2D,EACV1D,GAAU4D,EACV5B,GAAe8B,EACf7B,GAAe8B,EACf7B,GAAc8B,EACd,IAAIgX,EAAY,EAEhB,QADGA,UAAAA,EAAWlb,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe+Y,YAAYnb,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,IAClI,CAAE8Y,UAAAA,EAAWlb,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAExE,SAASqgB,YAAYrE,EAAIiC,EAAMqC,EAAIpE,EAAIW,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAKd,EAAI6B,EAAMuC,EAAIlE,EAAIa,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAK1V,GAC/G,MAEMwB,EAAcN,yBAFCF,2BAA2BoT,EAAIiC,EAAMqC,EAAIpE,EAAIW,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,GACrErU,2BAA2BuT,EAAI6B,EAAMuC,EAAIlE,EAAIa,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,IAE1F,IAAIpc,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EACrF,GAAK8F,EAOA,GAAIxJ,eAAewJ,GAAa,CACjC,MAAMmT,EAAmB/nB,aAAa,uBAChCyD,EAAWhB,QAAQmS,EAAY/T,GAC/B2sB,EAAgB,IAAIzF,EAAiBiB,EAAIiC,EAAMqC,EAAIpE,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GACtEuE,EAAgB,IAAI1F,EAAiBoB,EAAI6B,EAAMuC,EAAIlE,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GACtE5N,EAAUhY,EAASgY,QACnB+P,EAAejQ,gBAAgB9X,EAAUmR,EAAY4Y,OAAe1tB,EAAW2b,GAC/EiL,EAAMnL,gBAAgB9X,EAAU+nB,EAAciC,OAAe3tB,EAAW2b,GACxEiS,EAAkB5X,yBAAyB,MAAOM,GAClDuX,EAAoBxnB,GAAa,MACvCwnB,EAAkBvX,YAAcsX,IAC7Bxf,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAASqN,kBAAkBjY,EAAUmR,EAAY8R,EAAKiH,MAE5Etf,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB/Y,EAAMwb,EAAKK,EAAIJ,EAAOK,EAAMJ,EAAKK,EAAIJ,EAAMK,EAAK,EAAM,EAAKJ,EAAMK,EAAKlU,QAEnK,CAED,MAAMiQ,EAAkBrmB,aAAa,sBAC/BsK,EAAW7H,QAAQmS,EAAY7T,GAC/B0C,EAAWhB,QAAQmS,EAAY/T,GAC/BimB,EAAiBC,iBAAiBtkB,QAAQmS,EAAY9T,GAAUwJ,EAAU7G,EAAUulB,EAAIiC,EAAMqC,EAAIpE,EAAIW,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,GAC9HxD,EAAQM,iBAAiB,IAAIV,EAAgBS,GAAiBxc,EAAU7G,EAAU0lB,EAAI6B,EAAMuC,EAAIlE,EAAIa,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,GAC9G,SAAhBlU,GAA0C,UAAhBA,GAA2C,SAAhBA,GAA0C,QAAhBA,GAE/ElI,EAAQ,EACRC,EAAS,EACTC,EAAQ,EACRC,EAAO,IACJK,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgByb,kBAAkB9nB,QAAQmS,EAAY1U,GAAmBumB,EAAO,EAAG,aAAc,iBACtInY,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB,EAAG,EAAG,EAAG1Y,EAASE,EAAcC,EAAcC,EAAasH,OAGhJlI,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAChFuc,wBAAwB5oB,QAAQmS,EAAY1U,GAAmBumB,EAAOnc,EAAU7G,EAAU2S,EAAajQ,GAAa,YAxC/G,CACb,GAAoB,SAAhBiQ,GAA0C,UAAhBA,GAA2C,SAAhBA,EACrD,MAAM,IAAIhO,WAAW,iEAEzB8F,EAAQC,EAASC,EAAQ,IACtBC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB8B,EAAKG,EAAIQ,EAAKK,EAAIJ,EAAOK,EAAMJ,EAAKK,EAAIJ,EAAMK,EAAK,EAAM,EAAKJ,EAAMK,EAAKlU,IAuC3K,OADApG,eAAe9B,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACzF,CAAEZ,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAE9F,SAAS8e,WAAW/S,EAAkBX,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GACrD,IAAIoW,EAAMnnB,GACVmnB,EAAMlnB,EAAKqY,IAAI6O,EAAKlnB,EAAKC,OAAO6Q,IAChCoW,EAAMlnB,EAAKqY,IAAI6O,EAAKlnB,EAAKS,SAAST,EAAKC,OAAO,GAAKG,KACnD8mB,EAAMlnB,EAAKqY,IAAI6O,EAAKlnB,EAAKS,SAAST,EAAKC,OAAOuT,GAAKnT,KACnD6mB,EAAMlnB,EAAKqY,IAAI6O,EAAKlnB,EAAKS,SAAST,EAAKC,OAAOgD,GAAI3C,KAClD4mB,EAAMlnB,EAAKqY,IAAI6O,EAAKlnB,EAAKS,SAAST,EAAKC,OAAOhC,GAAM+B,EAAKC,OAAO,QAChEinB,EAAMlnB,EAAKqY,IAAI6O,EAAKlnB,EAAKS,SAAST,EAAKC,OAAOsT,GAAIvT,EAAKC,OAAO,SAC9D,MAAMuF,EAASxF,EAAKqY,IAAInE,EAAkBgT,GAE1C,OADA/S,yBAAyB3O,GAClBA,EAEX,SAASiT,YAAY3U,EAAMC,EAAOC,EAAKqG,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,EAAiB5N,EAAUyK,EAAOC,EAAQC,EAAO6X,EAAW3X,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAaiD,GAC1O,IAAI1D,EAAO4X,GAEPH,UAAEA,EAASlb,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAeogB,QAAQpc,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,EAAiB/C,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACvOT,GAAQyX,EAER,MAAMiC,EAAmB/nB,aAAa,uBAGhC8tB,EAAYvS,gBAAgB9X,EAFjBkS,mBAAmBlL,EAAMC,EAAOC,EAAKlH,GACjC,IAAIskB,EAAiB7Z,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACjB0D,GACpE,MAAO,CACHtH,KAAMhI,QAAQqrB,EAAW1tB,GACzBsK,MAAOjI,QAAQqrB,EAAWztB,GAC1BsK,IAAKlI,QAAQqrB,EAAWxtB,GACxBsK,KAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAgC,YAAAA,EACAC,YAAAA,EACAC,WAAAA,GAGD,SAAS+Z,iBAAiBhM,EAASzQ,EAAU7G,EAAUyK,EAAOC,EAAQC,EAAOC,EAAM6L,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,EAAI1F,GAS7G,MAAMgW,EAAmB/nB,aAAa,uBACtC,GAAmE,IAA/DmgB,aAAajS,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACxD,OAAOuf,WAAWnrB,QAAQsY,EAAS7a,GAAmBga,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAI7E,MAAMiB,EAAK1B,mCAAmC1M,EAAUyQ,EAAStX,GAG3DqqB,EAAYvS,gBAAgB9X,EAFjBkS,mBAAmBlT,QAAQiW,EAAItY,GAAWqC,QAAQiW,EAAIrY,GAAYoC,QAAQiW,EAAIpY,GAAUmD,GACpF,IAAIskB,EAAiB7Z,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACjB0D,GAC9Dgc,EAAiB1W,uBAAuB5U,QAAQqrB,EAAW1tB,GAAWqC,QAAQqrB,EAAWztB,GAAYoC,QAAQqrB,EAAWxtB,GAAUmC,QAAQiW,EAAInY,GAAWkC,QAAQiW,EAAIlY,GAAaiC,QAAQiW,EAAIjY,GAAagC,QAAQiW,EAAIhY,GAAkB+B,QAAQiW,EAAI/X,GAAkB8B,QAAQiW,EAAI9X,GAAiB6C,GAI1S,OAAOmqB,WAAWnrB,QADUkW,6BAA6BrO,EAAUyjB,EAAgB,cACpC7tB,GAAmBga,EAAGtV,EAAKgF,EAAGuQ,EAAI,EAAI1C,GAElF,SAASuW,4CAA4CtC,EAAW1nB,EAAU4nB,EAAOzV,GACpF,MAAM/Q,EAAqB,aAAdsmB,GAA4B,EAAI,EAC7C,IAAIxd,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB2C,yBAAyBma,GAChI,MACMhX,EAAaD,yBADHmX,iBAAiB3V,MAE9BjI,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBue,YAAY5qB,QAAQuB,EAAUhD,GAAQyB,QAAQuB,EAAU/C,GAASwB,QAAQuB,EAAU9C,GAAQuB,QAAQuB,EAAU7C,GAAOsB,QAAQuB,EAAU5C,GAAQqB,QAAQuB,EAAU3C,GAAUoB,QAAQuB,EAAU1C,GAAUmB,QAAQuB,EAAUzC,GAAekB,QAAQuB,EAAUxC,GAAeiB,QAAQuB,EAAUvC,GAAc2D,EAAO8I,EAAO9I,EAAO+I,EAAQ/I,EAAOgJ,EAAOhJ,EAAOiJ,EAAMjJ,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,EAAa8F,IAEhjB,OAAO,IADU5U,aAAa,uBACvB,CAAakO,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAElG,SAASmf,2CAA2CvC,EAAW3Q,EAASmT,GAC3E,MAAM9oB,EAAqB,aAAdsmB,GAA4B,EAAI,GACvCpd,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GA1nFjE,SAASqf,0BAA0BnjB,EAAMojB,GACrC,IAAIC,EAAS5c,yBAAyBzG,GACtC,IAAK,MAAMzC,KAAY6lB,EACnB,GAAyB,IAArBC,EAAO9lB,GACP,MAAM,IAAIH,WAAW,kBAAkBG,4EAG/C,OAAO8lB,EAmnFsEF,CAA0BD,EAAc,CACjH,QACA,SACA,QACA,SAEEzW,EAAKmW,WAAWnrB,QAAQsY,EAAS7a,GAAmBkF,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,GAEzJ,OAAO,IADS9O,aAAa,sBACtB,CAAYyX,GAEhB,SAAS6W,iDAAiD5C,EAAWpN,EAAU4P,EAAc/X,GAChG,MAAM/Q,EAAqB,aAAdsmB,GAA4B,EAAI,GACvCxd,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB2C,yBAAyByc,GAC5Hnc,EAAU+Z,iBAAiB3V,GAC3B1S,EAAWhB,QAAQ6b,EAAUzd,IAC7B4J,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAeoS,YAAY3c,QAAQ6b,EAAUle,GAAWqC,QAAQ6b,EAAUje,GAAYoC,QAAQ6b,EAAUhe,GAAUmC,QAAQ6b,EAAU/d,GAAWkC,QAAQ6b,EAAU9d,GAAaiC,QAAQ6b,EAAU7d,GAAagC,QAAQ6b,EAAU5d,GAAkB+B,QAAQ6b,EAAU3d,GAAkB8B,QAAQ6b,EAAU1d,GAAiB6C,EAAU2B,EAAO8I,EAAO9I,EAAO+I,EAAQ/I,EAAOgJ,EAAOhJ,EAAOiJ,EAAMjJ,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,EAAaiD,GAChjB,OAAOsF,uBAAuB5M,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAEzG,SAAS8qB,6CAA6C7C,EAAW8C,EAAcN,GAClF,MAAM9oB,EAAqB,aAAdsmB,GAA4B,EAAI,GACvCpd,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB2C,yBAAyByc,GACtG,IAAItjB,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAeogB,QAAQ3qB,QAAQ+rB,EAAcjuB,GAAWkC,QAAQ+rB,EAAchuB,GAAaiC,QAAQ+rB,EAAc/tB,GAAagC,QAAQ+rB,EAAc9tB,GAAkB+B,QAAQ+rB,EAAc7tB,GAAkB8B,QAAQ+rB,EAAc5tB,GAAiBwE,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,KACvYlE,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe+D,aAAanG,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY,WAE3I,OAAO,IADWhN,aAAa,wBACxB,CAAc4K,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAElE,SAASyhB,kDAAkD/C,EAAWlK,EAAW0M,EAAc/X,GAClG,IAAInS,EAAWyN,yBAAyByc,GACtB,aAAdxC,IACA1nB,EAAW,CACPkK,OAAQlK,EAASkK,MACjBC,QAASnK,EAASmK,OAClBC,OAAQpK,EAASoK,MACjBC,MAAOrK,EAASqK,KAChBC,OAAQtK,EAASsK,MACjBE,SAAUxK,EAASwK,QACnBE,SAAU1K,EAAS0K,QACnBE,cAAe5K,EAAS4K,aACxBC,cAAe7K,EAAS6K,aACxBC,aAAc9K,EAAS8K,cAG/B,IAAIZ,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB9K,IACpGqK,KAAAA,GAAS+Y,gBAAgB/Y,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAa,QACpG,MAAMiD,EAAU+Z,iBAAiB3V,GAC3B1S,EAAWhB,QAAQ+e,EAAW3gB,GAC9Bqa,EAAa/F,eAAe1R,EAAU,CAAC,YAAa,SACpDwR,EAASC,sBAAsBsM,EAAWtG,EAAY,IACtD9V,EAAO+a,aAAajS,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACrE4G,EAAOtK,IAAMvF,EAAO,EAAIiD,kBAAkBwU,oBAAoBpZ,EAAU+d,IAAc,EAItF,MAAMkN,EAAYzX,uBAAuBxT,EAAUwR,GAE7C0Z,EAAgB,IADL3uB,aAAa,uBACR,CAAakO,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACxEugB,EAAc3oB,GAAaE,GAAa,MAAO4L,GAGrD,OAAOsG,4BAA4B5U,EADXyR,sBADNqG,gBAAgB9X,EAAUirB,EAAWC,EAAe5c,GACbmJ,EAAY,IACP0T,GAE3D,SAASC,iDAAiDnD,EAAWwB,EAAegB,EAAc/X,GACrG,MAAM/Q,EAAqB,aAAdsmB,GAA4B,EAAI,GACvCxd,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKE,QAAEA,EAAOE,QAAEA,EAAOE,aAAEA,EAAYC,aAAEA,EAAYC,YAAEA,GAAgB2C,yBAAyByc,GAC5Hnc,EAAU+Z,iBAAiB3V,GAC3B7L,EAAW7H,QAAQyqB,EAAensB,GAClC0C,EAAWhB,QAAQyqB,EAAersB,GAExC,OAAO4U,4BADkBsR,iBAAiBtkB,QAAQyqB,EAAepsB,GAAUwJ,EAAU7G,EAAU2B,EAAO8I,EAAO9I,EAAO+I,EAAQ/I,EAAOgJ,EAAOhJ,EAAOiJ,EAAMjJ,EAAOkJ,EAAOlJ,EAAOoJ,EAASpJ,EAAOsJ,EAAStJ,EAAOwJ,EAAcxJ,EAAOyJ,EAAczJ,EAAO0J,EAAaiD,GAC9MzH,EAAU7G,GAEnE,SAAS2V,uBAAuB0V,EAAUjc,EAAWkc,GACjD,GAAkB,IAAdlc,EACA,OAAOic,EACX,IAAIlmB,SAAEA,EAAQE,UAAEA,GAAcL,OAAOqmB,EAAUnoB,EAAKC,OAAOiM,IAC3D,GAAIlM,EAAKoa,MAAMjY,EAAWpC,IACtB,OAAOooB,EACX,MAAM1pB,EAAOuB,EAAKoC,SAASD,EAAWpC,KAAS,EAAI,EACnD,OAAQqoB,GACJ,IAAK,OACG3pB,EAAO,IACPwD,EAAWjC,EAAKqY,IAAIpW,EAAUjC,EAAKC,OAAOxB,KAC9C,MACJ,IAAK,QACGA,EAAO,IACPwD,EAAWjC,EAAKqY,IAAIpW,EAAUjC,EAAKC,OAAOxB,KAC9C,MACJ,IAAK,QAED,MACJ,IAAK,aAEGuB,EAAKwS,SAASnU,IAAI2B,EAAKS,SAAS0B,EAAWnC,EAAKC,OAAO,OAASiM,IAChEjK,EAAWjC,EAAKqY,IAAIpW,EAAUjC,EAAKC,OAAOxB,KAItD,OAAOuB,EAAKS,SAASwB,EAAUjC,EAAKC,OAAOiM,IAExC,SAASgP,aAAavR,EAASuC,EAAWc,EAAMtB,GAEnD,IAAIvJ,EAAYnC,EAAKmC,UAAUwH,EAAS3J,EAAKC,OAAO,SAChDD,EAAKoC,SAASD,EAAWpC,MACzBoC,EAAYnC,EAAKqY,IAAIlW,EAAWnC,EAAKC,OAAO,UAChD,MAAM6jB,EAAY9jB,EAAKiS,SAAStI,EAASxH,GACnC4hB,EAAmBtR,uBAAuBtQ,EAAW6hB,GAAchX,GAAQd,EAAWR,GAC5F,OAAO1L,EAAKqY,IAAIyL,EAAWC,GAExB,SAASxJ,iBAAiBzQ,EAAWC,EAAYC,EAAUK,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,EAAiBwB,EAAWc,EAAMtB,EAAciU,EAAc,QACrM,MAAMR,UAAEA,EAASlb,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAegiB,UAAUhe,EAAWC,EAAaC,EAAaC,EAAkBC,EAAkBC,EAAiBwB,EAAWc,EAAMtB,EAAciU,IAC/M7b,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQib,eAAenV,EAAWC,EAAYC,EAAWmV,GAC9E,MAAO,CAAErb,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAExE,SAASgiB,UAAUpkB,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY6F,EAAWc,EAAMtB,EAAciU,EAAc,QAC/H,IAAIwI,EAAWpoB,GACf,OAAQiN,GACJ,IAAK,MACL,IAAK,OACDmb,EAAWnoB,EAAKC,OAAOgE,GAE3B,IAAK,SACDkkB,EAAWnoB,EAAKqY,IAAIrY,EAAKS,SAAS0nB,EAAUhoB,IAAQH,EAAKC,OAAOiE,IAEpE,IAAK,SACDikB,EAAWnoB,EAAKqY,IAAIrY,EAAKS,SAAS0nB,EAAUhoB,IAAQH,EAAKC,OAAOkE,IAEpE,IAAK,cACDgkB,EAAWnoB,EAAKqY,IAAIrY,EAAKS,SAAS0nB,EAAU/nB,IAAWJ,EAAKC,OAAOkG,IAEvE,IAAK,cACDgiB,EAAWnoB,EAAKqY,IAAIrY,EAAKS,SAAS0nB,EAAU/nB,IAAWJ,EAAKC,OAAOmG,IAEvE,IAAK,aACD+hB,EAAWnoB,EAAKqY,IAAIrY,EAAKS,SAAS0nB,EAAU/nB,IAAWJ,EAAKC,OAAOoG,IAE3E,MAAMiiB,EAAqB,QAATtb,EAAiB2S,EAAcqE,GAAchX,GACzDub,EAAU9V,uBAAuB0V,EAAUG,EAAYpc,EAAWR,GAClElG,EAASxF,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASvoB,EAAKC,OAAOqoB,KAC9D,OAAQtb,GACJ,IAAK,MACD,MAAO,CAAEmS,UAAW3Z,EAAQvB,KAAM,EAAGC,OAAQ,EAAGC,OAAQ,EAAGgC,YAAa,EAAGC,YAAa,EAAGC,WAAY,GAC3G,IAAK,OACD,OAAO+Y,YAAY5Z,EAAQ,EAAG,EAAG,EAAG,EAAG,GAC3C,IAAK,SACD,OAAO4Z,YAAYnb,EAAMuB,EAAQ,EAAG,EAAG,EAAG,GAC9C,IAAK,SACD,OAAO4Z,YAAYnb,EAAMC,EAAQsB,EAAQ,EAAG,EAAG,GACnD,IAAK,cACD,OAAO4Z,YAAYnb,EAAMC,EAAQC,EAAQqB,EAAQ,EAAG,GACxD,IAAK,cACD,OAAO4Z,YAAYnb,EAAMC,EAAQC,EAAQgC,EAAaX,EAAQ,GAClE,IAAK,aACD,OAAO4Z,YAAYnb,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaZ,GACvE,QACI,MAAM,IAAIpM,MAAM,gBAAgB4T,MAG5C,SAASwb,UAAUhQ,EAASE,GACxB,OAAO0J,kBAAkBtmB,QAAQ0c,EAAS/e,GAAWqC,QAAQ0c,EAAS9e,GAAYoC,QAAQ0c,EAAS7e,GAAUmC,QAAQ4c,EAAOjf,GAAWqC,QAAQ4c,EAAOhf,GAAYoC,QAAQ4c,EAAO/e,GAAU,OAAO+N,KAEtM,SAASma,iBAAiB/kB,EAAUqkB,EAAiB9jB,GACjD,MAAMqb,EAAQ9D,gBAAgB9X,EAAUqkB,EAAiB9jB,OAAUlE,GAEnE,MAAO,CAAE8U,WAAYyK,EAAOhR,KADf8gB,UAAUrH,EAAiBzI,IAGrC,SAAS+P,0BAA0Bxa,EAAY1G,EAAOC,EAAQC,EAAOC,GACxE,MAAM/D,EAAW7H,QAAQmS,EAAY7T,GAC/B0C,EAAWhB,QAAQmS,EAAY/T,GAErC,OAAO4U,4BADgBsR,iBAAiBtkB,QAAQmS,EAAY9T,GAAUwJ,EAAU7G,EAAUyK,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAClF/D,EAAU7G,GAE1D,SAAS0pB,0BAA0BxF,EAAYC,EAAaC,EAAY5B,EAAWC,EAAYhX,EAAcE,EAAcC,EAAmBC,EAAmBC,EAAkBsD,EAAWc,EAAMtB,EAAcuC,GACrN,IAAI1G,EAAQyZ,EACRxZ,EAASyZ,EACTxZ,EAAQyZ,EACRxZ,EAAO4X,EACP3X,EAAQ4X,EACR1X,EAAUU,EACVR,EAAUU,EACVR,EAAeS,EACfR,EAAeS,EACfR,EAAcS,EAClB,IAAK9D,wBAAwBmJ,IAChB,SAATjB,GACS,UAATA,GACS,SAATA,GACS,QAATA,GACU,eAATA,GAAuC,IAAdd,EAC1B,MAAO,CAAE3E,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAU9F,IAAIyc,EAAkB3K,yBAAyB,EAAGtS,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAa,GACpH,MAAMugB,EAAYlqB,GAASwB,EAAKwS,SAASoS,IACnCjhB,EAAW7H,QAAQmS,EAAY7T,GAC/B0C,EAAWhB,QAAQmS,EAAY/T,GAC/ByuB,EAAWvI,iBAAiBtkB,QAAQmS,EAAY9T,GAAUwJ,EAAU7G,EAAUyK,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAEzHkhB,EAASxI,iBAAiB,IADR/mB,aAAa,sBACL,CAAoBsvB,GAAWhlB,EAAU7G,EAAU,EAAG,EAAG,EAAG4rB,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,GAChH/I,EAAc3f,EAAKiS,SAAS2W,EAAQD,GAM1C,OALI3oB,EAAK6oB,mBAAmB7oB,EAAKS,SAAST,EAAKiS,SAAS2S,EAAiBjF,GAAc3f,EAAKC,OAAOyoB,IAAa3oB,QACzGwH,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAASgf,YAAYnf,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGghB,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGza,IAClI2W,EAAkB1J,aAAalb,EAAKiS,SAAS2S,EAAiBjF,GAAczT,EAAWc,EAAMtB,KAC1F/D,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBsY,gBAAgB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGzgB,EAAKwS,SAASoS,GAAkB,UAEvI,CAAErd,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAEvF,SAASsR,cAAcuH,EAAYC,EAAaC,EAAY5B,EAAWC,EAAYhX,EAAcE,EAAcC,EAAmBC,EAAmBC,EAAkBsD,EAAWc,EAAMtB,EAAcyV,GACzM,IAAI5Z,EAAQyZ,EACRxZ,EAASyZ,EACTxZ,EAAQyZ,EACRxZ,EAAO4X,EACP3X,EAAQ4X,EACR1X,EAAUU,EACVR,EAAUU,EACVR,EAAeS,EACfR,EAAeS,EACfR,EAAcnI,EAAKC,OAAO2I,GAC9B,MAAMwY,EAAmB/nB,aAAa,uBACtC,IAAIyD,EAAUgsB,EAoBVnJ,EAcA3F,EA7BA/L,EAAakT,EACjB,GAAIlT,EAAY,CACZ,GAAInJ,wBAAwBmJ,GACxB6a,EAAc7a,EACdA,EAAakC,eAAelC,QAE3B,IAAKxJ,eAAewJ,GACrB,MAAM,IAAIlS,UAAU,qDAExBe,EAAWhB,QAAQmS,EAAY/T,GAOnC,GAAa,SAAT8S,GAA4B,UAATA,GAA6B,SAATA,GAA4B,QAATA,EAAgB,CAE1E,IAAI6X,EAIA1F,EACA4J,EANJ5gB,EAAc8R,yBAAyB,EAAGtS,EAAOE,EAASE,EAASE,EAAcC,EAAcU,EAAkB,GAE7GkgB,IACAjE,EAAe4D,0BAA0BK,EAAavhB,EAAOC,EAAQC,EAAOC,MAI7EA,KAAMyX,EAAWhX,YAAAA,EAAawX,YAAaoJ,GAActJ,kBAAkBtX,EAAa0c,IAC3FlF,EAAc3f,EAAKC,OAAO8oB,GAC1BrhB,GAAQyX,EACRxX,EAAQE,EAAUE,EAAUE,EAAeC,EAAe,EAG9D,OAAQ8E,GACJ,IAAK,OAAQ,CACT,IAAKlQ,EACD,MAAM,IAAI2E,WAAW,mDAGzB,MAAMunB,EAAgB,IAAI5H,EAAiB7Z,GACrCuN,EAAUhY,EAASgY,QACnBmU,EAAarU,gBAAgB9X,EAAUmR,EAAY+a,OAAe7vB,EAAW2b,GAE7EoU,EAAwBtU,gBAAgB9X,EAAUmR,EAD/B,IAAImT,EAAiB7Z,EAAOC,EAAQC,QACyBtO,EAAW2b,GAEjG7G,EAAagb,EACbvhB,GAF0B8gB,UAAUS,EAAYC,GAGhD,MAAMC,EAAYvU,gBAAgB9X,EAAUmR,EAAY,CAAEvG,KAAAA,QAAQvO,EAAW2b,GACvE4M,EAAeliB,GAAa,MAClCkiB,EAAajS,YAAc,OAC3B,MAAM2Z,EAAcrU,kBAAkBjY,EAAUmR,EAAYkb,EAAWzH,GAAcna,MACrFA,GAAS6hB,EACT,MAAMC,EAAgBpb,EACtBA,EAAa2G,gBAAgB9X,EAAUmR,EAAY,CAAE1G,MAAO6hB,QAAejwB,EAAW2b,GAEtFpN,GADmB8gB,UAAUa,EAAepb,GAE5C,MAAMoT,EAAU,IAAID,EAAiB1Z,EAAO,GAAK,EAAI,GACrD,IAAMA,KAAMka,GAAgBC,iBAAiB/kB,EAAUmR,EAAYoT,GAOnEO,EAAcxjB,EAAQwjB,GAGtB,MAAM0H,EAAUtpB,EAAKS,SAAST,EAAKC,OAAO2hB,GAAcjC,GACxDxX,EAAcnI,EAAKqY,IAEnBrY,EAAKqY,IAAIrY,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOsH,IAASvH,EAAKS,SAAST,EAAKC,OAAOyH,GAAOiY,IAAexX,GACrG,MAAMogB,EAAU9V,uBAAuBtK,EAAanI,EAAKwS,SAASxS,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOiM,KAAcR,GACnHsO,EAAQha,EAAKwS,SAASrK,GAAenI,EAAKwS,SAAS8W,GACnD/hB,EAAQvH,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASe,IAC3CnhB,EAAcpI,GACdyH,EAASC,EAAQC,EAAO,EACxB,MAEJ,IAAK,QAAS,CACV,IAAK5K,EACD,MAAM,IAAI2E,WAAW,oDAGzB,MAAM8nB,EAAc,IAAInI,EAAiB7Z,EAAOC,GAC1CsN,EAAUhY,EAASgY,QACnB0U,EAAmB5U,gBAAgB9X,EAAUmR,EAAYsb,OAAapwB,EAAW2b,GAEjFoU,EAAwBtU,gBAAgB9X,EAAUmR,EAD/B,IAAImT,EAAiB7Z,EAAOC,EAAQC,QACyBtO,EAAW2b,GAEjG7G,EAAaub,EACb9hB,GAFoB8gB,UAAUgB,EAAkBN,GAKhD,MAAMzqB,EAAOD,GAASkJ,GAChB4Z,EAAW,IAAIF,EAAiB,EAAG1Z,EAAO,GAAK,EAAI,GACzD,IAAIoa,EAEJ,MADG7T,WAAAA,EAAYvG,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IACtEljB,EAAQsJ,IAAStJ,EAAQ0jB,IAC5Bta,GAAU/I,EACViJ,GAAQoa,IACL7T,WAAAA,EAAYvG,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IAEjFQ,EAAe1jB,EAAQ0jB,GAGvB,MAAMwH,EAAUtpB,EAAKS,SAAST,EAAKC,OAAO6hB,GAAenC,GACzDxX,EAAcnI,EAAKqY,IAEnBrY,EAAKqY,IAAIrY,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOuH,IAAUxH,EAAKS,SAAST,EAAKC,OAAOyH,GAAOiY,IAAexX,GACtG,MAAMogB,EAAU9V,uBAAuBtK,EAAanI,EAAKwS,SAASxS,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOiM,KAAcR,GACnHsO,EAAQha,EAAKwS,SAASrK,GAAenI,EAAKwS,SAAS8W,GACnD9hB,EAASxH,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASe,IAC5CnhB,EAAcpI,GACd0H,EAAQC,EAAO,EACf,MAEJ,IAAK,OAAQ,CACT,IAAK5K,EACD,MAAM,IAAI2E,WAAW,mDAGzB,MAAMhD,EAAOD,GAASkJ,GAChB6Z,EAAU,IAAIH,EAAiB,EAAG,EAAG1Z,EAAO,GAAK,EAAI,GAC3D,IAAIqa,EAEJ,MADG9T,WAAAA,EAAYvG,KAAMqa,GAAgBF,iBAAiB/kB,EAAUmR,EAAYsT,IACrEnjB,EAAQsJ,IAAStJ,EAAQ2jB,IAC5Bta,GAAShJ,EACTiJ,GAAQqa,IACL9T,WAAAA,EAAYvG,KAAMqa,GAAgBF,iBAAiB/kB,EAAUmR,EAAYsT,IAEhFQ,EAAc3jB,EAAQ2jB,GAGtB,MAAMuH,EAAUtpB,EAAKS,SAAST,EAAKC,OAAO8hB,GAAcpC,GACxDxX,EAAcnI,EAAKqY,IAEnBrY,EAAKqY,IAAIrY,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOwH,IAASzH,EAAKS,SAAST,EAAKC,OAAOyH,GAAOiY,IAAexX,GACrG,MAAMogB,EAAU9V,uBAAuBtK,EAAanI,EAAKwS,SAASxS,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOiM,KAAcR,GACnHsO,EAAQha,EAAKwS,SAASrK,GAAenI,EAAKwS,SAAS8W,GACnD7hB,EAAQzH,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASe,IAC3CnhB,EAAcpI,GACd2H,EAAO,EACP,MAEJ,IAAK,MAAO,CAGR,MAAM4hB,EAAU3J,EAChBxX,EAAcnI,EAAKqY,IAAIrY,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOyH,IAAQS,GAClE,MAAMogB,EAAU9V,uBAAuBtK,EAAanI,EAAKwS,SAASxS,EAAKS,SAAS6oB,EAAStpB,EAAKC,OAAOiM,KAAcR,GACnHsO,EAAQha,EAAKwS,SAASrK,GAAenI,EAAKwS,SAAS8W,GACnD5hB,EAAO1H,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASe,IAC1CnhB,EAAcpI,GACd,MAEJ,IAAK,OAAQ,CACT,MAAMupB,EAAU,MAChB,IAAIG,EAAiBzpB,EAAKS,SAAST,EAAKC,OAAO0H,GAAQ3H,EAAKC,OAAO,QACnEwpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAO4H,GAAU7H,EAAKC,OAAO,QAC1FwpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAO8H,GAAUzH,KAC9EmpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOgI,GAAe5H,KACnFopB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOiI,GAAe9H,KACnFqpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBthB,GAC1C6R,EAAQha,EAAKwS,SAASiX,GAAkBH,EACxC,MAAMf,EAAU9V,uBAAuBgX,EAAgBH,EAAUpd,EAAWR,GAC5E/D,EAAQ3H,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASvoB,EAAKC,OAAOqpB,KACvDnhB,EAAcpI,GACd8H,EAAUE,EAAUE,EAAeC,EAAe,EAClD,MAEJ,IAAK,SAAU,CACX,MAAMohB,EAAU,KAChB,IAAIG,EAAiBzpB,EAAKS,SAAST,EAAKC,OAAO4H,GAAU7H,EAAKC,OAAO,OACrEwpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAO8H,GAAUzH,KAC9EmpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOgI,GAAe5H,KACnFopB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOiI,GAAe9H,KACnFqpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBthB,GAC1C6R,EAAQha,EAAKwS,SAASiX,GAAkBH,EACxC,MAAMf,EAAU9V,uBAAuBgX,EAAgBH,EAAUpd,EAAWR,GAC5E7D,EAAU7H,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASvoB,EAAKC,OAAOqpB,KACzDnhB,EAAcpI,GACdgI,EAAUE,EAAeC,EAAe,EACxC,MAEJ,IAAK,SAAU,CACX,MAAMohB,EAAU,IAChB,IAAIG,EAAiBzpB,EAAKS,SAAST,EAAKC,OAAO8H,GAAUzH,IACzDmpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOgI,GAAe5H,KACnFopB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOiI,GAAe9H,KACnFqpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBthB,GAC1C6R,EAAQha,EAAKwS,SAASiX,GAAkBH,EACxC,MAAMf,EAAU9V,uBAAuBgX,EAAgBH,EAAUpd,EAAWR,GAC5E3D,EAAU/H,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASvoB,EAAKC,OAAOqpB,KACzDnhB,EAAcpI,GACdkI,EAAeC,EAAe,EAC9B,MAEJ,IAAK,cAAe,CAChB,MAAMohB,EAAU,IAChB,IAAIG,EAAiBzpB,EAAKS,SAAST,EAAKC,OAAOgI,GAAe5H,IAC9DopB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBzpB,EAAKS,SAAST,EAAKC,OAAOiI,GAAe9H,KACnFqpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBthB,GAC1C6R,EAAQha,EAAKwS,SAASiX,GAAkBH,EACxC,MAAMf,EAAU9V,uBAAuBgX,EAAgBH,EAAUpd,EAAWR,GAC5EzD,EAAejI,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASvoB,EAAKC,OAAOqpB,KAC9DnhB,EAAcpI,GACdmI,EAAe,EACf,MAEJ,IAAK,cAAe,CAChB,MAAMohB,EAAU,IAChB,IAAIG,EAAiBzpB,EAAKS,SAAST,EAAKC,OAAOiI,GAAe9H,IAC9DqpB,EAAiBzpB,EAAKqY,IAAIoR,EAAgBthB,GAC1C6R,EAAQha,EAAKwS,SAASiX,GAAkBH,EACxC,MAAMf,EAAU9V,uBAAuBgX,EAAgBH,EAAUpd,EAAWR,GAC5ExD,EAAelI,EAAKwS,SAASxS,EAAKkC,OAAOqmB,EAASvoB,EAAKC,OAAOqpB,KAC9DnhB,EAAcpI,GACd,MAEJ,IAAK,aACDia,EAAQha,EAAKwS,SAASrK,GACtBA,EAAcsK,uBAAuBtK,EAAa+D,EAAWR,GAIrE,MAAO,CACHnE,MAAAA,EACAC,OAAAA,EACAC,MAAAA,EACAC,KAAAA,EACAC,MAAAA,EACAE,QAAAA,EACAE,QAAAA,EACAE,aAAAA,EACAC,aAAAA,EACAC,YAAanI,EAAKwS,SAASrK,GAC3B6R,MAAAA,GAGD,SAAS2I,eAAeN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC/C,IAAK,MAAO3gB,EAAGC,IAAM,CACjB,CAACqgB,EAAIG,GACL,CAACF,EAAIG,GACL,CAACF,EAAIG,IAEL,GAAI3gB,IAAMC,EACN,OAAO0nB,iBAAiB3nB,EAAIC,GAEpC,OAAO,EAEX,SAASqd,kBAAkBtd,EAAGC,GAC1B,IAAIwD,EAASzD,EAAIC,EACjB,OAAItC,GAAS8F,GAAS,GACX,GACPA,EAAS,IACTA,GAAUxD,GACPwD,GAEJ,SAASmkB,iBAAiBC,GAC7B,MAAMC,EAASC,SAASF,GACxB,YAAiC,IAAtBhsB,WAAWqC,OACXrC,WAAWqC,OAAO4pB,EAAOtkB,SAAS,KACtCskB,EAEJ,SAASC,SAASF,GACrB,GAAIA,aAAe5pB,EACf,OAAO4pB,EAEX,IAAIG,EAAOH,EACX,GAAmB,iBAARA,EAAkB,CACzB,MAAMI,EAAWJ,EAAIrxB,OAAO0xB,aACxBD,GAAgC,mBAAbA,IACnBD,EAAOnqB,GAAaoqB,EAAUJ,EAAK,CAAC,YAG5C,cAAeG,GACX,IAAK,YACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,QACI,MAAM,IAAIhuB,UAAU,yBAAyB6tB,eACjD,IAAK,SACD,IAAKG,EAAKlkB,MAAM,yBACZ,MAAM,IAAIqkB,YAAY,yBAG9B,IAAK,SACD,IACI,OAAOlqB,EAAKC,OAAO8pB,EAAKxkB,YAE5B,MAAOzC,GACH,GAAIA,aAAa1J,OAAS0J,EAAEqnB,QAAQC,WAAW,mBAC3C,MAAM,IAAIF,YAAYpnB,EAAEqnB,SAC5B,MAAMrnB,EAEd,IAAK,UACD,OAAIinB,EACO7pB,GAGAH,IAOhB,MAAM2d,GAA4B,MACrC,IAAI5M,EAAK9Q,EAAKC,OAAOic,KAAKmO,MAAQ,KAClC,MAAO,KACH,MAAM7W,EAAKxT,EAAKC,OAAOic,KAAKmO,OACtB7kB,EAASxF,EAAKqY,IAAIrY,EAAKS,SAAS+S,EAAInT,IAAUyQ,GAEpD,OADAA,EAAK9Q,EAAKmC,UAAUqR,EAAInT,IACpBL,EAAKsc,YAAY9W,EAAQ7E,IAClBA,GACPX,EAAKoC,SAASoD,EAAQ9E,IACfA,GACJ8E,IAV0B,GAkBlC,SAASkkB,iBAAiBjxB,GAC7B,OAAOA,EAAQ,GAAK,EAAIA,EAAQ,EAAI,EAAIA,EAErC,SAAS0sB,iBAAiB/Z,GAC7B,QAAgBjS,IAAZiS,EACA,OAAO5L,GAAa,MACxB,GAAI0B,SAASkK,IAAwB,OAAZA,EACrB,OAAOA,EACX,MAAM,IAAIrP,UAAU,6CAAwD,OAAZqP,EAAmB,OAAS,UAAUA,IAEnG,SAASkf,oBAAoBC,EAAUC,GAC1C,MAAMC,EAAIjrB,GAAa,MAEvB,OADAirB,EAAEF,GAAYC,EACPC,EAEX,SAASpf,UAAUD,EAASxJ,EAAUgM,EAAepC,GACjD,IAAI/S,EAAQ2S,EAAQxJ,GACpB,QAAczI,IAAVV,EAAqB,CAErB,GADAA,EAAQ8I,SAAS9I,IACZmV,EAAcpQ,SAAS/E,GACxB,MAAM,IAAIgJ,WAAW,GAAGG,oBAA2BgM,EAAcd,KAAK,cAAcrU,KAExF,OAAOA,EAEX,OAAO+S,EAYJ,SAASsL,kBAAkBjb,GAC9B,OAAOyB,EAAcuS,KAAK7O,GAAsBnF,GAEpD,MAAMyf,GAAS,IAAInf,OAAO,IAAIuuB,EAAatuB,WAC3C,SAAS+hB,OAAOwM,EAAUC,EAAWC,EAAYC,EAAcH,EAASC,GAAYG,EAAcJ,EAASE,IAEvG,IAAIG,EAAOhrB,EAAKC,OAAO2qB,GACnBK,EAAQjrB,EAAKC,OAAO4qB,GACpBK,EAASJ,EACTK,EAASJ,EACb,KAAO/qB,EAAKsc,YAAYtc,EAAKiS,SAASgZ,EAAOD,GAAO9qB,KAAM,CACtD,MAAMkrB,EAASprB,EAAKkC,OAAOlC,EAAKqY,IAAI2S,EAAMC,GAAQjrB,EAAKC,OAAO,IACxDorB,EAASV,EAASS,GACxB,GAAIC,IAAWH,EACXF,EAAOI,EACPF,EAASG,MAER,CAAA,GAAIA,IAAWF,EAKhB,MAAM,IAAI/xB,MAAM,8BAA8B8xB,OAAYG,OAAYF,KAJtEF,EAAQG,EACRD,EAASE,GAMjB,OAAOJ,EAEX,MAAMjH,GAAgB,CAClB/f,KAAM,MACNC,OAAQ,KACRC,OAAQ,IACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,GCj4HVilB,GAAO/yB,OAAO,QACdgzB,GAAKhzB,OAAO,MACZizB,GAAKjzB,OAAO,MACZkzB,GAAOlzB,OAAO,QACdmzB,GAAWnzB,OAAO,YAClBozB,GAAQpzB,OAAO,iBACfqzB,GAAOrzB,OAAO,WACdszB,GAAWtzB,OAAO,YAClBuzB,GAAcvzB,OAAO,YACrBwzB,GAAWxzB,OAAO,qBAClByzB,GAASzzB,OAAO,eAChB0zB,GAAS1zB,OAAO,UAChB2zB,GAAU3zB,OAAO,WACjB4zB,WAAc1zB,IACT,CACHA,MAAAA,EACAE,YAAY,EACZD,UAAU,EACVE,cAAc,IAGhB+E,GAAqBC,WAAWC,KAAKC,eACrCwB,GAAelH,OAAOmH,OACtB6sB,GAAuBh0B,OAAOE,UAAU+zB,eACxCzsB,GAAeC,QAAQC,MAI7B,SAASwsB,YAAYC,EAAK1zB,GACtB,IAAIiQ,EAAMyjB,EAAI1zB,GAad,MAZmB,mBAARiQ,IAQPA,EAAM,IAAInL,GAAmB4uB,EAAIN,IAASnjB,EAAIyjB,EAAIL,MAElDK,EAAI1zB,GAAQiQ,GAETA,EAGX,SAAS0jB,wBAAwBD,GAC7B,IAAIzjB,EAAMyjB,EAAIT,IAKd,MAJmB,iBAARhjB,IACPA,EAAM2jB,mBAAsB3jB,GAC5ByjB,EAAIT,IAAehjB,GAEhBA,EAEX,SAAS4jB,mBAAmBC,EAAoBnd,EAAe,IAC3D,KAAMod,gBAAgBF,oBAClB,OAAO,IAAIA,mBAAmBC,EAAQnd,GAE1C,MAAMqd,OAAqC,IAAjBrd,EACpBpE,EAAUyhB,EAAavtB,GAAa,GAAIkQ,GAAgB,GAExDsd,EAAW,IAAInvB,GAAmBgvB,EAAQvhB,GAC1C2hB,EAAKD,EAASvR,kBAapB,GAAIsR,EAAY,CACZ,MAAMG,EAAiB1tB,GAAa,GAAIytB,GACxC,IAAK,MAAMl0B,KAAQm0B,EACVptB,GAAawsB,GAAsBhhB,EAAS,CAACvS,YACvCm0B,EAAen0B,GAG9B+zB,KAAKV,IAAWc,OAGhBJ,KAAKV,IAAW9gB,EAEpBwhB,KAAKb,IAAY3gB,EAAQzH,SAAWyH,EAAQzH,SAAW,KACvDipB,KAAKX,IAAUc,EAAGJ,OAClBC,KAAKf,IAAYiB,EACjBF,KAAKd,IAAeiB,EAAGppB,SACvBipB,KAAKZ,IAAUe,EAAGjwB,SAClB8vB,KAAKtB,IAAQ2B,UACbL,KAAKrB,IAAM2B,eACXN,KAAKpB,IAAM2B,cACXP,KAAKnB,IAAQ2B,UACbR,KAAKlB,IAAY2B,cACjBT,KAAKjB,IAAS2B,mBACdV,KAAKhB,IAAQ2B,aAGjBn1B,OAAOC,eAAeq0B,mBAAoB,OAAQ,CAC9Ch0B,UAAU,EACVD,MAAO,mBAEXi0B,mBAAmBc,mBAAqB,SAAUC,EAASriB,GACvD,OAAOzN,GAAmB6vB,mBAAmBC,EAASriB,IAE1D,MAAMsiB,GAAsB,CACxBnS,gBAAiB4Q,YAkBrB,SAAS5Q,kBACL,OAAOqR,KAAKf,IAAUtQ,qBAlBtBgC,OAAQ4O,YAuDZ,SAAS5O,OAAOJ,KAAawQ,GACzB,IAAIvZ,QAAEA,EAAO6I,UAAEA,EAAStZ,SAAEA,GAAaiqB,iBAAiBzQ,EAAUyP,MAClE,GAAIxY,GAAW6I,EAEX,OADAA,EAAY4Q,wBAAwB5Q,EAAWtZ,GACxCsZ,EAAUM,OAAOnJ,EAAQmI,mBAEpC,OAAOqQ,KAAKf,IAAUtO,OAAOJ,KAAawQ,MA5D1CG,YAAa3B,YAsEjB,SAAS2B,YAAYC,EAAGC,GACpB,GAAIC,iBAAiBF,IAAME,iBAAiBD,GAAI,CAC5C,IAAKE,iBAAiBH,EAAGC,GACrB,MAAM,IAAIjyB,UAAU,uEAExB,MAAQqY,QAAS+Z,EAAIlR,UAAWmR,EAAYzqB,SAAU0qB,GAAQT,iBAAiBG,EAAGnB,OAC1ExY,QAASka,EAAIrR,UAAWsR,EAAY5qB,SAAU6qB,GAAQZ,iBAAiBI,EAAGpB,MAClF,GAAIyB,GAAOG,GAAOH,IAAQG,EACtB,MAAM,IAAI/sB,WAAW,oDAEzB,GAAI0sB,GAAMG,GAAMF,GAAcG,GAAcH,IAAeG,EAAY,CAGnE,OAFkBV,wBAAwBO,EAAYC,GAErCP,YAAYK,EAAG5R,kBAAmB+R,EAAG/R,oBAI9D,OAAOqQ,KAAKf,IAAUiC,YAAYC,EAAGC,OArFrC,kBAAmBrwB,GAAmBrF,YACtCo1B,GAAoBe,cAAgBtC,YA2DxC,SAASsC,cAActR,KAAawQ,GAChC,IAAIvZ,QAAEA,EAAO6I,UAAEA,EAAStZ,SAAEA,GAAaiqB,iBAAiBzQ,EAAUyP,MAClE,GAAIxY,GAAW6I,EAEX,OADAA,EAAY4Q,wBAAwB5Q,EAAWtZ,GACxCsZ,EAAUwR,cAAcra,EAAQmI,mBAE3C,OAAOqQ,KAAKf,IAAU4C,cAActR,KAAawQ,OA/DjD,uBAAwBhwB,GAAmBrF,YAC3Co1B,GAAoBgB,mBAAqBvC,YAmF7C,SAASuC,mBAAmBX,EAAGC,GAC3B,GAAIC,iBAAiBF,IAAME,iBAAiBD,GAAI,CAC5C,IAAKE,iBAAiBH,EAAGC,GACrB,MAAM,IAAIjyB,UAAU,8EAExB,MAAQqY,QAAS+Z,EAAIlR,UAAWmR,EAAYzqB,SAAU0qB,GAAQT,iBAAiBG,EAAGnB,OAC1ExY,QAASka,EAAIrR,UAAWsR,EAAY5qB,SAAU6qB,GAAQZ,iBAAiBI,EAAGpB,MAClF,GAAIyB,GAAOG,GAAOH,IAAQG,EACtB,MAAM,IAAI/sB,WAAW,oDAEzB,GAAI0sB,GAAMG,GAAMF,GAAcG,GAAcH,IAAeG,EAAY,CAGnE,OAFkBV,wBAAwBO,EAAYC,GAErCK,mBAAmBP,EAAG5R,kBAAmB+R,EAAG/R,oBAIrE,OAAOqQ,KAAKf,IAAU6C,mBAAmBX,EAAGC,OAlGhDtB,mBAAmBp0B,UAAYF,OAAOiD,OAAOsC,GAAmBrF,UAAWo1B,IAE3Et1B,OAAOC,eAAeq0B,mBAAoB,YAAa,CACnDh0B,UAAU,EACVC,YAAY,EACZC,cAAc,IAEX,MAAMkF,GAAiB4uB,mBAI9B,SAASmB,wBAAwB5Q,EAAWtZ,GACxC,IAAKA,EACD,OAAOsZ,EACX,MAAM7R,EAAU6R,EAAU1B,kBAC1B,OAAInQ,EAAQzH,WAAaA,EACdsZ,IAMP7R,EAAmB,WAAKA,EAAmB,oBAOpCA,EAAiB,eACjBA,EAAa,WACbA,EAAc,YACdA,EAAe,aACfA,EAAa,WACbA,EAAc,YACdA,EAAgB,cAChBA,EAAgB,cAChBA,EAAsB,oBACtBA,EAAmB,iBACnBA,EAAgB,cAChBA,EAAmB,WAEvB,IAAIzN,GAAmByN,EAAQuhB,OAAQ,IAAKvhB,EAASzH,SAAAA,KA0DhE,SAASgrB,MAAMnf,EAAe,GAAIof,EAAU,IACxC,MAAMxjB,EAAU9L,GAAa,GAAIkQ,GACjC,IAAK,MAAMqf,IAAO,CACd,OACA,QACA,MACA,OACA,SACA,SACA,UACA,YACA,eACA,YACA,aAEAzjB,EAAQyjB,GAAOA,KAAOD,EAAUA,EAAQC,GAAOzjB,EAAQyjB,IAClC,IAAjBzjB,EAAQyjB,SAAmC11B,IAAjBiS,EAAQyjB,WAC3BzjB,EAAQyjB,GAEvB,OAAOzjB,EAEX,SAASgiB,UAAU5d,GACf,IAAIpE,EAAUujB,MAAMnf,EAAc,CAC9B1L,MAAM,EACNC,OAAO,EACPC,KAAK,EACL8qB,SAAS,EACTC,cAAc,EACdC,WAAW,IASf,OAPKC,eAAe7jB,KAChBA,EAAU9L,GAAa,GAAI8L,EAAS,CAChCnH,KAAM,UACNC,OAAQ,UACRC,OAAQ,aAGTiH,EAEX,SAAS8hB,eAAe1d,GACpB,IAAIpE,EAAUujB,MAAMnf,EAAc,CAC9BxL,KAAK,EACLC,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACR2qB,SAAS,EACTI,WAAW,EACXH,cAAc,EACdC,WAAW,EACXG,WAAW,IAKf,MAHM,SAAU/jB,GAAW,UAAWA,IAClCA,EAAU9L,GAAa8L,EAAS,CAAEtH,KAAM,UAAWC,MAAO,aAEvDqH,EAEX,SAAS+hB,cAAc3d,GACnB,IAAIpE,EAAUujB,MAAMnf,EAAc,CAC9B1L,MAAM,EACNG,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACR2qB,SAAS,EACTI,WAAW,EACXH,cAAc,EACdC,WAAW,EACXG,WAAW,IAKf,MAHM,UAAW/jB,GAAW,QAASA,IACjCA,EAAU9L,GAAa,GAAI8L,EAAS,CAAErH,MAAO,UAAWC,IAAK,aAE1DoH,EAEX,SAAS6hB,UAAUzd,GACf,IAAIpE,EAAUujB,MAAMnf,EAAc,CAC9BvL,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACR+qB,WAAW,EACXH,cAAc,EACdI,WAAW,IASf,OAPKC,eAAehkB,KAChBA,EAAU9L,GAAa,GAAI8L,EAAS,CAChCtH,KAAM,UACNC,MAAO,UACPC,IAAK,aAGNoH,EAEX,SAASiiB,cAAc7d,GACnB,IAAIpE,EAAUujB,MAAMnf,EAAc,CAAEuf,cAAc,IAWlD,OAVKE,eAAe7jB,IAAagkB,eAAehkB,KAC5CA,EAAU9L,GAAa,GAAI8L,EAAS,CAChCtH,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,aAGTiH,EAEX,SAASkiB,mBAAmB9d,GACxB,IAAIpE,EAAUoE,EAad,OAZKyf,eAAe7jB,IAAagkB,eAAehkB,KAC5CA,EAAU9L,GAAa,GAAI8L,EAAS,CAChCtH,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,iBAEiBhL,IAAzBiS,EAAQ2jB,eACR3jB,EAAQ2jB,aAAe,UAExB3jB,EAEX,SAASmiB,aAAa/d,GAClB,IAAIpE,EAAUoE,EAWd,OAVKyf,eAAe7jB,IAAagkB,eAAehkB,KAC5CA,EAAU9L,GAAa,GAAI8L,EAAS,CAChCtH,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,aAGTiH,EAEX,SAASgkB,eAAehkB,GACpB,MAAO,SAAUA,GAAW,UAAWA,GAAW,QAASA,GAAW,YAAaA,GAAW,cAAeA,EAEjH,SAAS6jB,eAAe7jB,GACpB,MAAQ,SAAUA,GAAW,WAAYA,GAAW,WAAYA,GAAW,cAAeA,GAAW,cAAeA,EAExH,SAAS6iB,iBAAiB1B,GACtB,OAAQ8C,eAAkB9C,IACtB+C,eAAkB/C,IAClBgD,mBAAsBhD,IACtBiD,wBAA2BjD,IAC3BkD,oBAAuBlD,IACvBmD,mBAAsBnD,IACtBoD,kBAAqBpD,GAE7B,SAAS2B,iBAAiBnsB,EAAGC,GACzB,SAAKisB,iBAAiBlsB,KAAOksB,iBAAiBjsB,QAE1CstB,eAAkBvtB,KAAOutB,eAAkBttB,QAE3CqtB,eAAkBttB,KAAOstB,eAAkBrtB,QAE3CutB,mBAAsBxtB,KAAOwtB,mBAAsBvtB,QAEnDwtB,wBAA2BztB,KAAOytB,wBAA2BxtB,QAE7DytB,oBAAuB1tB,KAAO0tB,oBAAuBztB,QAErD0tB,mBAAsB3tB,KAAO2tB,mBAAsB1tB,OAEnD2tB,kBAAqB5tB,KAAO4tB,kBAAqB3tB,UAIzD,SAAS4rB,iBAAiBgC,EAAaC,GACnC,MAAMC,EAAWz2B,aAAa,4BAC9B,GAAIi2B,eAAkBM,GAAc,CAChC,MAMMzS,EAAW,IAAI2S,EAAS,KAAM,EAAG,EAN1Bh0B,QAAQ8zB,EAAah2B,GACnBkC,QAAQ8zB,EAAa/1B,GACrBiC,QAAQ8zB,EAAa91B,GAChBgC,QAAQ8zB,EAAa71B,GACrB+B,QAAQ8zB,EAAa51B,GACtB8B,QAAQ8zB,EAAa31B,GAC8D41B,EAAK7D,KAC3G,MAAO,CACH5X,QAAS2b,6BAAgCvD,wBAAwBqD,GAAO1S,EAAU,cAClFF,UAAWqP,YAAYuD,EAAMpE,KAGrC,GAAIgE,oBAAuBG,GAAc,CACrC,MAAM3c,EAAUnX,QAAQ8zB,EAAan2B,GAC/ByZ,EAAWpX,QAAQ8zB,EAAal2B,GAChCqN,EAAkBjL,QAAQ8zB,EAAaj2B,GACvCmD,EAAWkzB,SAAYl0B,QAAQ8zB,EAAa11B,IAClD,GAAI4C,IAAa+yB,EAAK7D,IAClB,MAAM,IAAIvqB,WAAW,8CAA8C3E,6BAAoC+yB,EAAK7D,OAEhH,MAAM7O,EAAW,IAAI2S,EAAS7c,EAASC,EAAUnM,EAAiB,GAAI,EAAG,EAAG,EAAG,EAAG,EAAGjK,GACrF,MAAO,CACHsX,QAAS2b,6BAAgCvD,wBAAwBqD,GAAO1S,EAAU,cAClFF,UAAWqP,YAAYuD,EAAMtE,KAGrC,GAAImE,mBAAsBE,GAAc,CACpC,MAAM1oB,EAAmBpL,QAAQ8zB,EAAan2B,GACxCyZ,EAAWpX,QAAQ8zB,EAAal2B,GAChCyZ,EAASrX,QAAQ8zB,EAAaj2B,GAC9BmD,EAAWkzB,SAAYl0B,QAAQ8zB,EAAa11B,IAClD,GAAI4C,IAAa+yB,EAAK7D,IAClB,MAAM,IAAIvqB,WAAW,6CAA6C3E,6BAAoC+yB,EAAK7D,OAE/G,MAAM7O,EAAW,IAAI2S,EAAS5oB,EAAkBgM,EAAUC,EAAQ,GAAI,EAAG,EAAG,EAAG,EAAG,EAAGrW,GACrF,MAAO,CACHsX,QAAS2b,6BAAgCvD,wBAAwBqD,GAAO1S,EAAU,cAClFF,UAAWqP,YAAYuD,EAAMrE,KAGrC,GAAI6D,eAAkBO,GAAc,CAChC,MAAM3c,EAAUnX,QAAQ8zB,EAAan2B,GAC/ByZ,EAAWpX,QAAQ8zB,EAAal2B,GAChCyZ,EAASrX,QAAQ8zB,EAAaj2B,GAC9BmD,EAAWkzB,SAAYl0B,QAAQ8zB,EAAa11B,IAClD,GAAiB,YAAb4C,GAA0BA,IAAa+yB,EAAK7D,IAC5C,MAAM,IAAIvqB,WAAW,yCAAyC3E,6BAAoC+yB,EAAK7D,OAE3G,MAAM7O,EAAW,IAAI2S,EAAS7c,EAASC,EAAUC,EAAQ,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG0c,EAAK7D,KACjF,MAAO,CACH5X,QAAS2b,6BAAgCvD,wBAAwBqD,GAAO1S,EAAU,cAClFF,UAAWqP,YAAYuD,EAAMvE,KAGrC,GAAIiE,mBAAsBK,GAAc,CACpC,MAAM3c,EAAUnX,QAAQ8zB,EAAan2B,GAC/ByZ,EAAWpX,QAAQ8zB,EAAal2B,GAChCyZ,EAASrX,QAAQ8zB,EAAaj2B,GAC9BsK,EAAOnI,QAAQ8zB,EAAah2B,GAC5BsK,EAASpI,QAAQ8zB,EAAa/1B,GAC9BsK,EAASrI,QAAQ8zB,EAAa91B,GAC9BqM,EAAcrK,QAAQ8zB,EAAa71B,GACnCqM,EAActK,QAAQ8zB,EAAa51B,GACnCqM,EAAavK,QAAQ8zB,EAAa31B,GAClC6C,EAAWkzB,SAAYl0B,QAAQ8zB,EAAa11B,IAClD,GAAiB,YAAb4C,GAA0BA,IAAa+yB,EAAK7D,IAC5C,MAAM,IAAIvqB,WAAW,6CAA6C3E,6BAAoC+yB,EAAK7D,OAE/G,IAAI7O,EAAWyS,EAIf,MAHiB,YAAb9yB,IACAqgB,EAAW,IAAI2S,EAAS7c,EAASC,EAAUC,EAAQlP,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYwpB,EAAK7D,MAEjH,CACH5X,QAAS2b,6BAAgCvD,wBAAwBqD,GAAO1S,EAAU,cAClFF,UAAWqP,YAAYuD,EAAMnE,KAGrC,GAAI8D,wBAA2BI,GAAc,CACzC,MAAM9yB,EAAWkzB,SAAYl0B,QAAQ8zB,EAAa11B,IAClD,GAAiB,YAAb4C,GAA0BA,IAAa+yB,EAAK7D,IAC5C,MAAM,IAAIvqB,WAAW,6CAA6C3E,6BAAoC+yB,EAAK7D,OAE/G,MACMiE,EAAcD,SADHl0B,QAAQ8zB,EAAax1B,IAEtC,GAAIy1B,EAAK9D,KAAa8D,EAAK9D,MAAckE,EACrC,MAAM,IAAIxuB,WAAW,mBAAmBouB,EAAK9D,sCAA4CkE,KAE7F,MAAO,CACH7b,QAAStY,QAAQ8zB,EAAaz1B,GAC9B8iB,UAAWqP,YAAYuD,EAAMlE,IAC7BhoB,SAAUssB,GAGlB,OAAIN,kBAAqBC,GACd,CACHxb,QAASwb,EACT3S,UAAWqP,YAAYuD,EAAMjE,KAG9B,4DCreJ,MAAM5T,QACTkY,YAAYhc,GAGR,GAAIic,UAAU/nB,OAAS,EACnB,MAAM,IAAIrM,UAAU,kDAExB,MAAM+U,EAAKsf,SAAYlc,GACvBmc,yBAA4Bvf,GAC5B5V,YAAY0xB,MACZ5wB,QAAQ4wB,KAAMrzB,EAAkBuX,GAWpCwf,mBACI,IAAKX,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMtD,EAAQqD,QAAQ8wB,KAAMrzB,GAC5B,OAAOyG,EAAKwS,SAASxS,EAAKkC,OAAOzJ,EAAO6H,KAE5Cic,wBACI,IAAKoT,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMtD,EAAQuH,EAAKC,OAAOnE,QAAQ8wB,KAAMrzB,IACxC,OAAOyG,EAAKwS,SAASxS,EAAKkC,OAAOzJ,EAAO4H,KAE5CkwB,wBACI,IAAKZ,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMtD,EAAQuH,EAAKC,OAAOnE,QAAQ8wB,KAAMrzB,IACxC,OAAOi3B,iBAAoBxwB,EAAKkC,OAAOzJ,EAAO2H,KAElD8T,uBACI,IAAKyb,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOy0B,iBAAoBxwB,EAAKC,OAAOnE,QAAQ8wB,KAAMrzB,KAEzD8e,IAAIpN,GACA,IAAK0kB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO00B,2CAA8C,MAAO7D,KAAM3hB,GAEtEgH,SAAShH,GACL,IAAK0kB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO00B,2CAA8C,WAAY7D,KAAM3hB,GAE3EylB,MAAMzL,EAAO7Z,GACT,IAAKukB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO40B,0BAA6B,QAAS/D,KAAM3H,EAAO7Z,GAE9DwlB,MAAM3L,EAAO7Z,GACT,IAAKukB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO40B,0BAA6B,QAAS/D,KAAM3H,EAAO7Z,GAE9DylB,MAAMrhB,GACF,IAAKmgB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,QAAqB5C,IAAjBqW,EACA,MAAM,IAAIzT,UAAU,iCACxB,MAAMqP,EAAkC,iBAAjBoE,EACjBshB,oBAAuB,eAAgBthB,GACvCuhB,iBAAoBvhB,GACpBjD,EAAeykB,gBAAmB5lB,EAAS,eAAgB,OAAQ6lB,IACnEvlB,EAAewlB,uBAA0B9lB,EAAS,cASlDia,EAAoB8L,4BAA+B/lB,EAR/B,CACtBnH,KAAM,GACNC,OAAQ,KACRC,OAAQ,MACRgC,YAAa,MACbC,YAAa,MACbC,WAAY,QAEoEkG,IAAe,GAE7F6kB,EAAYC,aADPv1B,QAAQ8wB,KAAMrzB,GACa8rB,EAAmB9Y,EAAcb,GACvE,OAAO,IAAIsM,QAAQoZ,GAEvBE,OAAOtM,GACH,IAAK2K,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQsM,kBAAqBvM,GAC7BhO,EAAMlb,QAAQ8wB,KAAMrzB,GACpB0d,EAAMnb,QAAQmpB,EAAO1rB,GAC3B,OAAOyG,EAAKoa,MAAMpa,EAAKC,OAAO+W,GAAMhX,EAAKC,OAAOgX,IAEpD1R,SAASiK,GACL,IAAKmgB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,GACpC,IAAI7L,EAAWyH,EAAQzH,cACNxK,IAAbwK,IACAA,EAAW8oB,mBAAsB9oB,IAErC,MAAMoJ,UAAEA,EAASC,KAAEA,EAAId,UAAEA,GAAcslB,yBAA4BpmB,GAC7DM,EAAewlB,uBAA0B9lB,EAAS,SAElDgmB,EAAYC,aADPv1B,QAAQ8wB,KAAMrzB,GACa2S,EAAWc,EAAMtB,GAEvD,OAAO+lB,wBADgB,IAAIzZ,QAAQoZ,GACeztB,EAAUoJ,GAEhE2kB,SACI,IAAK/B,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO01B,wBAA2B7E,UAAMzzB,EAAW,QAEvDw4B,eAAelE,EAAqBriB,GAChC,IAAKukB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvDgF,UACI,MAAM,IAAI71B,UAAU,yDAExB81B,gBAAgBxtB,GACZ,IAAKsrB,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYztB,GACb,MAAM,IAAItI,UAAU,uCAExB,MAAM4a,EAAetS,EAAKvH,SAC1B,QAAqB3D,IAAjBwd,EACA,MAAM,IAAI5a,UAAU,gDAExB,MAAMe,EAAWi1B,mBAAsBpb,GACjCc,EAAuBpT,EAAKV,SAClC,QAA6BxK,IAAzBse,EACA,MAAM,IAAI1b,UAAU,gDAExB,MAAM4H,EAAW8oB,mBAAsBhV,GACvC,OAAOua,4BAA+Bl2B,QAAQ8wB,KAAMrzB,GAAmBoK,EAAU7G,GAErFm1B,mBAAmB7hB,GACf,IAAI/L,EAAO+L,EACX,IAAKuf,kBAAqB/C,MACtB,MAAM,IAAI7wB,UAAU,oBACxB,GAAI+1B,SAAYztB,GAAO,CACnB,MAAM6tB,EAAmB7tB,EAAKV,cACLxK,IAArB+4B,IACA7tB,EAAO6tB,GAGf,MAAMvuB,EAAW8oB,mBAAsBpoB,GACjCvH,EAAWq1B,qBACjB,OAAOH,4BAA+Bl2B,QAAQ8wB,KAAMrzB,GAAmBoK,EAAU7G,GAErFs1B,wBAAwBC,GACpB,MAAM/B,EAAegC,SAAYD,GAC3Bne,EAAmBlU,EAAKS,SAAST,EAAKC,OAAOqwB,GAAehwB,IAElE,OADA+vB,yBAA4Bnc,GACrB,IAAI8D,QAAQ9D,GAEvBqe,6BAA6BC,GACzB,MAAMjW,EAAoB+V,SAAYE,GAChCte,EAAmBlU,EAAKS,SAAST,EAAKC,OAAOsc,GAAoBlc,IAEvE,OADAgwB,yBAA4Bnc,GACrB,IAAI8D,QAAQ9D,GAEvBue,6BAA6BC,GACzB,MAAMnC,EAAoBH,SAAYsC,GAChCxe,EAAmBlU,EAAKS,SAAS8vB,EAAmBnwB,IAE1D,OADAiwB,yBAA4Bnc,GACrB,IAAI8D,QAAQ9D,GAEvBye,4BAA4BC,GACxB,MAAM1e,EAAmBkc,SAAYwC,GAErC,OADAvC,yBAA4Bnc,GACrB,IAAI8D,QAAQ9D,GAEvB9Q,YAAYiB,GACR,OAAIsrB,kBAAqBtrB,GACd,IAAI2T,QAAQlc,QAAQuI,EAAM9K,IAE9Bg4B,kBAAqBltB,GAEhCwuB,eAAeC,EAAUC,GACrB,MAAM/b,EAAMua,kBAAqBuB,GAC3B7b,EAAMsa,kBAAqBwB,GAC3BC,EAAQl3B,QAAQkb,EAAKzd,GACrB05B,EAAQn3B,QAAQmb,EAAK1d,GAC3B,OAAIyG,EAAKoC,SAAS4wB,EAAOC,IACb,EACRjzB,EAAKsc,YAAY0W,EAAOC,GACjB,EACJ,GAIfh7B,mBAAmB+f,QAAS,oBCxM5B,MAAM1a,GAAgBC,MAAMjF,UAAUkF,SAChCC,GAAqBF,MAAMjF,UAAUoF,KACrCC,GAAqBC,WAAWC,KAAKC,eACrCo1B,GAAY31B,MAAMjF,UAAUgL,KAC5BlF,GAAUJ,KAAKK,IACfC,GAAYN,KAAKO,MACjB40B,GAAgB/6B,OAAOg7B,QACvBC,GAAaj7B,OAAOiL,KAKpBiwB,GAAO,GAaN,MAAMC,SACTrD,YAAYsD,GAGR,GAAIrD,UAAU/nB,OAAS,EACnB,MAAM,IAAI3G,WAAW,oCAEzB,MAAM5F,EAAKm0B,SAAYwD,GACvB,IAAKC,kBAAqB53B,GACtB,MAAM,IAAI4F,WAAW,+BAA+B5F,KACxDX,YAAY0xB,MACZ5wB,QAAQ4wB,KAAM7xB,EAAac,GAU/BA,SACI,IAAK63B,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOi0B,SAAYpD,MAEvBvV,eAAe/I,EAAQkB,GACnB,IAAKkkB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYxjB,GACb,MAAM,IAAIvS,UAAU,kBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,GACpC,OAAO8jB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcsc,eAAe/I,EAAQlD,EAASwhB,MAE5EtV,oBAAoBhJ,EAAQkB,GACxB,IAAKkkB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYxjB,GACb,MAAM,IAAIvS,UAAU,kBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,GACpC,OAAO8jB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcuc,oBAAoBhJ,EAAQlD,EAASwhB,MAEjFrV,mBAAmBjJ,EAAQkB,GACvB,IAAKkkB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYxjB,GACb,MAAM,IAAIvS,UAAU,kBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,GACpC,OAAO8jB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcwc,mBAAmBjJ,EAAQlD,EAASwhB,MAEhFte,OAAOA,GACH,IAAKolB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM43B,EAAc,GACd/mB,EAAU,IAAIgnB,IAAI,CACpB,OACA,QACA,YACA,MACA,OACA,SACA,SACA,cACA,cACA,eAEJ,IAAK,MAAMz7B,KAAQmW,EAAQ,CACvB,GAAoB,iBAATnW,EACP,MAAM,IAAI4D,UAAU,kBACxB,IAAK6Q,EAAQmB,IAAI5V,GACb,MAAM,IAAIsJ,WAAW,sBAAsBtJ,KAC/CyU,EAAQinB,OAAO17B,GACfsF,GAAmBoS,KAAK8jB,EAAax7B,GAEzC,OAAOm7B,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcuT,OAAOqlB,GAEnDhf,YAAYrG,EAAQmG,GAChB,IAAKif,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOu3B,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc4Z,YAAYrG,EAAQmG,GAEhEK,QAAQgf,EAAWC,EAAevkB,GAC9B,IAAKkkB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMyU,EAAOwjB,eAAkBF,GACzBz2B,EAAW42B,mBAAsBF,GAEjC9pB,EAAWiqB,mBADDnD,iBAAoBvhB,KAE9B9H,KAAEA,GAASysB,gBAAmBr4B,QAAQuB,EAAU7C,GAAOsB,QAAQuB,EAAU5C,GAAQqB,QAAQuB,EAAU3C,GAAUoB,QAAQuB,EAAU1C,GAAUmB,QAAQuB,EAAUzC,GAAekB,QAAQuB,EAAUxC,GAAeiB,QAAQuB,EAAUvC,GAAc,OACjP,OAAOw4B,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc+Z,QAAQtE,EAAM1U,QAAQuB,EAAUhD,GAAQyB,QAAQuB,EAAU/C,GAASwB,QAAQuB,EAAU9C,GAAQmN,EAAMuC,EAAU2iB,MAEzJ1X,UAAU4d,EAAUC,EAAUvjB,GAC1B,IAAKkkB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMib,EAAMgd,eAAkBlB,GACxB7b,EAAM+c,eAAkBjB,GAE9B,IAAItjB,EAAcuhB,gBADFD,iBAAoBvhB,GACU,cAAe,OAAQ,QACjD,SAAhBC,IACAA,EAAc,OAClB,MAAMlI,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,GAAS4rB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcma,UAAU8B,EAAKC,EAAKxH,GAE5F,OAAO,IADUpW,aAAa,uBACvB,CAAakO,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAEnE5D,KAAKgwB,GACD,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc+I,KAAK0M,GAEjDzM,MAAM+vB,GACF,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,GAAI2zB,mBAAsBlf,GACtB,MAAM,IAAIzU,UAAU,0CAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcgJ,MAAMyM,GAElDU,UAAU4iB,GACN,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,IAAUkf,mBAAsBlf,KACxDA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcmW,UAAUV,GAEtDxM,IAAI8vB,GACA,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK2zB,mBAAsBlf,KACvBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAciJ,IAAIwM,GAEhD3M,IAAIiwB,GACA,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc8I,IAAI2M,GAEhDV,QAAQgkB,GACJ,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc+U,QAAQU,GAEpDmF,UAAUme,GACN,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMyU,EAAOwjB,eAAkBF,GAC/B,OAAOR,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc4a,UAAUnF,GAEtDqF,UAAUie,GACN,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMyU,EAAOwjB,eAAkBF,GAC/B,OAAOR,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc8a,UAAUrF,GAEtDuF,WAAW+d,GACP,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMyU,EAAOwjB,eAAkBF,GAC/B,OAAOR,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcgb,WAAWvF,GAEvDyF,WAAW6d,GACP,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMyU,EAAOwjB,eAAkBF,GAC/B,OAAOR,GAAKx3B,QAAQ8wB,KAAM7xB,IAAckb,WAAWzF,GAEvD2F,YAAY2d,GACR,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcob,YAAY3F,GAExD6F,WAAWyd,GACP,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcsb,WAAW7F,GAEvD+F,aAAaud,GACT,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAcwb,aAAa/F,GAEzDiG,WAAWqd,GACP,IAAItjB,EAAOsjB,EACX,IAAKJ,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAFK0zB,oBAAuBjf,KACxBA,EAAOwjB,eAAkBxjB,IACtB8iB,GAAKx3B,QAAQ8wB,KAAM7xB,IAAc0b,WAAWjG,GAEvDjL,WACI,IAAKmuB,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM7xB,GAEzB22B,SACI,IAAKgC,mBAAsB9G,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOi0B,SAAYpD,MAEvBxpB,YAAYiB,GACR,OAAO0tB,mBAAsB1tB,IA2HrC,SAAS+vB,oBAAoBljB,GACzB,IAAKA,EAAUkZ,WAAW,KACtB,MAAM,IAAI3oB,WAAW,uBAAuByP,sCAEhD,MAAMnN,GAASmN,EAAUjL,MAAM,GAC/B,GAAInH,MAAMiF,GACN,MAAM,IAAItC,WAAW,uBAAuByP,KAChD,OAAOnN,EAEX,SAASswB,eAAetwB,EAAOuwB,GAAO,GAClC,MAAO,IAAIvwB,EAAMwB,WAAW2T,SAAS,EAAG,OAAOob,EAAO,IAAM,KAOhE,SAASC,yBAAyBC,EAAcvqB,EAAsBwqB,EAAgB,IAClF,IAAI1wB,MAAEA,EAAKmN,UAAEA,GAAcsjB,EAC3B,QAAkBr7B,IAAd+X,EAAyB,CACzB,QAAc/X,IAAV4K,EACA,MAAM,IAAIhI,UAAU,0CAIP,WAAbkO,GACAyqB,cAAiB3wB,EAAO,EAAG0wB,GACd,cAAbxqB,IACAlG,EAAQ4wB,iBAAoB5wB,EAAO,EAAG0wB,IAC1CvjB,EAAYmjB,eAAetwB,OAE1B,CACD,MAAM6wB,EAAaR,oBAAoBljB,GACvC,QAAc/X,IAAV4K,GAAuBA,IAAU6wB,EACjC,MAAM,IAAInzB,WAAW,aAAayP,eAAuBnN,oCAE7D,GAAImN,IAAcmjB,eAAeO,GAC7B,MAAM,IAAInzB,WAAW,uBAAuByP,KAGhD,GADAnN,EAAQ6wB,EACJ7wB,EAAQ,GAAKA,EAAQ0wB,EACrB,MAAM,IAAIhzB,WAAW,sBAAsByP,KAEnD,MAAO,IAAKsjB,EAAczwB,MAAAA,EAAOmN,UAAAA,GAlKrCjZ,mBAAmBs7B,SAAU,qBAC7Bt6B,gBAAgB,yBAA0Bs6B,SAASnwB,MAMnDkwB,GAAc,QAAI,CACdjc,eAAewd,EAAazpB,EAAStO,GACjC,MAAMmN,EAAWiqB,mBAAsB9oB,GACvC,IAAIkD,EAASwmB,sBAAyBD,EAAa,CAAC,MAAO,QAAS,YAAa,QAAS,CAAC,OAAQ,QACnGvmB,EAASimB,yBAAyBjmB,GAClC,IAAIxK,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQsK,EAE3B,QADGxK,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAAQ+wB,gBAAmBjxB,EAAMC,EAAOC,EAAKiG,IACtD+qB,mBAAsBlxB,EAAMC,EAAOC,EAAKlH,IAEnDwa,oBAAoBud,EAAazpB,EAAStO,GACtC,MAAMmN,EAAWiqB,mBAAsB9oB,GACvC,IAAIkD,EAASwmB,sBAAyBD,EAAa,CAAC,QAAS,YAAa,QAAS,CAAC,SACpFvmB,EAASimB,yBAAyBjmB,GAClC,IAAIxK,KAAEA,EAAIC,MAAEA,GAAUuK,EAEtB,QADGxK,KAAAA,EAAMC,MAAAA,GH4QV,SAASkxB,qBAAqBnrB,EAAWC,EAAYE,GACxD,IAAInG,EAAOgG,EACP/F,EAAQgG,EAEZ,OAAQE,GACJ,IAAK,SACDC,cAAcpG,EAAMC,EAHJ,GAIhB,MACJ,IAAK,cACED,KAAAA,EAAMC,MAAAA,GAAUoG,iBAAiBrG,EAAMC,IAGlD,MAAO,CAAED,KAAAA,EAAMC,MAAAA,GGxRQmxB,CAAwBpxB,EAAMC,EAAOkG,IACjDkrB,wBAA2BrxB,EAAMC,EAAOjH,EAAkC,IAErFya,mBAAmBsd,EAAazpB,EAAStO,GACrC,MAAMmN,EAAWiqB,mBAAsB9oB,GACvC,IAAIkD,EAASwmB,sBAAyBD,EAAa,CAAC,MAAO,QAAS,YAAa,QAAS,CAAC,QAC3F,QAAqB17B,IAAjBmV,EAAOvK,YAAuC5K,IAAhBmV,EAAOxK,WAA2C3K,IAArBmV,EAAO4C,UAClE,MAAM,IAAInV,UAAU,gDAExB,MAAMq5B,OAA+Bj8B,IAArBmV,EAAO4C,UAEvB5C,EAASimB,yBAAyBjmB,GAClC,IAAIvK,MAAEA,EAAKC,IAAEA,EAAGF,KAAEA,GAASwK,EAE3B,QADGvK,MAAAA,EAAOC,IAAAA,GAAQ+wB,gBAAmBK,EAAUtxB,EAHtB,KAG+CC,EAAOC,EAAKiG,IAC7EorB,uBAA0BtxB,EAAOC,EAAKlH,EAJpB,OAM7BwR,OAAOA,GACIA,EAEXqG,YAAYrG,EAAQmG,GAChB,MAAM6gB,EAAS,GACf,IAAK,MAAMC,KAAWlC,GAAW/kB,GACb,UAAZinB,GAAmC,cAAZA,IAE3BD,EAAOC,GAAWjnB,EAAOinB,IAE7B,MAAMC,EAAUnC,GAAW5e,GAC3B,IAAK,MAAM8gB,KAAWC,EAClBF,EAAOC,GAAW9gB,EAAiB8gB,GAEvC,IAAKj4B,GAAcuS,KAAK2lB,EAAS,WAAal4B,GAAcuS,KAAK2lB,EAAS,aAAc,CACpF,MAAMzxB,MAAEA,EAAKmN,UAAEA,GAAc5C,OACfnV,IAAV4K,IACAuxB,EAAOvxB,MAAQA,QACD5K,IAAd+X,IACAokB,EAAOpkB,UAAYA,GAE3B,OAAOokB,GAEXxgB,QAAQtE,EAAMjJ,EAAOC,EAAQC,EAAOC,EAAMuC,EAAUnN,GAChD,IAAIgH,EAAOhI,QAAQ0U,EAAM/W,GACrBsK,EAAQjI,QAAQ0U,EAAM9W,GACtBsK,EAAMlI,QAAQ0U,EAAM7W,GAExB,QADGmK,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,GAAQyxB,WAAc3xB,EAAMC,EAAOC,EAAKuD,EAAOC,EAAQC,EAAOC,EAAMuC,IAC7E+qB,mBAAsBlxB,EAAMC,EAAOC,EAAKlH,IAEnDoY,UAAS,CAAC8B,EAAKC,EAAKxH,IACTimB,kBAAqB55B,QAAQkb,EAAKvd,GAAWqC,QAAQkb,EAAKtd,GAAYoC,QAAQkb,EAAKrd,GAAUmC,QAAQmb,EAAKxd,GAAWqC,QAAQmb,EAAKvd,GAAYoC,QAAQmb,EAAKtd,GAAU8V,GAEhL3L,KAAK0M,GACM1U,QAAQ0U,EAAM/W,GAEzBoK,QAGAiM,YAGA/L,MAAMyM,GACK1U,QAAQ0U,EAAM9W,GAEzBwX,UAAUV,GACC6jB,eAAev4B,QAAQ0U,EAAM9W,IAExCsK,IAAIwM,GACO1U,QAAQ0U,EAAM7W,GAEzBgc,UAAUnF,GACCmlB,UAAa75B,QAAQ0U,EAAM/W,GAAWqC,QAAQ0U,EAAM9W,GAAYoC,QAAQ0U,EAAM7W,IAEzFkc,UAAUrF,GACColB,UAAa95B,QAAQ0U,EAAM/W,GAAWqC,QAAQ0U,EAAM9W,GAAYoC,QAAQ0U,EAAM7W,IAEzFoc,WAAWvF,GH42DR,SAASqlB,WAAW/xB,EAAMC,EAAOC,GACpC,MAAM8xB,EAAMlX,UAAU9a,EAAMC,EAAOC,GAC7B2a,EAAMH,UAAU1a,EAAMC,EAAOC,IAAQ,EACrC+xB,EAAMvX,UAAU1a,EAAM,EAAG,GACzB0I,EAAOlO,GAAWw3B,EAAMnX,EAAM,IAAM,GAC1C,OAAInS,EAAO,EACK,IAARupB,GAAsB,IAARA,GAAa3X,SAASta,EAAO,GACpC,GAGA,GAGF,KAAT0I,IACK4R,SAASta,GAAQ,IAAM,KAAOgyB,EAAM,EAAInX,EAClC,EAGRnS,EG73DIwpB,CAAcl6B,QAAQ0U,EAAM/W,GAAWqC,QAAQ0U,EAAM9W,GAAYoC,QAAQ0U,EAAM7W,IAE1Fsc,WAAU,IACC,EAEXE,YAAY3F,GACDylB,eAAkBn6B,QAAQ0U,EAAM/W,GAAWqC,QAAQ0U,EAAM9W,IAEpE2c,WAAWyd,GACP,IAAItjB,EAAOsjB,EAGX,OAFKt4B,QAAQgV,EAAM/W,KACf+W,EAAOwjB,eAAkBxjB,IACtB0lB,SAAYp6B,QAAQ0U,EAAM/W,IAAa,IAAM,KAExD8c,aAAY,IACD,GAEXE,WAAWqd,GACP,IAAItjB,EAAOsjB,EAGX,OAFKt4B,QAAQgV,EAAM/W,KACf+W,EAAOwjB,eAAkBxjB,IACtB0lB,SAAYp6B,QAAQ0U,EAAM/W,MAwDzC,MAAM08B,eACFjG,YAAYkG,GAMR,GALAxJ,KAAK/pB,IAAM,IAAIJ,IACfmqB,KAAKyJ,MAAQ,EACbzJ,KAAK0J,KAAO,EACZ1J,KAAK2J,OAAS,EACd3J,KAAKvC,IAAMzsB,WAAW44B,YAAc54B,WAAW44B,YAAYnM,MAAQnO,KAAKmO,WACnDlxB,IAAjBi9B,EAA4B,CAC5B,IAAIK,EAAI,EACR,IAAK,MAAMC,KAASN,EAAavzB,IAAIuwB,UAAW,CAC5C,KAAMqD,EAAIN,eAAeQ,kBACrB,MACJ/J,KAAK/pB,IAAIzH,OAAOs7B,KAI5Bn7B,IAAIrC,GACA,MAAMsM,EAASonB,KAAK/pB,IAAItH,IAAIrC,GAM5B,OALIsM,IACAonB,KAAK0J,OACL1J,KAAKgK,UAEThK,KAAKyJ,QACE7wB,EAEXpK,IAAIlC,EAAKT,GACLm0B,KAAK/pB,IAAIzH,IAAIlC,EAAKT,GAClBm0B,KAAK2J,SACL3J,KAAKgK,SAETA,UAQAC,UAAUtK,GACN,GAAI4J,eAAeW,UAAUv7B,IAAIgxB,GAC7B,MAAM,IAAI9qB,WAAW,yBACzB00B,eAAeW,UAAU17B,IAAImxB,EAAKK,MAClCA,KAAKgK,SAQTG,yBAAyBxK,GACrB,IAAIyK,EAAQb,eAAeW,UAAUv7B,IAAIgxB,GAKzC,OAJKyK,IACDA,EAAQ,IAAIb,eACZA,eAAeW,UAAU17B,IAAImxB,EAAKyK,IAE/BA,GAKf,SAASC,oBAAmBhkB,QAAEA,EAAOC,SAAEA,EAAQC,OAAEA,IAI7C,MAAO,GAHY+jB,cAAiBjkB,MAChBkkB,sBAAyBjkB,MAC3BikB,sBAAyBhkB,YAG/C,SAASikB,eAAepgB,EAAKC,GACzB,MAAO,CACH1P,MAAOyP,EAAIlT,KAAOmT,EAAInT,KACtB0D,OAAQwP,EAAIjT,MAAQkT,EAAIlT,MACxB2D,KAAMsP,EAAIhT,IAAMiT,EAAIjT,KAZ5BmyB,eAAeW,UAAY,IAAI77B,QAC/Bk7B,eAAeQ,kBAAoB,IAiBnC,MAAMU,WACFnH,cAGItD,KAAK0K,UAAY,QAEjB1K,KAAK2K,QAAS,EAElBC,eAgBI,YAT8B,IAAnB5K,KAAK3P,YACZ2P,KAAK3P,UAAY,IAAItf,GAAmB,cAAcivB,KAAK/wB,KAAM,CAC7DmI,IAAK,UACLD,MAAO,UACPD,KAAM,UACND,IAAK+oB,KAAK0K,UACV3zB,SAAU,SAGXipB,KAAK3P,UAEhBwa,kBAAkBC,EAASV,GACvB,MAAQlzB,KAAMmP,EAASlP,MAAOmP,EAAUlP,IAAKmP,GAAWukB,EAClDx+B,EAAMy+B,KAAKC,UAAU,CAAEC,KAAM,oBAAqB5kB,QAAAA,EAASC,SAAAA,EAAUC,OAAAA,EAAQtX,GAAI+wB,KAAK/wB,KACtFi8B,EAASd,EAAMz7B,IAAIrC,GACzB,GAAI4+B,EACA,OAAOA,EACX,MAAMC,EAAiBnL,KAAK4K,eAC5B,IAAIpa,EAAOxX,EACX,IACIA,EAAYqxB,mBAAmB,CAAEhkB,QAAAA,EAASC,SAAAA,EAAUC,OAAAA,IACpDiK,EAAQ2a,EAAetJ,cAAc,IAAIvS,KAAKtW,IAElD,MAAO9C,GACH,MAAM,IAAIrB,WAAW,qBAAqBk2B,KAAKC,UAAU,CAAE3kB,QAAAA,EAASC,SAAAA,EAAUC,OAAAA,OAElF,MAAM3N,EAAS,GACf,IAAK,IAAIwyB,KAAEA,EAAIv/B,MAAEA,KAAW2kB,EAAO,CAM/B,GALa,SAAT4a,IACAxyB,EAAOsK,SAAWrX,GAET,gBAATu/B,IACAxyB,EAAOsK,SAAWrX,GACT,UAATu/B,EAAkB,CAClB,MAAMC,EAAU,kBAAkBlyB,KAAKtN,GACvC,IAAKw/B,GAA6B,GAAlBA,EAAQ7vB,SAAiB6vB,EAAQ,KAAOA,EAAQ,GAC5D,MAAM,IAAIx2B,WAAW,qBAAqBhJ,KAS9C,GADA+M,EAAOzB,MAAQk0B,EAAQ,IAAMA,EAAQ,GAAK,EACtCzyB,EAAOzB,MAAQ,EACf,MAAM,IAAItC,WAAW,iBAAiBhJ,UAAcmN,UAAkBgnB,KAAK/wB,+EAG/E,GAAI2J,EAAOzB,MAAQ,GACf,MAAM,IAAItC,WAAW,iBAAiBhJ,UAAcmN,UAAkBgnB,KAAK/wB,+EAO3Eo8B,EAAQ,KACRzyB,EAAO0yB,WAAaD,EAAQ,IAEvB,QAATD,IACAxyB,EAAOxB,KAAOvL,GACdm0B,KAAK2K,QAAmB,QAATS,GAA2B,MAATv/B,GAA2B,KAAVA,IAQlDA,EAAQA,EAAM4kB,MAAM,MAAM,GAC1B7X,EAAO3B,IAAMpL,EACR0/B,UAAU,OACVC,QAAQ,kBAAmB,IAC3BA,QAAQ,IAAK,KACbC,eAGb,QAAuBl/B,IAAnBqM,EAAOsK,QAGP,MAAM,IAAIrO,WAAW,0DAA0DmrB,KAAK/wB,iDAIxF,GAAI+wB,KAAK0L,cAAe,CACpB,MAAMz0B,IAAEA,EAAGiM,QAAEA,GAAY8c,KAAK0L,cAAc9yB,EAAQkyB,GACpDlyB,EAAO3B,IAAMA,EACb2B,EAAOsK,QAAUA,EAEjB8c,KAAK2L,cACL3L,KAAK2L,aAAab,GACtB,MAAMlD,EAAe5H,KAAK4L,mBAAmBhzB,EAAQwxB,EAAO,aAAa,GACzE,QAA0B79B,IAAtBq7B,EAAa1wB,KACb,MAAM,IAAIrC,WAAW,2BAA2Bk2B,KAAKC,UAAUF,MACnE,QAA2Bv+B,IAAvBq7B,EAAazwB,MACb,MAAM,IAAItC,WAAW,4BAA4Bk2B,KAAKC,UAAUF,MACpE,QAAyBv+B,IAArBq7B,EAAaxwB,IACb,MAAM,IAAIvC,WAAW,0BAA0Bk2B,KAAKC,UAAUF,MAclE,OAbAV,EAAM57B,IAAIlC,EAAKs7B,GAEf,CAAC,YAAa,UAAU3rB,SAASoB,IAC7B,MAAMwuB,EAAad,KAAKC,UAAU,CAC9BC,KAAM,oBACN/zB,KAAM0wB,EAAa1wB,KACnBC,MAAOywB,EAAazwB,MACpBC,IAAKwwB,EAAaxwB,IAClBiG,SAAAA,EACApO,GAAI+wB,KAAK/wB,KAEbm7B,EAAM57B,IAAIq9B,EAAYf,MAEnBlD,EAEXkE,qBAAqBlE,GACjB,MAAM3wB,IAAEA,EAAGE,MAAEA,EAAKD,KAAEA,EAAIE,IAAEA,EAAG8L,QAAEA,EAAOoB,UAAEA,EAASgnB,WAAEA,GAAe1D,EAGlE,QAAmBr7B,IAAf++B,EACA,MAAM,IAAIz2B,WAAW,iCACzB,QAAatI,IAAT2K,QAAkC3K,IAAZ2W,EACtB,MAAM,IAAI/T,UAAU,+BACxB,QAAc5C,IAAV4K,QAAqC5K,IAAd+X,EACvB,MAAM,IAAInV,UAAU,kCACxB,QAAY5C,IAAR6K,EACA,MAAM,IAAIvC,WAAW,eACzB,QAAkBtI,IAAd+X,EAAyB,CACzB,GAAyB,iBAAdA,EACP,MAAM,IAAIzP,WAAW,0CAA0CyP,GAEnE,IAAK,mBAAmBM,KAAKN,GACzB,MAAM,IAAIzP,WAAW,sBAAsByP,KAEnD,GAAI0b,KAAK+L,YAAa,CAClB,QAAYx/B,IAAR0K,GAAqBA,IAAQ+oB,KAAK+L,YAClC,MAAM,IAAIl3B,WAAW,eAAemrB,KAAK+L,oBAAoB90B,KAEjE,QAAgB1K,IAAZ2W,QAAkC3W,IAAT2K,GAAsBgM,IAAYhM,EAC3D,MAAM,IAAIrC,WAAW,WAAWqO,yBAA+BhM,MAe3E00B,mBAAmBI,EAAmB5B,EAAmB/sB,EAAW,YAGpE4uB,GAAiB,GACb,GAA0B,cAAtBjM,KAAKkM,aACL,MAAM,IAAIr3B,WAAW,6CACzB,IAAI+yB,EAAeoE,EAInB,GAHAhM,KAAK8L,qBAAqBlE,GAGtB5H,KAAK+L,YAAa,CAElB,MAAM70B,KAAEA,EAAIgM,QAAEA,GAAY0kB,EAC1BA,EAAe,IACRA,EACH3wB,IAAK+oB,KAAK+L,YACV70B,UAAe3K,IAAT2K,EAAqBA,EAAOgM,EAClCA,aAAqB3W,IAAZ2W,EAAwBA,EAAUhM,GAGnD,MAAMi1B,EAAenM,KAAKrW,aAAaie,EAAcwC,GACrD,IAAIjzB,MAAEA,EAAKmN,UAAEA,GAAcsjB,EAE3B,QADGzwB,MAAAA,EAAOmN,UAAAA,GAAcqjB,yBAAyBC,EAAcvqB,EAAU8uB,IAClE,IAAKvE,EAAczwB,MAAAA,EAAOmN,UAAAA,GAErC8nB,sBAAsBxE,EAAcvqB,EAAU+sB,GAC1C,MAAM+B,EAAenM,KAAKrW,aAAaie,EAAcwC,GACrD,IAAIjzB,MAAEA,EAAKC,IAAEA,GAAQwwB,EASrB,MARiB,WAAbvqB,GACAyqB,cAAiB3wB,EAAO,EAAGg1B,GAC3BrE,cAAiB1wB,EAAK,EAAG4oB,KAAKqM,mBAAmBzE,MAGjDzwB,EAAQ4wB,iBAAoB5wB,EAAO,EAAGg1B,GACtC/0B,EAAM2wB,iBAAoB3wB,EAAK,EAAG4oB,KAAKqM,mBAAmB,IAAKzE,EAAczwB,MAAAA,MAE1E,IAAKywB,EAAczwB,MAAAA,EAAOC,IAAAA,GAErCk1B,kBAAkBpF,EAAW7pB,EAAW,YAAa+sB,GACjD,MAAMmC,EAAerF,EAGrB,IAAItjB,EAAOoc,KAAK4L,mBAAmB1E,EAAWkD,EAAO/sB,GAAU,GAI/DuG,EAAOoc,KAAKoM,sBAAsBxoB,EAAMvG,EAAU+sB,GAClD,MAAMlzB,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQwM,EACvBtX,EAAMy+B,KAAKC,UAAU,CAAEC,KAAM,oBAAqB/zB,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKiG,SAAAA,EAAUpO,GAAI+wB,KAAK/wB,KAC7F,IAKIu9B,EALAtB,EAASd,EAAMz7B,IAAIrC,GACvB,GAAI4+B,EACA,OAAOA,EAIX,QAA0B3+B,IAAtBggC,EAAar1B,WACU3K,IAAvBggC,EAAap1B,YACQ5K,IAArBggC,EAAan1B,MACZm1B,EAAar1B,OAAS0M,EAAK1M,MAAQq1B,EAAap1B,QAAUyM,EAAKzM,OAASo1B,EAAan1B,MAAQwM,EAAKxM,OACnGo1B,EAAczB,KAAKC,UAAU,CACzBC,KAAM,oBACN/zB,KAAMq1B,EAAar1B,KACnBC,MAAOo1B,EAAap1B,MACpBC,IAAKm1B,EAAan1B,IAClBiG,SAAAA,EACApO,GAAI+wB,KAAK/wB,KAEbi8B,EAASd,EAAMz7B,IAAI69B,GACftB,GACA,OAAOA,EAGf,IAAIuB,EAAczM,KAAK0M,gBAAgB,CAAEx1B,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,IACtD,MAAMu1B,yBAA4BC,IAS9B,IAAIC,EAAkB7M,KAAK8M,WAAWL,EAAaG,GACnD,GAAIhpB,EAAKxM,IAAM4oB,KAAK+M,mBAAmBnpB,GAAO,CAG1C,IAAIopB,EAAmBhN,KAAK6K,kBAAkBgC,EAAiBzC,GAC/D,KAAO4C,EAAiB71B,QAAUA,GAAS61B,EAAiB91B,OAASA,GAAM,CACvE,GAAiB,WAAbmG,EACA,MAAM,IAAIxI,WAAW,OAAOuC,6BAA+BD,aAAiBD,KAGhF21B,EAAkB7M,KAAK8M,WAAWD,GAAkB,GACpDG,EAAmBhN,KAAK6K,kBAAkBgC,EAAiBzC,IAGnE,OAAOyC,GAEX,IAAIh7B,EAAO,EACPo7B,EAAoBjN,KAAK6K,kBAAkB4B,EAAarC,GACxDnT,EAAOuT,eAAe5mB,EAAMqpB,GAChC,GAAmB,IAAfhW,EAAKtc,OAA+B,IAAhBsc,EAAKrc,QAA8B,IAAdqc,EAAKnc,KAAY,CAC1D,MAAMoyB,EAAqC,IAAbjW,EAAKtc,MAA4B,GAAdsc,EAAKrc,OAAcqc,EAAKnc,KACzE2xB,EAAczM,KAAK8M,WAAWL,EAAaS,GAC3CD,EAAoBjN,KAAK6K,kBAAkB4B,EAAarC,GACxDnT,EAAOuT,eAAe5mB,EAAMqpB,GACT,IAAfhW,EAAKtc,OAA+B,IAAhBsc,EAAKrc,OACzB6xB,EAAcE,yBAAyB1V,EAAKnc,MAG5CjJ,EAAOmuB,KAAKmN,qBAAqBvpB,EAAMqpB,GAK/C,IAAI3tB,EAAY,EACZ8tB,GAAmB,EACvB,KAAOv7B,GAAM,CACT46B,EAAczM,KAAK8M,WAAWL,EAAa56B,EAAOyN,GAClD,MAAM+tB,EAAuBJ,EAC7BA,EAAoBjN,KAAK6K,kBAAkB4B,EAAarC,GACxD,MAAMkD,EAAUz7B,EAEhB,GADAA,EAAOmuB,KAAKmN,qBAAqBvpB,EAAMqpB,GACnCp7B,EAEA,GADAolB,EAAOuT,eAAe5mB,EAAMqpB,GACT,IAAfhW,EAAKtc,OAA+B,IAAhBsc,EAAKrc,OACzB6xB,EAAcE,yBAAyB1V,EAAKnc,MAE5CjJ,EAAO,EAKPu7B,EAAmBxpB,EAAKxM,IAAM4oB,KAAK+M,mBAAmBnpB,QAErD,GAAI0pB,GAAWz7B,IAASy7B,EACzB,GAAIhuB,EAAY,EAGZA,GAAa,MAEZ,CAKD,GAAiB,WAAbjC,EACA,MAAM,IAAIxI,WAAW,2CAA2Ck2B,KAAKC,UAAU,IAAKuB,OAItEvM,KAAKmN,qBAAqBF,EAAmBI,GAE/C,IACRZ,EAAczM,KAAK8M,WAAWL,GAAc,IAChDW,GAAmB,EACnBv7B,EAAO,GAS3B,GAHAu4B,EAAM57B,IAAIlC,EAAKmgC,GACXD,GACApC,EAAM57B,IAAIg+B,EAAaC,QACTlgC,IAAdqX,EAAK1M,WACU3K,IAAfqX,EAAKzM,YACQ5K,IAAbqX,EAAKxM,UACc7K,IAAnBqX,EAAKU,WACJ0b,KAAK2K,cAAwBp+B,IAAbqX,EAAK3M,UAAsC1K,IAAjBqX,EAAKV,SAChD,MAAM,IAAIrO,WAAW,+BAEzB,IAAKu4B,EAAkB,CAEnB,MAAMvB,EAAad,KAAKC,UAAU,CAC9BC,KAAM,oBACN5kB,QAASomB,EAAYv1B,KACrBoP,SAAUmmB,EAAYt1B,MACtBoP,OAAQkmB,EAAYr1B,IACpBnI,GAAI+wB,KAAK/wB,KAEbm7B,EAAM57B,IAAIq9B,EAAYjoB,GAE1B,OAAO6oB,EAEXc,uBAAuB3pB,EAAMwmB,GACzB,MAAMU,EAAU,CAAE5zB,KAAMhI,QAAQ0U,EAAM/W,GAAWsK,MAAOjI,QAAQ0U,EAAM9W,GAAYsK,IAAKlI,QAAQ0U,EAAM7W,IAErG,OADeizB,KAAK6K,kBAAkBC,EAASV,GAGnD+C,qBAAqBK,EAAYC,GAG7B,MAAM7V,EAAQsQ,sBAAyBsF,EAAY,CAAC,MAAO,QAAS,QAAS,CAAC,MAAO,QAAS,SACxF3V,EAAQqQ,sBAAyBuF,EAAY,CAAC,MAAO,QAAS,QAAS,CAAC,MAAO,QAAS,SAC9F,OAAI7V,EAAM1gB,OAAS2gB,EAAM3gB,KACdw2B,iBAAoB9V,EAAM1gB,KAAO2gB,EAAM3gB,MAC9C0gB,EAAMzgB,QAAU0gB,EAAM1gB,MACfu2B,iBAAoB9V,EAAMzgB,MAAQ0gB,EAAM1gB,OAC/CygB,EAAMxgB,MAAQygB,EAAMzgB,IACbs2B,iBAAoB9V,EAAMxgB,IAAMygB,EAAMzgB,KAC1C,EAGXu2B,aAAa/F,EAAcvqB,EAAW,YAAa+sB,GAC/C,MAAMU,EAAU9K,KAAKsM,kBAAkB1E,EAAcvqB,EAAU+sB,GAC/D,OAAOpK,KAAK6K,kBAAkBC,EAASV,GAE3C0C,WAAWhC,EAAShwB,GAEhB,OADc+tB,WAAciC,EAAQ5zB,KAAM4zB,EAAQ3zB,MAAO2zB,EAAQ1zB,IAAK,EAAG,EAAG,EAAG0D,EAAM,aAGzF8yB,gBAAgBhG,EAAc9sB,EAAMsvB,GAChC,MAAMU,EAAU9K,KAAKsM,kBAAkB1E,EAAc,YAAawC,GAC5DyD,EAAW7N,KAAK8M,WAAWhC,EAAShwB,GAE1C,OADsBklB,KAAK6K,kBAAkBgD,EAAUzD,GAG3D0D,kBAAkB9B,EAAmBpxB,EAAQyC,EAAU+sB,GACnD,IAAIxC,EAAeoE,EACnB,MAAM50B,IAAEA,GAAQwwB,EAChB,IAAK,IAAIiC,EAAI,EAAGkE,EAAYv8B,GAAQoJ,GAASivB,EAAIkE,EAAWlE,IAAK,CAC7D,MAAM1yB,MAAEA,GAAUywB,EACZoG,EAAkBpG,EAClB9sB,EAAOF,EAAS,GACfxJ,KAAKG,IAAI6F,EAAK4oB,KAAKiO,oBAAoBrG,EAAcwC,IACtDpK,KAAKzW,YAAYqe,EAAcwC,GAC/BU,EAAU9K,KAAKsM,kBAAkB1E,EAAc,YAAawC,GAClE,IAAIyD,EAAW7N,KAAK8M,WAAWhC,EAAShwB,GAOxC,GANA8sB,EAAe5H,KAAK6K,kBAAkBgD,EAAUzD,GAM5CxvB,EAAS,EAAG,CACZ,MAAMszB,EAAkBlO,KAAKrW,aAAaqkB,EAAiB5D,GAC3D,KAAOxC,EAAazwB,MAAQ,GAAMA,EAAQ+2B,GACtCL,EAAW7N,KAAK8M,WAAWe,GAAW,GACtCjG,EAAe5H,KAAK6K,kBAAkBgD,EAAUzD,GAGpDxC,EAAaxwB,MAAQA,IAErBwwB,EAAe5H,KAAK2N,aAAa,IAAK/F,EAAcxwB,IAAAA,GAAO,YAAagzB,IAGhF,GAAiB,WAAb/sB,GAAyBuqB,EAAaxwB,MAAQA,EAC9C,MAAM,IAAIvC,WAAW,OAAOuC,gDAEhC,OAAOwwB,EAEXuG,YAAYvG,GAAcjtB,MAAEA,EAAQ,EAACC,OAAEA,EAAS,EAACC,MAAEA,EAAQ,EAACC,KAAEA,EAAO,GAAKuC,EAAU+sB,GAChF,MAAMlzB,KAAEA,EAAIE,IAAEA,EAAGkN,UAAEA,GAAcsjB,EAC3BwG,EAAapO,KAAK4L,mBAAmB,CAAE10B,KAAMA,EAAOyD,EAAO2J,UAAAA,EAAWlN,IAAAA,GAAOgzB,GAC7EiE,EAAcrO,KAAK8N,kBAAkBM,EAAYxzB,EAAQyC,EAAU+sB,GACnEkE,EAAcxzB,EAAe,EAARD,EAE3B,OADkBmlB,KAAK4N,gBAAgBS,EAAaC,EAAalE,GAGrEmE,cAAcC,EAAaC,EAAa5rB,EAAaunB,GACjD,IAAItvB,EAAO,EACPD,EAAQ,EACRD,EAAS,EACTD,EAAQ,EACZ,OAAQkI,GACJ,IAAK,MACD/H,EAAOklB,KAAK0O,kBAAkBF,EAAaC,EAAarE,GACxD,MACJ,IAAK,OAAQ,CACT,MAAMuE,EAAY3O,KAAK0O,kBAAkBF,EAAaC,EAAarE,GACnEtvB,EAAO6zB,EAAY,EACnB9zB,GAAS8zB,EAAY7zB,GAAQ,EAC7B,MAEJ,IAAK,QACL,IAAK,OAAQ,CACT,MAAM8zB,EAAYH,EAAYv3B,KAAOs3B,EAAYt3B,KAC3C23B,EAAaJ,EAAYt3B,MAAQq3B,EAAYr3B,MAC7Cy1B,EAAW6B,EAAYr3B,IAAMo3B,EAAYp3B,IACzCvF,EAAOmuB,KAAKmN,qBAAqBsB,EAAaD,GACpD,IAAK38B,EACD,MAAO,CAAE8I,MAAO,EAAGC,OAAQ,EAAGC,MAAO,EAAGC,KAAM,GAElD,GAAoB,SAAhB+H,GAA0B+rB,EAAW,CAErCj0B,EAD2Bk0B,EAAah9B,EAAO,GAAqB,IAAfg9B,GAAoBjC,EAAW/6B,EAAO,EAC9D+8B,EAAY/8B,EAAO+8B,EAMpD,IAAIE,EACAC,EALep0B,EAAQqlB,KAAKmO,YAAYK,EAAa,CAAE7zB,MAAAA,GAAS,YAAayvB,GAASoE,EAM1F,GACI5zB,GAAU/I,EACVi9B,EAAUC,EACVA,EAAO/O,KAAK8N,kBAAkBgB,EAASj9B,EAAM,YAAau4B,GACtD2E,EAAK33B,MAAQo3B,EAAYp3B,MAEzB23B,EAAO/O,KAAK2N,aAAa,IAAKoB,EAAM33B,IAAKo3B,EAAYp3B,KAAO,YAAagzB,UAExEpK,KAAKmN,qBAAqBsB,EAAaM,GAAQl9B,GAAQ,GAChE+I,GAAU/I,EAEViJ,EADsBklB,KAAK0O,kBAAkBI,EAASL,EAAarE,GAEnE,OAGR,MAAO,CAAEzvB,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAEnCyO,YAAYqe,EAAcwC,GAStB,MAAMhzB,IAAEA,GAAQwwB,EACVr2B,EAAMyuB,KAAKqM,mBAAmBzE,GAC9Bv2B,EAAM2uB,KAAK+M,mBAAmBnF,GAEpC,GAAIv2B,IAAQE,EACR,OAAOF,EAEX,MAAMiO,EAAYlI,GAAO7F,EAAMF,EAAME,EAAMF,EACrCy5B,EAAU9K,KAAKsM,kBAAkB1E,EAAc,YAAawC,GAC5D4E,EAAehP,KAAK8M,WAAWhC,EAASxrB,GACxC2vB,EAAoBjP,KAAK6K,kBAAkBmE,EAAc5E,GAEzD8E,EAAgBlP,KAAK8M,WAAWkC,GAAeC,EAAkB73B,KAEvE,OAD2B4oB,KAAK6K,kBAAkBqE,EAAe9E,GACvChzB,IAE9B62B,oBAAoBrG,EAAcwC,GAC9B,MAAMhzB,IAAEA,EAAGD,MAAEA,EAAKD,KAAEA,GAAS0wB,EAG7B,IAAIuH,EAAoB,CAAEj4B,KADAC,EAAQ,EAAID,EAAOA,EAAO,EACDC,MAAAA,EAAOC,IAAK,GAC/D,MAAMg4B,EAAgBj4B,EAAQ,EAAIA,EAAQ,EAAI6oB,KAAKrW,aAAawlB,EAAmB/E,GACnF+E,EAAoB,IAAKA,EAAmBh4B,MAAOi4B,GACnD,MAAM/9B,EAAM2uB,KAAK+M,mBAAmBoC,GAC9B59B,EAAMyuB,KAAKqM,mBAAmB8C,GACpC,GAAI99B,IAAQE,EACR,OAAOA,EACX,MAAMu5B,EAAU9K,KAAKsM,kBAAkB1E,EAAc,YAAawC,GAC5DiF,EAA4BrP,KAAK8M,WAAWhC,GAAU1zB,GAE5D,OADuC4oB,KAAK6K,kBAAkBwE,EAA2BjF,GACnDhzB,IAE1Ck4B,oBAAoB1H,GAChB,MAAO,CAAE1wB,KAAM0wB,EAAa1wB,KAAMC,MAAO,EAAGmN,UAAW,MAAOlN,IAAK,GAEvEm4B,qBAAqB3H,GACjB,MAAO,CAAE1wB,KAAM0wB,EAAa1wB,KAAMC,MAAOywB,EAAazwB,MAAOC,IAAK,GAEtEs3B,kBAAkBF,EAAaC,EAAarE,GACxC,MAAMoF,EAASxP,KAAKsM,kBAAkBkC,EAAa,YAAapE,GAC1DqF,EAASzP,KAAKsM,kBAAkBmC,EAAa,YAAarE,GAChE,OAAOpK,KAAK0P,aAAaF,EAAQC,GAErCC,aAAaF,EAAQC,GAEjB,OADiB3G,kBAAqB0G,EAAOt4B,KAAMs4B,EAAOr4B,MAAOq4B,EAAOp4B,IAAKq4B,EAAOv4B,KAAMu4B,EAAOt4B,MAAOs4B,EAAOr4B,IAAK,OACpG0D,KAEpB6P,mBAAmBjJ,EAAQrE,EAAU+sB,GACjC,IAOI/jB,EAASC,EAAUC,EACnBopB,EAAiBC,GARjB14B,KAAEA,EAAIC,MAAEA,EAAKmN,UAAEA,EAASlN,IAAEA,EAAGH,IAAEA,EAAGiM,QAAEA,GAAYxB,EACpD,QAAkBnV,IAAd+X,EAAyB,CACzB,QAAa/X,IAAT2K,SAA+B3K,IAAR0K,QAAiC1K,IAAZ2W,GAC5C,MAAM,IAAI/T,UAAU,6DAErBmV,UAAAA,EAAWpN,KAAAA,GAAS8oB,KAAK4L,mBAAmB,CAAE10B,KAAAA,EAAMC,MAAAA,EAAOmN,UAAAA,EAAWlN,IAAAA,EAAKH,IAAAA,EAAKiM,QAAAA,GAAWknB,EAAO/sB,IAQzG,MACQnG,KAAM24B,GAAiB7P,KAAK6K,kBADf,CAAE3zB,KAAM,KAAMC,MAAO,EAAGC,IAAK,GACkBgzB,GACpE,IAAK,IAAIP,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC1B,MAAMmD,EAAmBhN,KAAK4L,mBAAmB,CAAEx0B,IAAAA,EAAKkN,UAAAA,EAAWpN,KAAM24B,EAAehG,GAAKO,GACvFU,EAAU9K,KAAKsM,kBAAkBU,EAAkB,YAAa5C,GAChE0F,EAAwB9P,KAAK6K,kBAAkBC,EAASV,GAE9D,KADGlzB,KAAMmP,EAASlP,MAAOmP,EAAUlP,IAAKmP,GAAWukB,GAC/CgF,EAAsBxrB,YAAcA,GAAawrB,EAAsB14B,MAAQA,EAC/E,MAAO,CAAED,MAAOmP,EAAUlP,IAAKmP,EAAQrP,KAAMmP,GAE3B,cAAbhJ,SAEmB9Q,IAApBojC,GACCG,EAAsBxrB,YAAcqrB,EAAgBrrB,WACjDwrB,EAAsB14B,IAAMu4B,EAAgBv4B,OAChDu4B,EAAkBG,EAClBF,EAAa9E,GAIzB,GAAiB,cAAbztB,QAA2C9Q,IAAfqjC,EAC5B,OAAOA,EACX,MAAM,IAAI/6B,WAAW,aAAamrB,KAAK/wB,0BAA0BqV,aAAqBlN,MAG9F,MAAM24B,qBAAqBtF,WACvBnH,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,SACV+wB,KAAKkM,aAAe,YACpBlM,KAAKplB,OAAS,CACVq1B,OAAQ,CAAEvI,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IACvDq1B,QAAS,CAAEzI,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,CAAEzJ,IAAK,GAAIE,IAAK,KACxE6+B,OAAQ,CAAE1I,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,CAAEzJ,IAAK,GAAIE,IAAK,KACvE8+B,MAAO,CAAE3I,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IACtDw1B,OAAQ,CAAE5I,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IACvDy1B,KAAM,CAAE7I,UAAMn7B,EAAW2jC,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IAC7D,SAAU,CAAE4sB,KAAM,EAAGwI,aAAS3jC,EAAW+X,UAAW,OAAQxJ,KAAM,IAClE,UAAW,CAAE4sB,KAAM,EAAGwI,aAAS3jC,EAAW+X,UAAW,MAAOxJ,KAAM,IAClE01B,MAAO,CAAE9I,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IACtD21B,KAAM,CAAE/I,KAAM,EAAGwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IACrD41B,MAAO,CAAEhJ,KAAM,GAAIwI,QAAS,EAAG5rB,UAAW,MAAOxJ,KAAM,IACvD61B,MAAO,CAAEjJ,KAAM,GAAIwI,QAAS,GAAI5rB,UAAW,MAAOxJ,KAAM,IACxD81B,GAAI,CAAElJ,KAAM,GAAIwI,QAAS,GAAI5rB,UAAW,MAAOxJ,KAAM,IACrD+1B,KAAM,CAAEnJ,KAAM,GAAIwI,QAAS,GAAI5rB,UAAW,MAAOxJ,KAAM,KAG3DklB,KAAK2K,QAAS,EAElB9gB,WAAW+d,GACP,MAAM1wB,KAAEA,GAAS0wB,EAMjB,OAAQ,EAAI1wB,EAAO,GAAK,GAAK,EAEjCyS,aAAaie,GACT,OAAO5H,KAAKnW,WAAW+d,GAAgB,GAAK,GAEhDmF,mBAAmBnF,GACf,OAAO5H,KAAK8Q,kBAAkBlJ,EAAc,OAEhDyE,mBAAmBzE,GACf,OAAO5H,KAAK8Q,kBAAkBlJ,EAAc,OAEhDkJ,kBAAkBlJ,EAAcmJ,GAC5B,MAAM55B,MAAEA,EAAKD,KAAEA,GAAS0wB,EAClBtjB,EAAY0b,KAAKgR,aAAa95B,EAAMC,GACpC85B,EAAY1K,GAAcvG,KAAKplB,QAAQs2B,MAAMrf,GAAMA,EAAE,GAAGvN,YAAcA,IAC5E,QAAkB/X,IAAd0kC,EACA,MAAM,IAAIp8B,WAAW,2BAA2BsC,KACpD,MAAMoS,EAAc0nB,EAAU,GAAGn2B,KACjC,MAA8B,iBAAhByO,EAA2BA,EAAcA,EAAYwnB,GAGvErE,gBAAgB9E,GACZ,MAAM1wB,KAAEA,GAAS0wB,EACjB,MAAO,CAAE1wB,KAAMA,EAAO,KAAMC,MAAO,EAAGC,IAAK,GAE/C45B,aAAa95B,EAAMC,GACf,OAAI6oB,KAAKnW,WAAW,CAAE3S,KAAAA,IACD,IAAVC,EAAcswB,eAAe,GAAG,GAAQA,eAAetwB,EAAQ,EAAIA,EAAQA,EAAQ,GAGnFswB,eAAetwB,GAG9By0B,mBAAmBhE,EAAcwC,EAAO/sB,EAAW,YAAa4uB,GAAiB,GAK7E,IAAI/0B,KAAEA,EAAIgM,QAAEA,EAAO/L,MAAEA,EAAKmN,UAAEA,EAASlN,IAAEA,EAAGk0B,WAAEA,GAAe1D,EAK3D,QAJar7B,IAAT2K,QAAkC3K,IAAZ2W,IACtBhM,EAAOgM,QACK3W,IAAZ2W,QAAkC3W,IAAT2K,IACzBgM,EAAUhM,GACV+0B,EAAgB,CAQhB,GAAIX,EAAY,CACZ,MAAM2F,EAAYjR,KAAKplB,OAAO0wB,GAC9B,IAAK2F,EACD,MAAM,IAAIp8B,WAAW,0CAA0Cy2B,KACnEn0B,EAAQ6oB,KAAKnW,WAAW,CAAE3S,KAAAA,IAAU+5B,EAAUvJ,KAAOuJ,EAAUf,QAGnE5rB,EAAY0b,KAAKgR,aAAa95B,EAAMC,GAEpC,MADe,CAAED,KAAAA,EAAMC,MAAOA,EAAOC,IAAAA,EAAKH,SAAK1K,EAAW2W,QAAAA,EAASoB,UAAAA,GAOnE,GADA0b,KAAK8L,qBAAqBlE,QACZr7B,IAAV4K,EACA,GAAImN,EAAUvK,SAAS,KAAM,CACzB,GAAkB,SAAduK,EACA,MAAM,IAAIzP,WAAW,mDAAmDyP,KAG5E,GADAnN,EAAQ,GACH6oB,KAAKnW,WAAW,CAAE3S,KAAAA,IAAS,CAC5B,GAAiB,WAAbmG,EACA,MAAM,IAAIxI,WAAW,4CAA4CqC,8BAIjEC,EAAQ,EACRC,EAAM,GACNkN,EAAY,WAInB,CACDnN,EAAQqwB,oBAAoBljB,GAExB0b,KAAKnW,WAAW,CAAE3S,KAAAA,KAAWC,GAAS,GACtCA,IACJ,MAAMg1B,EAAenM,KAAKrW,aAAa,CAAEzS,KAAAA,IACzC,GAAIC,EAAQ,GAAKA,EAAQg1B,EACrB,MAAM,IAAIt3B,WAAW,sBAAsByP,UAYnD,GARiB,WAAbjH,GACAyqB,cAAiB3wB,EAAO,EAAG6oB,KAAKrW,aAAa,CAAEzS,KAAAA,KAC/C4wB,cAAiB1wB,EAAK,EAAG4oB,KAAKqM,mBAAmB,CAAEn1B,KAAAA,EAAMC,MAAAA,OAGzDA,EAAQ4wB,iBAAoB5wB,EAAO,EAAG6oB,KAAKrW,aAAa,CAAEzS,KAAAA,KAC1DE,EAAM2wB,iBAAoB3wB,EAAK,EAAG4oB,KAAKqM,mBAAmB,CAAEn1B,KAAAA,EAAMC,MAAAA,WAEpD5K,IAAd+X,EACAA,EAAY0b,KAAKgR,aAAa95B,EAAMC,OAEnC,CAED,GAD4B6oB,KAAKgR,aAAa95B,EAAMC,KACxBmN,EACxB,MAAM,IAAIzP,WAAW,aAAayP,iCAAyCnN,oBAAwBD,KAI/G,MAAO,IAAK0wB,EAAcxwB,IAAAA,EAAKD,MAAAA,EAAOmN,UAAWA,EAAWpN,KAAAA,EAAMgM,QAAAA,IAQ9E,MAAMiuB,0BAA0B1G,WAC5BnH,cACI0M,SAASzM,WACTvD,KAAKkM,aAAe,QACpBlM,KAAKoR,sBAAwB,IAAM,GAAK,GACxCpR,KAAKqR,kBAAoB,SACzBrR,KAAK+L,YAAc,KAEvBliB,WAAW+d,EAAcwC,GAGrB,OAAgB,KADHpK,KAAKzW,YAAY,CAAErS,KAAM0wB,EAAa1wB,KAAMC,MAAO,GAAIC,IAAK,GAAKgzB,GAGlFzgB,eACI,OAAO,GAEXojB,qBACI,OAAO,GAEXV,qBACI,OAAO,GAEXK,gBAAgB9E,GACZ,MAAM1wB,KAAEA,GAAS8oB,KAAK4L,mBAAmBhE,GACzC,MAAO,CAAE1wB,KAAMxF,GAAWwF,EAAO8oB,KAAKoR,sBAAyBpR,KAAKqR,mBAAqB,IAAKl6B,MAAO,EAAGC,IAAK,IAMrH,MAAMk6B,sBAAsBH,kBACxB7N,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,WAGlB,MAAMsiC,8BAA8BJ,kBAChC7N,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,oBAGlB,MAAMuiC,0BAA0BL,kBAC5B7N,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,gBAGlB,MAAMwiC,2BAA2BN,kBAC7B7N,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,iBAGlB,MAAMyiC,0BAA0BP,kBAC5B7N,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,gBAGlB,MAAM0iC,wBAAwBR,kBAC1B7N,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,YAGlB,MAAM2iC,sBAAsBnH,WACxBnH,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,UACV+wB,KAAKkM,aAAe,QACpBlM,KAAK+L,YAAc,KAEvBliB,WAAW+d,EAAcwC,GAGrB,OAAOkH,cAAc5lC,UAAUme,WAAW5G,KAAK+c,KAAM4H,EAAcwC,GAEvEzgB,eACI,OAAO,GAEXojB,mBAAmBnF,GACf,MAAMzwB,MAAEA,GAAUywB,EAClB,OAAc,KAAVzwB,EACO,GACJA,GAAS,EAAI,GAAK,GAE7Bk1B,mBAAmBzE,GACf,MAAMzwB,MAAEA,GAAUywB,EAClB,OAAc,KAAVzwB,EACO,GACJA,GAAS,EAAI,GAAK,GAE7Bu1B,gBAAgB9E,GACZ,MAAM1wB,KAAEA,GAAS8oB,KAAK4L,mBAAmBhE,GACzC,MAAO,CAAE1wB,KAAMA,EAAO,IAAKC,MAAO,EAAGC,IAAK,IAGlD,MAAMy6B,qBAAqBpH,WACvBnH,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,SACV+wB,KAAKkM,aAAe,QACpBlM,KAAK+L,YAAc,OAInB/L,KAAKplB,OAAS,CACV,EAAG,CAAEY,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,GAAIswB,KAAM,CAAElsB,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,KACvE,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,IAChC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,IAChC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,IAChC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,IAChC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,IAChC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,EAAGC,IAAK,IAChC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,GAAIC,IAAK,IACjC,EAAG,CAAEoE,OAAQ,GAAIrE,MAAO,GAAIC,IAAK,IACjC,GAAI,CAAEoE,OAAQ,GAAIrE,MAAO,GAAIC,IAAK,IAClC,GAAI,CAAEoE,OAAQ,GAAIrE,MAAO,EAAG26B,UAAU,EAAM16B,IAAK,IACjD,GAAI,CAAEoE,OAAQ,GAAIrE,MAAO,EAAG26B,UAAU,EAAM16B,IAAK,KAMrD4oB,KAAK+R,mBAAoH,mBAA/F,IAAIziB,KAAK,qBAAqB0iB,mBAAmB,oBAAqB,CAAEj7B,SAAU,QAEhH8S,WAAW+d,GAMP,OAAOqK,oBAAoBrK,EAAa1wB,KAAO,IAEnDyS,eACI,OAAO,GAEXojB,mBAAmBnF,GACf,OAAO5H,KAAKkS,aAAatK,GAAcpsB,OAE3C6wB,mBAAmBzE,GACf,OAAO5H,KAAKkS,aAAatK,GAAcpsB,OAE3C02B,aAAatK,GACT,MAAMzwB,MAAEA,GAAUywB,EAClB,IAAIqJ,EAAYjR,KAAKplB,OAAOzD,GAC5B,QAAkB5K,IAAd0kC,EACA,MAAM,IAAIp8B,WAAW,kBAAkBsC,KAG3C,OAFI6oB,KAAKnW,WAAW+d,IAAiBqJ,EAAUvJ,OAC3CuJ,EAAYA,EAAUvJ,MACnBuJ,EAEXvE,gBAAgBV,GAGZ,MAAMpE,EAAe5H,KAAK4L,mBAAmBI,GACvCiF,EAAYjR,KAAKkS,aAAatK,GAKpC,OADgBiB,WAHAjB,EAAa1wB,KAAO,IAAM+5B,EAAUa,SAAW,EAAI,GAClDb,EAAU95B,MACZ85B,EAAU75B,IACgC,EAAG,EAAG,EAAGwwB,EAAaxwB,IAAM,EAAG,aAG5Fu0B,aAAab,GACT,GAAI9K,KAAK+R,oBAAsBjH,EAAQ5zB,KAAO,EAC1C,MAAM,IAAIrC,WAAW,aAAamrB,KAAK/wB,8GA2FnD,SAASgjC,oBAAoB/6B,GACzB,OAAOA,EAAO,GAAM,IAAMA,EAAO,KAAQ,GAAKA,EAAO,KAAQ,GAGjE,MAAMi7B,4BAA4B1H,WAC9BnH,YAAYr0B,EAAImjC,GACZpC,QACAhQ,KAAKkM,aAAe,QAIpBlM,KAAKqS,0BAA4B,IAAI/iB,KAAK,wBACrC0iB,mBAAmB,sBAAuB,CAAEj7B,SAAU,QACtDymB,WAAW,MAChBwC,KAAKsS,iCAAkC,EACvCtS,KAAK/wB,GAAKA,EACV,MAAMsjC,KAAEA,EAAIC,UAAEA,GA/FtB,SAASC,WAAWC,GAChB,IAgBIF,EAhBAD,EAAOG,EACX,GAAoB,IAAhBH,EAAK/2B,OACL,MAAM,IAAI3G,WAAW,uCAEzB,GAAoB,IAAhB09B,EAAK/2B,QAAgB+2B,EAAK,GAAGI,UAC7B,MAAM,IAAI99B,WAAW,6DAEzB,GAAoB,IAAhB09B,EAAK/2B,SAAiB+2B,EAAK,GAAGhnC,KAC9B,MAAM,IAAIsJ,WAAW,wDAEzB,GAAI09B,EAAKK,QAAQ18B,GAAqB,MAAfA,EAAEy8B,YAAmBn3B,OAAS,EACjD,MAAM,IAAI3G,WAAW,4DAMzB09B,EAAKt2B,SAAS/F,IACV,GAAIA,EAAE28B,WAAc38B,EAAE48B,cAAgB58B,EAAEy8B,UAAY,CAChD,GAAIH,EACA,MAAM,IAAI39B,WAAW,sDACzB29B,EAAYt8B,EACZA,EAAE48B,YAAc,CAAE57B,KAAMhB,EAAE68B,YAAc,EAAI,QAE3C,IAAK78B,EAAE3K,KACR,MAAM,IAAIsJ,WAAW,sDAO7B09B,EAAOA,EAAKK,QAAQ18B,GAAMA,EAAE3K,OAC5BgnC,EAAKt2B,SAAS/F,IAIV,MAAMy8B,UAAEA,GAAcz8B,EACtB,GAAIy8B,EAAW,CACX,MAAMK,EAAcT,EAAKrB,MAAMj6B,GAAQA,EAAI1L,OAASonC,IACpD,QAAoBpmC,IAAhBymC,EACA,MAAM,IAAIn+B,WAAW,8CAA8C89B,KACvEz8B,EAAEy8B,UAAYK,EACd98B,EAAE48B,YAAcE,EAAYF,YAC5B58B,EAAE+8B,SAAWD,EAAYC,cAED1mC,IAAxB2J,EAAE48B,YAAY37B,QACdjB,EAAE48B,YAAY37B,MAAQ,QACA5K,IAAtB2J,EAAE48B,YAAY17B,MACdlB,EAAE48B,YAAY17B,IAAM,MAK5BkvB,GAAUrjB,KAAKsvB,GAAM,CAACW,EAAIC,KACtB,GAAID,EAAGP,UACH,OAAO,EACX,GAAIQ,EAAGR,UACH,OAAQ,EACZ,IAAKO,EAAGD,WAAaE,EAAGF,SACpB,MAAM,IAAIp+B,WAAW,uCACzB,OAAOs+B,EAAGF,SAAS/7B,KAAOg8B,EAAGD,SAAS/7B,QAI1C,MAAMk8B,EAAkBb,EAAKA,EAAK/2B,OAAS,GAAGm3B,UAC9C,GAAIS,GACIA,IAAoBb,EAAKA,EAAK/2B,OAAS,GACvC,MAAM,IAAI3G,WAAW,8CAQ7B,OAHA09B,EAAKt2B,SAAQ,CAAC/F,EAAG2zB,KACb3zB,EAAEm9B,YAAc,OAAMd,EAAK/2B,OAAS,EAAIquB,MAErC,CAAE0I,KAAMA,EAAMC,UAAYA,GAAaD,EAAK,IAkBnBE,CAAWL,GACvCpS,KAAKwS,UAAYA,EACjBxS,KAAKuS,KAAOA,EAEhB1oB,WAAW+d,GAIP,MAAM1wB,KAAEA,GAAS8oB,KAAK0M,gBAAgB,CAAEv1B,MAAO,EAAGC,IAAK,EAAGF,KAAM0wB,EAAa1wB,OAC7E,OAAO+6B,oBAAoB/6B,GAE/ByS,eACI,OAAO,GAEXojB,mBAAmBnF,GACf,MAAMzwB,MAAEA,GAAUywB,EAClB,OAAc,IAAVzwB,EACO6oB,KAAKnW,WAAW+d,GAAgB,GAAK,GACzC,CAAC,EAAG,EAAG,EAAG,IAAIllB,QAAQvL,IAAU,EAAI,GAAK,GAEpDk1B,mBAAmBzE,GACf,OAAO5H,KAAK+M,mBAAmBnF,GAGnC0L,gBAAgB1L,GACZ,MAAM2L,WAAa,CAAChoC,EAAMM,KACtB,MAAM2nC,EAAe5L,EAAar8B,GAClC,GAAoB,MAAhBioC,GAAwBA,GAAgB3nC,EACxC,MAAM,IAAIgJ,WAAW,SAAStJ,KAAQioC,oCAA+C3nC,MAGvF4nC,YAAev8B,IACjB,IAAIgM,EACJ,MAAMwwB,EAAuB,IAAK9L,EAAc1wB,KAAAA,GAC1Cy8B,EAAc3T,KAAKuS,KAAKrB,MAAK,CAACh7B,EAAG2zB,KACnC,GAAIA,IAAM7J,KAAKuS,KAAK/2B,OAAS,EAAG,CAC5B,GAAItF,EAAEy8B,UAAW,CAGb,GAAIz7B,EAAO,EACP,MAAM,IAAIrC,WAAW,eAAeqC,wBAA2BhB,EAAE3K,QAErE,OADA2X,EAAUhN,EAAE48B,YAAY57B,KAAOA,GACxB,EAKX,OADAgM,EAAUhM,EAAOhB,EAAE48B,YAAY57B,MAAQhB,EAAE68B,YAAc,EAAI,IACpD,EAGX,OADmB/S,KAAKmN,qBAAqBuG,EAAsBx9B,EAAE48B,cACnD,IACd5vB,EAAUhM,EAAOhB,EAAE48B,YAAY57B,MAAQhB,EAAE68B,YAAc,EAAI,IACpD,MAIf,IAAKY,EACD,MAAM,IAAI9+B,WAAW,QAAQqC,gCACjC,MAAO,CAAEgM,QAASA,EAASjM,IAAK08B,EAAYpoC,OAEhD,IAAI2L,KAAEA,EAAIgM,QAAEA,EAAOjM,IAAEA,GAAQ2wB,EAC7B,GAAY,MAAR1wB,IACGgM,QAAAA,EAASjM,IAAAA,GAAQw8B,YAAYv8B,IAChCq8B,WAAW,MAAOt8B,GAClBs8B,WAAW,UAAWrwB,OAErB,CAAA,GAAe,MAAXA,EAqBL,MAAM,IAAIrO,WAAW,qDArBC,CACtB,MAAM8+B,OAAsBpnC,IAAR0K,OAAoB1K,EAAYyzB,KAAKuS,KAAKrB,MAAMh7B,GAAMA,EAAE3K,OAAS0L,GAAOf,EAAEm9B,cAAgBp8B,IAC9G,IAAK08B,EACD,MAAM,IAAI9+B,WAAW,OAAOoC,eAAiBiM,iCACjD,GAAIA,EAAU,GAAKywB,EAAYhB,UAC3B,MAAM,IAAI99B,WAAW,YAAYoC,+BAAiCC,KAGlEA,EADAy8B,EAAYhB,UACLgB,EAAYb,YAAY57B,KAAOgM,EAG/BA,EAAUywB,EAAYb,YAAY57B,MAAQy8B,EAAYZ,YAAc,EAAI,GAEnFQ,WAAW,OAAQr8B,KAKhBgM,QAAAA,EAASjM,IAAAA,GAAQw8B,YAAYv8B,KAKpC,MAAO,IAAK0wB,EAAc1wB,KAAAA,EAAMgM,QAAAA,EAASjM,IAAAA,GAE7C20B,mBAAmBI,EAAmB5B,EAAO/sB,EAAW,aACpD,IAAIuqB,EAAeoE,EAEnB,MAAM70B,MAAEA,EAAKmN,UAAEA,GAAcsjB,EAK7B,YAJcr7B,IAAV4K,IACAywB,EAAe,IAAKA,EAAczwB,MAAOqwB,oBAAoBljB,KACjE0b,KAAK8L,qBAAqBlE,GAC1BA,EAAe5H,KAAKsT,gBAAgB1L,GAC7BoI,MAAMpE,mBAAmBhE,EAAcwC,EAAO/sB,GAEzDqvB,gBAAgBV,GACZ,MAAMpE,EAAe5H,KAAK4L,mBAAmBI,IACvC90B,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQwwB,GACvB4K,UAAEA,GAAcxS,KAEtB,OAAOmI,gBADiBjxB,EAAOs7B,EAAUS,SAAS/7B,MAAQs7B,EAAUO,YAAc,EAAI,GAC3C57B,EAAOC,EAAK,aAE3Du0B,aAAab,GACT,GAAI9K,KAAKsS,iCAAmCtS,KAAKqS,0BAA2B,CAExE,GAD2BuB,eAAkB9I,EAAQ5zB,KAAM4zB,EAAQ3zB,MAAO2zB,EAAQ1zB,IAAK,KAAM,GAAI,IAAM,EAEnG,MAAM,IAAIvC,WAAW,aAAamrB,KAAK/wB,uHAMvD,MAAM4kC,2BAA2B1B,oBAC7B7O,YAAYr0B,EAAImjC,GACZpC,MAAM/gC,EAAImjC,GAEdvoB,WAAW+d,GASP,MAAM1wB,KAAEA,GAAS0wB,EACjB,OAAQ1wB,EAAO,GAAK,GAAM,EAE9ByS,eACI,OAAO,GAEXojB,mBAAmBnF,GACf,MAAMzwB,MAAEA,GAAUywB,EAElB,OAAc,KAAVzwB,EACO6oB,KAAKnW,WAAW+d,GAAgB,EAAI,EACxC,GAEXyE,mBAAmBzE,GACf,OAAO5H,KAAK+M,mBAAmBnF,IAUvC,MAAMkM,sBAAsBD,mBACxBvQ,cACI0M,MAAM,UAAW,CAAC,CAAEzkC,KAAM,OAAQ0nC,SAAU,CAAE/7B,MAAO,KAAMC,MAAO,EAAGC,IAAK,QAGlF,MAAM28B,qBAAqBF,mBACvBvQ,cACI0M,MAAM,SAAU,CACZ,CAAEzkC,KAAM,OAAQ0nC,SAAU,CAAE/7B,KAAM,IAAKC,MAAO,EAAGC,IAAK,KACtD,CAAE7L,KAAM,OAAQonC,UAAW,WAMvC,MAAMqB,uBAAuBH,mBACzBvQ,cACI0M,MAAM,WAAY,CACd,CAAEzkC,KAAM,OAAQ0nC,SAAU,CAAE/7B,MAAO,KAAMC,MAAO,EAAGC,IAAK,KACxD,CAAE7L,KAAM,OAAQ0nC,SAAU,CAAE/7B,KAAM,EAAGC,MAAO,EAAGC,IAAK,IAAM07B,YAAa,CAAE57B,KAAM,UAI3F,MAAM+8B,kBAAkB9B,oBACpB7O,cACI0M,MAAM,MAAO,CACT,CAAEzkC,KAAM,SAAU0nC,SAAU,CAAE/7B,KAAM,KAAMC,MAAO,EAAGC,IAAK,IACzD,CAAE7L,KAAM,aAAconC,UAAW,YAErC3S,KAAKsS,iCAAkC,GAG/C,MAAM4B,uBAAuB/B,oBACzB7O,cACI0M,MAAM,WAAY,CAAC,CAAEzkC,KAAM,KAAMwnC,aAAa,EAAME,SAAU,CAAE/7B,MAAO,IAAKC,MAAO,EAAGC,IAAK,MAC3F4oB,KAAKsS,iCAAkC,GAG/C,MAAM6B,sBAAsBhC,oBACxB7O,cACI0M,MAAM,UAAW,CACb,CAAEzkC,KAAM,KAAM0nC,SAAU,CAAE/7B,KAAM,EAAGC,MAAO,EAAGC,IAAK,IAClD,CAAE7L,KAAM,MAAOonC,UAAW,QAGlCjH,cAAc9D,GACV,IAAI3wB,IAAEA,EAAGiM,QAAEA,GAAY0kB,EASvB,MAJY,OAAR3wB,GAAwB,MAARA,IAChBA,EAAM,OACE,OAARA,GAAwB,MAARA,IAChBA,EAAM,MACH,CAAEA,IAAAA,EAAKiM,QAAAA,IAgCtB,MAAMkxB,uBAAuBjC,oBACzB7O,cACI0M,MAAM,WAAY,CAGd,CAAEzkC,KAAM,QAAS0nC,SAAU,CAAE/7B,KAAM,KAAMC,MAAO,EAAGC,IAAK,GAAK07B,YAAa,CAAE57B,KAAM,KAAMC,MAAO,EAAGC,IAAK,IACvG,CAAE7L,KAAM,SAAU0nC,SAAU,CAAE/7B,KAAM,KAAMC,MAAO,EAAGC,IAAK,GAAK07B,YAAa,CAAE57B,KAAM,KAAMC,MAAO,EAAGC,IAAK,IACxG,CAAE7L,KAAM,QAAS0nC,SAAU,CAAE/7B,KAAM,KAAMC,MAAO,GAAIC,IAAK,IAAM07B,YAAa,CAAE57B,KAAM,KAAMC,MAAO,GAAIC,IAAK,KAC1G,CAAE7L,KAAM,SAAU0nC,SAAU,CAAE/7B,KAAM,KAAMC,MAAO,EAAGC,IAAK,IAAM07B,YAAa,CAAE57B,KAAM,KAAMC,MAAO,EAAGC,IAAK,KACzG,CAAE7L,KAAM,QAAS0nC,SAAU,CAAE/7B,KAAM,KAAMC,MAAO,EAAGC,IAAK,GAAK07B,YAAa,CAAE57B,KAAM,KAAMC,MAAO,EAAGC,IAAK,IACvG,CAAE7L,KAAM,KAAM0nC,SAAU,CAAE/7B,KAAM,EAAGC,MAAO,EAAGC,IAAK,IAClD,CAAE7L,KAAM,MAAOonC,UAAW,QAE9B3S,KAAKsS,iCAAkC,EAGvCtS,KAAK0K,UAAY,OAErBgB,cAAc9D,EAAckD,GACxB,MAAM7zB,IAAEA,EAAGiM,QAAEA,GAAY0kB,GACjB1wB,KAAMmP,GAAYykB,EAC1B,OAAI9K,KAAKuS,KAAKrB,MAAMh7B,GAAMA,EAAE3K,OAAS0L,IAC1B,CAAEA,IAAAA,EAAKiM,QAAAA,GACVmD,EAAU,EAAI,CAAEpP,IAAK,MAAOiM,QAAS,EAAImD,GAAY,CAAEpP,IAAK,KAAMiM,QAASmD,IAG3F,MAAMguB,0BAA0B5J,WAC5BnH,cACI0M,SAASzM,WACTvD,KAAKkM,aAAe,YAEpBlM,KAAK2K,QAAS,EAElB9gB,WAAW+d,EAAcwC,GACrB,MAAMxvB,EAASolB,KAAKsU,aAAa1M,EAAa1wB,KAAMkzB,GACpD,OAAwC,KAAjC7D,GAAc3rB,GAAQY,OAEjCmO,aAAaie,EAAcwC,GACvB,OAAOpK,KAAKnW,WAAW+d,EAAcwC,GAAS,GAAK,GAEvD2C,qBACI,OAAO,GAEXV,qBACI,OAAO,GAEXiI,aAAazE,EAAczF,GACvB,QAAqB79B,IAAjBsjC,EACA,MAAM,IAAI1gC,UAAU,gBAExB,MAAM7C,EAAMy+B,KAAKC,UAAU,CAAEC,KAAM,eAAgB4E,aAAAA,EAAc5gC,GAAI+wB,KAAK/wB,KACpEi8B,EAASd,EAAMz7B,IAAIrC,GACzB,GAAI4+B,EACA,OAAOA,EACX,MAAMC,EAAiBnL,KAAK4K,eACtB2J,gBAAkB,CAACluB,EAASmuB,KAC9B,MAAMC,EAAgBpK,mBAAmB,CAAEhkB,QAAAA,EAASC,SAAU,EAAGC,OAAQ,IACnE8I,EAAa,IAAIC,KAAKmlB,GAE5BplB,EAAWqlB,WAAWF,EAAe,GACrC,MAAMG,EAAexJ,EAAetJ,cAAcxS,GAC5CulB,EAAsBD,EAAazD,MAAM2D,GAAmB,UAAZA,EAAGzJ,OAAkBv/B,MACrEipC,GAAeH,EAAazD,MAAM2D,GAAmB,QAAZA,EAAGzJ,OAAgBv/B,MAClE,IAAIkpC,EAAuBJ,EAAazD,MAAM2D,GAAmB,gBAAZA,EAAGzJ,OACxD,QAA6B7+B,IAAzBwoC,EAMA,MAAM,IAAIlgC,WAAW,0DAA0DmrB,KAAK/wB,iDAExF,OAPI8lC,GAAwBA,EAAqBlpC,MAO1C,CAAE+oC,oBAAAA,EAAqBE,YAAAA,EAAaC,qBAAAA,IAI/C,IAAIC,EAAe,IACfJ,oBAAEA,EAAmBE,YAAEA,EAAWC,qBAAEA,GAAyBR,gBAAgB1E,EAAcmF,GAGnE,MAAxBJ,IACAI,GAAgB,KACbJ,oBAAAA,EAAqBE,YAAAA,GAAgBP,gBAAgB1E,EAAcmF,KAI1EA,GAAgBF,EAAc,EAC9B,MAAMl8B,EAAS,GACf,IACIq8B,EACAC,EAFAC,EAAa,EAGbC,GAAO,EACX,KACOR,oBAAAA,EAAqBE,YAAAA,EAAaC,qBAAAA,GAAyBR,gBAAgB1E,EAAcmF,IACxFC,IACAr8B,EAAOs8B,GAAgB3rB,YAAc0rB,EAAiB,GAAKH,GAE3DC,IAAyBlF,EACzBuF,GAAO,GAGPx8B,EAAOg8B,GAAuB,CAAEO,WAAYA,KAI5CH,GAAgB,IAEpBC,EAAiBH,EACjBI,EAAiBN,SACXQ,GAGV,OAFAx8B,EAAOs8B,GAAgB3rB,YAAc0rB,EAAiB,GAAKH,EAC3D1K,EAAM57B,IAAIlC,EAAKsM,GACRA,EAEX8zB,gBAAgB9E,GACZ,MAAM1wB,KAAEA,EAAIC,MAAEA,GAAUywB,EACxB,MAAO,CAAE1wB,KAAAA,EAAMC,MAAOA,GAAS,GAAK,GAAKA,EAAQ,EAAGC,IAAK,GAE7Dw0B,mBAAmBhE,EAAcwC,EAAO/sB,EAAW,YAAa4uB,GAAiB,GAC7E,IAAI/0B,KAAEA,EAAIC,MAAEA,EAAKm0B,WAAEA,EAAUl0B,IAAEA,EAAGkN,UAAEA,EAASpB,QAAEA,GAAY0kB,EAC3D,GAAIqE,EAAgB,CAKhB,GADA/0B,EAAOgM,EACHooB,GAA6B,QAAfA,EACd,MAAM,IAAIz2B,WAAW,iCAAiCy2B,KAC1D,MAAMhnB,EAAYmjB,eAAetwB,OAAsB5K,IAAf++B,GAClC+J,EAAc,GAAGl+B,IAAQm0B,GAAc,KAEvC2F,EADSjR,KAAKsU,aAAap9B,EAAMkzB,GACdiL,GACzB,QAAkB9oC,IAAd0kC,EACA,MAAM,IAAIp8B,WAAW,mBAAmBwgC,qBAA+Bn+B,KAE3E,OADAC,EAAQ85B,EAAUkE,WACX,CAAEj+B,KAAMA,EAAMC,MAAAA,EAAOC,IAAKA,EAAKH,SAAK1K,EAAW2W,QAAAA,EAASoB,UAAAA,GAU/D,GALA0b,KAAK8L,qBAAqBlE,QACbr7B,IAAT2K,IACAA,EAAOgM,QACK3W,IAAZ2W,IACAA,EAAUhM,QACA3K,IAAV4K,EAAqB,CACrB,MAAMyD,EAASolB,KAAKsU,aAAap9B,EAAMkzB,GACvC,IAAIpC,EAAa1jB,EAAUknB,QAAQ,IAAK,OAAOnyB,MAAM,GAC/B,MAAlB2uB,EAAW,KACXA,EAAaA,EAAW3uB,MAAM,IAClC,IAAI43B,EAAYr2B,EAAOotB,GAGvB,GAFA7wB,EAAQ85B,GAAaA,EAAUkE,gBAEjB5oC,IAAV4K,GACAmN,EAAUvK,SAAS,OAClBrJ,GAAcuS,KAAK,CAAC,OAAQ,OAAQ,QAASqB,IACjC,cAAbjH,EAA0B,CAC1B,IAAIi4B,EAAYhxB,EAAUjL,MAAM,GAAI,GACf,MAAjBi8B,EAAU,KACVA,EAAYA,EAAUj8B,MAAM,IAChC43B,EAAYr2B,EAAO06B,GACfrE,MACG1nB,YAAanS,EAAK+9B,WAAYh+B,GAAU85B,GAC3C3sB,EAAYmjB,eAAe6N,IAGnC,QAAc/oC,IAAV4K,EACA,MAAM,IAAItC,WAAW,mBAAmByP,qBAA6BpN,UAGxE,QAAkB3K,IAAd+X,EAAyB,CAC9B,MAAM1J,EAASolB,KAAKsU,aAAap9B,EAAMkzB,GACjCmL,EAAehP,GAAc3rB,GAC7BuxB,EAAeoJ,EAAa/5B,OACjB,WAAb6B,GACAyqB,cAAiB3wB,EAAO,EAAGg1B,GAC3BrE,cAAiB1wB,EAAK,EAAG4oB,KAAKqM,wBAG9Bl1B,EAAQ4wB,iBAAoB5wB,EAAO,EAAGg1B,GACtC/0B,EAAM2wB,iBAAoB3wB,EAAK,EAAG4oB,KAAKqM,uBAE3C,MAAMmJ,EAAqBD,EAAarE,MAAK,GAAI5uB,KAAOA,EAAE6yB,aAAeh+B,IACzE,QAA2B5K,IAAvBipC,EACA,MAAM,IAAI3gC,WAAW,iBAAiBsC,qBAAyBD,KAEnEoN,EAAYmjB,eAAe+N,EAAmB,GAAGhK,QAAQ,MAAO,KAA+C,IAA1CgK,EAAmB,GAAG9yB,QAAQ,YAElG,CAED,MAAM9H,EAASolB,KAAKsU,aAAap9B,EAAMkzB,GACvC,IAAIpC,EAAa1jB,EAAUknB,QAAQ,IAAK,OAAOnyB,MAAM,GAC/B,MAAlB2uB,EAAW,KACXA,EAAaA,EAAW3uB,MAAM,IAClC,MAAM43B,EAAYr2B,EAAOotB,GACzB,IAAKiJ,EACD,MAAM,IAAIp8B,WAAW,uBAAuByP,qBAA6BpN,KAC7E,GAAIC,IAAU85B,EAAUkE,WACpB,MAAM,IAAItgC,WAAW,aAAayP,iCAAyCnN,qBAAyBD,KAG5G,MAAO,IACA0wB,EACH1wB,KAAMA,EACNgM,QAAAA,EACA/L,MAAAA,EACAmN,UAAWA,EACXlN,IAAKA,IAKrB,MAAMq+B,sBAAsBpB,kBACxB/Q,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,WAIlB,MAAMymC,oBAAoBrB,kBACtB/Q,cACI0M,SAASzM,WACTvD,KAAK/wB,GAAK,SASlB,MAAM0mC,GAAa,CAGfC,YAAQrpC,EACRke,eAAewd,EAAazpB,EAAStO,GACjC,MAAMmN,EAAWiqB,mBAAsB9oB,GACjC4rB,EAAQ,IAAIb,eAEZ7nB,EAASwmB,sBAAyBD,EAAa,CAAC,MAAO,MAAO,UAAW,QAAS,YAAa,QAAS,CAAC,SACzG/wB,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQ4oB,KAAK4V,OAAOtJ,kBAAkB5qB,EAAQrE,EAAU+sB,GACvExxB,EAASwvB,mBAAsBlxB,EAAMC,EAAOC,EAAKlH,GAEvD,OADAk6B,EAAMH,UAAUrxB,GACTA,GAEX8R,oBAAoBud,EAAazpB,EAAStO,GACtC,MAAMmN,EAAWiqB,mBAAsB9oB,GACjC4rB,EAAQ,IAAIb,eAEZ7nB,EAASwmB,sBAAyBD,EAAa,CAAC,MAAO,UAAW,QAAS,YAAa,QAAS,KACjG/wB,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQ4oB,KAAK4V,OAAOtJ,kBAAkB,IAAK5qB,EAAQtK,IAAK,GAAKiG,EAAU+sB,GACtFxxB,EAAS2vB,wBAA2BrxB,EAAMC,EAAOjH,EAAkCkH,GAEzF,OADAgzB,EAAMH,UAAUrxB,GACTA,GAEX+R,mBAAmBsd,EAAazpB,EAAStO,GACrC,MAAMmN,EAAWiqB,mBAAsB9oB,GAKjC4rB,EAAQ,IAAIb,eACZ7nB,EAASwmB,sBAAyBD,EAAa,CAAC,MAAO,MAAO,UAAW,QAAS,YAAa,QAAS,CAAC,SACzG/wB,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQ4oB,KAAK4V,OAAOjrB,mBAAmBjJ,EAAQrE,EAAU+sB,GAExExxB,EAAS6vB,uBAA0BtxB,EAAOC,EAAKlH,EAAmCgH,GAExF,OADAkzB,EAAMH,UAAUrxB,GACTA,GAEX8I,OAAOumB,GACH,IAAIvmB,EAASumB,EAGb,OAFIv3B,GAAcuS,KAAKvB,EAAQ,UAC3BA,EAAS,IAAIA,EAAQ,MAAO,YACzBA,GAEXqG,YAAYrG,EAAQmG,GAChB,MAAMguB,EAAa,IAAKn0B,GAClBo0B,EAAuB,IAAKjuB,IAG5B1Q,MAAEA,EAAKmN,UAAEA,EAASpN,KAAEA,EAAID,IAAEA,EAAGiM,QAAEA,KAAYgd,GAAa2V,GACtD1+B,MAAO4+B,EAAUzxB,UAAW0xB,EAAc9+B,KAAM++B,EAASh/B,IAAKi/B,EAAQhzB,QAASizB,GAAeL,EAWtG,YAViBvpC,IAAbwpC,QAA2CxpC,IAAjBypC,IAC1B9V,EAAS/oB,MAAQA,EACjB+oB,EAAS5b,UAAYA,QAET/X,IAAZ0pC,QAAoC1pC,IAAX2pC,QAAuC3pC,IAAf4pC,IAIjDjW,EAAShpB,KAAOA,GAEb,IAAKgpB,KAAa4V,IAE7B5tB,QAAQtE,EAAMjJ,EAAOC,EAAQC,EAAOC,EAAMuC,EAAUnN,GAChD,MAAMk6B,EAAQb,eAAeY,kBAAkBvmB,GACzCgkB,EAAe5H,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GACxDgM,EAAQpW,KAAK4V,OAAOzH,YAAYvG,EAAc,CAAEjtB,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAAQuC,EAAU+sB,GACxFiM,EAAWrW,KAAK4V,OAAOtJ,kBAAkB8J,EAAO,YAAahM,IAC7DlzB,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,GAAQi/B,EACvBC,EAAoBlO,mBAAsBlxB,EAAMC,EAAOC,EAAKlH,GAIlE,OAFiB,IAAIq5B,eAAea,GAC3BH,UAAUqM,GACZA,GAEXhuB,UAAU8B,EAAKC,EAAKxH,GAChB,MAAM0zB,EAAWhN,eAAeY,kBAAkB/f,GAC5CosB,EAAWjN,eAAeY,kBAAkB9f,GAC5CmkB,EAAcxO,KAAK4V,OAAOrI,uBAAuBnjB,EAAKmsB,GACtD9H,EAAczO,KAAK4V,OAAOrI,uBAAuBljB,EAAKmsB,GAE5D,OADexW,KAAK4V,OAAOrH,cAAcC,EAAaC,EAAa5rB,EAAa0zB,IAGpFr/B,KAAK0M,GACD,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GAE/C,OADqBoc,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAC1ClzB,MAExBC,MAAMyM,GACF,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GAE/C,OADqBoc,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAC1CjzB,OAExBC,IAAIwM,GACA,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GAE/C,OADqBoc,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAC1ChzB,KAExBH,IAAI2M,GACA,IAAKoc,KAAK4V,OAAOjL,OACb,OACJ,MAAMP,EAAQb,eAAeY,kBAAkBvmB,GAE/C,OADqBoc,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAC1CnzB,KAExBiM,QAAQU,GACJ,IAAKoc,KAAK4V,OAAOjL,OACb,OACJ,MAAMP,EAAQb,eAAeY,kBAAkBvmB,GAE/C,OADqBoc,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAC1ClnB,SAExBoB,UAAUV,GACN,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GAE/C,OADqBoc,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAC1C9lB,WAExByE,UAAUnF,GACC8iB,GAAc,QAAE3d,UAAUnF,GAErCqF,UAAUrF,GACN,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GACzCgkB,EAAe5H,KAAK4V,OAAO/K,kBAAkBjnB,EAAMwmB,GACnDqM,EAAczW,KAAK4V,OAAOtG,oBAAoB1H,GAEpD,OADiB5H,KAAK4V,OAAOlH,kBAAkB+H,EAAa7O,EAAcwC,GACxD,GAEtBjhB,WAAWvF,GACA8iB,GAAc,QAAEvd,WAAWvF,GAEtCyF,WAAWzF,GACA8iB,GAAc,QAAErd,WAAWzF,GAEtC2F,YAAY3F,GACR,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GACzCgkB,EAAe5H,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAExD74B,EAAMyuB,KAAK4V,OAAOvJ,mBAAmBzE,GAE3C,GAAIr2B,IADQyuB,KAAK4V,OAAO7I,mBAAmBnF,GAEvC,OAAOr2B,EAIX,MAAMmlC,EAAuB1W,KAAK4V,OAAOrG,qBAAqB3H,GACxD+O,EAA2B3W,KAAK4V,OAAO9H,kBAAkB4I,EAAsB,EAAG,YAAatM,GAErG,OADepK,KAAK4V,OAAOlH,kBAAkBgI,EAAsBC,EAA0BvM,IAGjG3gB,WAAWyd,GACP,IAAItjB,EAAOsjB,EACNt4B,QAAQgV,EAAM/W,KACf+W,EAAOwjB,eAAkBxjB,IAC7B,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GACzCgkB,EAAe5H,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GACxDwM,EAAsB5W,KAAK4V,OAAOtG,oBAAoB1H,GACtDiP,EAA0B7W,KAAK4V,OAAOzH,YAAYyI,EAAqB,CAAEj8B,MAAO,GAAK,YAAayvB,GAExG,OADepK,KAAK4V,OAAOlH,kBAAkBkI,EAAqBC,EAAyBzM,IAG/FzgB,aAAa/F,GACT,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GACzCgkB,EAAe5H,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAE9D,OADepK,KAAK4V,OAAOjsB,aAAaie,EAAcwC,IAG1DvgB,WAAWqd,GACP,IAAItjB,EAAOsjB,EACNt4B,QAAQgV,EAAM/W,KACf+W,EAAOwjB,eAAkBxjB,IAC7B,MAAMwmB,EAAQb,eAAeY,kBAAkBvmB,GACzCgkB,EAAe5H,KAAK4V,OAAOrI,uBAAuB3pB,EAAMwmB,GAE9D,OADepK,KAAK4V,OAAO/rB,WAAW+d,EAAcwC,KAI5D,IAAK,MAAM0M,IAAU,CACjB/G,aACA6B,cACAoC,eACAF,cACAC,aACA0B,cACAC,YACAzB,UACApC,aACAqC,eACAC,cACAC,eACA9C,cACAC,sBACAC,kBACAC,mBACAC,kBACAC,iBACD,CACC,MAAMiE,EAAS,IAAIkB,EAGnBpQ,GAAKkP,EAAO3mC,IAAM,IAAK0mC,GAAYC,OAAAA,GCznEhC,MAAMmB,UACTzT,YAAY0T,EAAcC,EAAeC,EAAaC,EAAgB5R,sBAClE,MAAMlf,EAAU+wB,yBAA4BJ,GACtC1wB,EAAW8wB,yBAA4BH,GACvC1wB,EAAS6wB,yBAA4BF,GACrChnC,EAAWi1B,mBAAsBgS,GAKvC,GAAI5T,UAAU/nB,OAAS,EACnB,MAAM,IAAI3G,WAAW,+DAEzBwiC,wBAA2BrX,KAAM3Z,EAASC,EAAUC,EAAQrW,GAEhEA,eACI,IAAKuyB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM1yB,GAEzB2J,UACI,IAAKwrB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOmoC,YAAepoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEnD9c,cACI,IAAKuf,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOooC,gBAAmBroC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEvD9oB,WACI,IAAKurB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOqoC,aAAgBtoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEpD7oB,YACI,IAAKsrB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOsoC,cAAiBvoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAErD1b,gBACI,IAAKme,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuoC,kBAAqBxoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD5oB,UACI,IAAKqrB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOwoC,YAAezoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEnDjX,gBACI,IAAK0Z,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyoC,kBAAqB1oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD/W,gBACI,IAAKwZ,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO0oC,kBAAqB3oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD7W,iBACI,IAAKsZ,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2oC,mBAAsB5oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1D3W,iBACI,IAAKoZ,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO4oC,mBAAsB7oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DzW,kBACI,IAAKkZ,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO6oC,oBAAuB9oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE3DvW,iBACI,IAAKgZ,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO8oC,mBAAsB/oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DrW,mBACI,IAAK8Y,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO+oC,qBAAwBhpC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE5DnW,iBACI,IAAK4Y,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOgpC,mBAAsBjpC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DoY,KAAKC,EAAkBz1B,GACnB,IAAK6f,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYmT,GACb,MAAM,IAAIlpC,UAAU,oBAExBmpC,mCAAsCD,GACtC,MAAMnoC,EAAWhB,QAAQ8wB,KAAM1yB,GACzBqa,EAAa4wB,eAAkBroC,EAAU,CAAC,MAAO,QAAS,YAAa,SACvEsoC,EAAQtQ,sBAAyBmQ,EAAkB1wB,EAAY,WACrE,IAAK6wB,EACD,MAAM,IAAIrpC,UAAU,qBAExB,IAAIuS,EAASwmB,sBAAyBlI,KAAMrY,EAAY,IACxDjG,EAAS+2B,oBAAuBvoC,EAAUwR,EAAQ82B,GAClD92B,EAASwmB,sBAAyBxmB,EAAQiG,EAAY,IAEtD,OAAO+wB,uBAA0BxoC,EAAUwR,EAD3ByiB,iBAAoBvhB,IAGxC+1B,aAAaxB,GACT,IAAK1U,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWi1B,mBAAsBgS,GACvC,OAAO,IAAIJ,UAAU7nC,QAAQ8wB,KAAMnzB,GAAWqC,QAAQ8wB,KAAMlzB,GAAYoC,QAAQ8wB,KAAMjzB,GAAUmD,GAEpGub,IAAIpN,EAAsBuE,GACtB,IAAK6f,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMsB,EAAW42B,mBAAsBhpB,GACjCG,EAAU2lB,iBAAoBvhB,GACpC,OAAOg2B,gBAAmB1pC,QAAQ8wB,KAAM1yB,GAAW0yB,KAAMvvB,EAAU+N,GAEvE6G,SAAShH,EAAsBuE,GAC3B,IAAK6f,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMsB,EAAWooC,8BAAiCxR,mBAAsBhpB,IAClEG,EAAU2lB,iBAAoBvhB,GACpC,OAAOg2B,gBAAmB1pC,QAAQ8wB,KAAM1yB,GAAW0yB,KAAMvvB,EAAU+N,GAEvEslB,MAAMzL,EAAO7Z,GACT,IAAKikB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2pC,4BAA+B,QAAS9Y,KAAM3H,EAAO7Z,GAEhEwlB,MAAM3L,EAAO7Z,GACT,IAAKikB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2pC,4BAA+B,QAAS9Y,KAAM3H,EAAO7Z,GAEhEkmB,OAAOtM,GACH,IAAKqK,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQ+O,eAAkBhP,GAChC,IAAK,MAAM2gB,IAAQ,CAAClsC,EAAUC,EAAWC,GAAU,CAG/C,GAFamC,QAAQ8wB,KAAM+Y,KACd7pC,QAAQmpB,EAAO0gB,GAExB,OAAO,EAEf,OAAOC,eAAkB9pC,QAAQ8wB,KAAM1yB,GAAW4B,QAAQmpB,EAAO/qB,IAErEqL,SAASiK,GACL,IAAK6f,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBAGxB,OAAO8pC,qBAAwBjZ,KADVkZ,qBADL/U,iBAAoBvhB,KAIxCkiB,SACI,IAAKrC,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO8pC,qBAAwBjZ,MAEnC+E,eAAelE,EAAqBriB,GAChC,IAAKikB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvDgF,UACI,MAAM,IAAI71B,UAAU,2DAExBgqC,gBAAgBC,GACZ,IAAK3W,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM+H,EAAOhI,QAAQ8wB,KAAMnzB,GACrBsK,EAAQjI,QAAQ8wB,KAAMlzB,GACtBsK,EAAMlI,QAAQ8wB,KAAMjzB,GACpBmD,EAAWhB,QAAQ8wB,KAAM1yB,GAC/B,QAA0Bf,IAAtB6sC,EACA,OAAOC,uBAA0BniC,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGlH,GACzE,MAAM+qB,EAAeqe,eAAkBF,GAOvC,OAAOC,uBAA0BniC,EAAMC,EAAOC,EANjClI,QAAQ+rB,EAAcjuB,GACpBkC,QAAQ+rB,EAAchuB,GACtBiC,QAAQ+rB,EAAc/tB,GACjBgC,QAAQ+rB,EAAc9tB,GACtB+B,QAAQ+rB,EAAc7tB,GACvB8B,QAAQ+rB,EAAc5tB,GACsE6C,GAEnH+0B,gBAAgBxtB,GACZ,IAAKgrB,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,IAAI4H,EAAUkkB,EACd,GAAIiK,SAAYztB,GAAO,CACnB,MAAM8hC,EAAe9hC,EAAKV,cACLxK,IAAjBgtC,EAMAxiC,EAAW8oB,mBAAsBpoB,IAGjCV,EAAW8oB,mBAAsB0Z,GACjCte,EAAexjB,EAAK2hB,gBAIxBriB,EAAW8oB,mBAAsBpoB,GAErC,MAAMP,EAAOhI,QAAQ8wB,KAAMnzB,GACrBsK,EAAQjI,QAAQ8wB,KAAMlzB,GACtBsK,EAAMlI,QAAQ8wB,KAAMjzB,GACpBmD,EAAWhB,QAAQ8wB,KAAM1yB,GAC/B,IAAI+J,EAAO,EAAGC,EAAS,EAAGC,EAAS,EAAGgC,EAAc,EAAGC,EAAc,EAAGC,EAAa,OAChElN,IAAjB0uB,IACAA,EAAeqe,eAAkBre,GACjC5jB,EAAOnI,QAAQ+rB,EAAcjuB,GAC7BsK,EAASpI,QAAQ+rB,EAAchuB,GAC/BsK,EAASrI,QAAQ+rB,EAAc/tB,GAC/BqM,EAAcrK,QAAQ+rB,EAAc9tB,GACpCqM,EAActK,QAAQ+rB,EAAc7tB,GACpCqM,EAAavK,QAAQ+rB,EAAc5tB,IAIvC,OAAO+3B,4BAA+Bl2B,QADtBi0B,6BAAgCpsB,EADrCsiC,uBAA0BniC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GACrD,cACPvD,GAAmBoK,EAAU7G,GAExFspC,mBACI,IAAK/W,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GAG/B,OAAOmsC,4BAA+BvpC,EADvBg4B,sBAAyBlI,KADrBuY,eAAkBroC,EAAU,CAAC,YAAa,SACH,KAG9DwpC,kBACI,IAAKjX,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GAG/B,OAAOqsC,2BAA8BzpC,EADtBg4B,sBAAyBlI,KADrBuY,eAAkBroC,EAAU,CAAC,MAAO,cACG,KAG9D0pC,eACI,IAAKnX,eAAkBzC,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAO,CACHe,SAAUhB,QAAQ8wB,KAAM1yB,GACxBiZ,OAAQrX,QAAQ8wB,KAAMjzB,GACtBuZ,SAAUpX,QAAQ8wB,KAAMlzB,GACxBuZ,QAASnX,QAAQ8wB,KAAMnzB,IAG/B2J,YAAYiB,EAAMmL,GACd,MAAMpE,EAAU2lB,iBAAoBvhB,GACpC,OAAI6f,eAAkBhrB,IAClB6vB,mBAAsB9oB,GACf4pB,mBAAsBl5B,QAAQuI,EAAM5K,GAAWqC,QAAQuI,EAAM3K,GAAYoC,QAAQuI,EAAM1K,GAAUmC,QAAQuI,EAAMnK,KAEnH85B,eAAkB3vB,EAAM+G,GAEnCynB,eAAeC,EAAUC,GACrB,MAAM/b,EAAMgd,eAAkBlB,GACxB7b,EAAM+c,eAAkBjB,GAC9B,OAAOyN,eAAkB1kC,QAAQkb,EAAKvd,GAAWqC,QAAQkb,EAAKtd,GAAYoC,QAAQkb,EAAKrd,GAAUmC,QAAQmb,EAAKxd,GAAWqC,QAAQmb,EAAKvd,GAAYoC,QAAQmb,EAAKtd,KAIvK1B,mBAAmB0rC,UAAW,sBC9QvB,MAAMprB,cACT2X,YAAY0T,EAAcC,EAAeC,EAAaz5B,EAAY,EAAGC,EAAc,EAAGC,EAAc,EAAGC,EAAmB,EAAGC,EAAmB,EAAGC,EAAkB,EAAGq5B,EAAgB5R,sBACpL,MAAMlf,EAAU+wB,yBAA4BJ,GACtC1wB,EAAW8wB,yBAA4BH,GACvC1wB,EAAS6wB,yBAA4BF,GACrC7/B,EAAO+/B,yBAA4B35B,GACnCnG,EAAS8/B,yBAA4B15B,GACrCnG,EAAS6/B,yBAA4Bz5B,GACrCpE,EAAc69B,yBAA4Bx5B,GAC1CpE,EAAc49B,yBAA4Bv5B,GAC1CpE,EAAa29B,yBAA4Bt5B,GACzC5N,EAAWi1B,mBAAsBgS,GAKvC,GAAI5T,UAAU/nB,OAAS,EACnB,MAAM,IAAI3G,WAAW,+DAEzBglC,4BAA+B7Z,KAAM3Z,EAASC,EAAUC,EAAQlP,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAEhIA,eACI,IAAKyyB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM1yB,GAEzB4J,WACI,IAAKyrB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOqoC,aAAgBtoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEpD7oB,YACI,IAAKwrB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOsoC,cAAiBvoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAErD1b,gBACI,IAAKqe,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuoC,kBAAqBxoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD5oB,UACI,IAAKurB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOwoC,YAAezoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEnD3oB,WACI,IAAKsrB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMhzB,GAEzBsK,aACI,IAAKqrB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM/yB,GAEzBsK,aACI,IAAKorB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM9yB,GAEzBqM,kBACI,IAAKopB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM7yB,GAEzBqM,kBACI,IAAKmpB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM5yB,GAEzBqM,iBACI,IAAKkpB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM3yB,GAEzB4J,UACI,IAAK0rB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOmoC,YAAepoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEnD9c,cACI,IAAKyf,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOooC,gBAAmBroC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEvDjX,gBACI,IAAK4Z,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyoC,kBAAqB1oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD/W,gBACI,IAAK0Z,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO0oC,kBAAqB3oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD7W,iBACI,IAAKwZ,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2oC,mBAAsB5oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1D3W,iBACI,IAAKsZ,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO4oC,mBAAsB7oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DvW,iBACI,IAAKkZ,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO8oC,mBAAsB/oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DzW,kBACI,IAAKoZ,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO6oC,oBAAuB9oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE3DrW,mBACI,IAAKgZ,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO+oC,qBAAwBhpC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE5DnW,iBACI,IAAK8Y,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOgpC,mBAAsBjpC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DoY,KAAK0B,EAAsBl3B,GACvB,IAAK+f,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAY4U,GACb,MAAM,IAAI3qC,UAAU,oBAExBmpC,mCAAsCwB,GACtC,MAAMt7B,EAAU2lB,iBAAoBvhB,GAC9B1S,EAAWhB,QAAQ8wB,KAAM1yB,GACzBqa,EAAa4wB,eAAkBroC,EAAU,CAC3C,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,SAEEsoC,EAAQtQ,sBAAyB4R,EAAsBnyB,EAAY,WACzE,IAAK6wB,EACD,MAAM,IAAIrpC,UAAU,0BAExB,IAAIuS,EAASwmB,sBAAyBlI,KAAMrY,EAAY,IACxDjG,EAAS+2B,oBAAuBvoC,EAAUwR,EAAQ82B,GAClD92B,EAASwmB,sBAAyBxmB,EAAQiG,EAAY,IACtD,MAAMzQ,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAesgC,gCAAmC7pC,EAAUwR,EAAQlD,GAC9I,OAAO66B,uBAA0BniC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAEnH8pC,cAAcZ,GACV,IAAKzW,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM+H,EAAOhI,QAAQ8wB,KAAMnzB,GACrBsK,EAAQjI,QAAQ8wB,KAAMlzB,GACtBsK,EAAMlI,QAAQ8wB,KAAMjzB,GACpBmD,EAAWhB,QAAQ8wB,KAAM1yB,GAC/B,QAA0Bf,IAAtB6sC,EACA,OAAOC,uBAA0BniC,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGlH,GACzE,MAAM+qB,EAAeqe,eAAkBF,GAOvC,OAAOC,uBAA0BniC,EAAMC,EAAOC,EANjClI,QAAQ+rB,EAAcjuB,GACpBkC,QAAQ+rB,EAAchuB,GACtBiC,QAAQ+rB,EAAc/tB,GACjBgC,QAAQ+rB,EAAc9tB,GACtB+B,QAAQ+rB,EAAc7tB,GACvB8B,QAAQ+rB,EAAc5tB,GACsE6C,GAEnH+pC,cAAcC,GACV,IAAKvX,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMgrC,EAAe/S,eAAkB8S,GACjChjC,EAAOhI,QAAQirC,EAActtC,GAC7BsK,EAAQjI,QAAQirC,EAAcrtC,GAC9BsK,EAAMlI,QAAQirC,EAAcptC,GAClC,IAAImD,EAAWhB,QAAQirC,EAAc7sC,GACrC,MAAM+J,EAAOnI,QAAQ8wB,KAAMhzB,GACrBsK,EAASpI,QAAQ8wB,KAAM/yB,GACvBsK,EAASrI,QAAQ8wB,KAAM9yB,GACvBqM,EAAcrK,QAAQ8wB,KAAM7yB,GAC5BqM,EAActK,QAAQ8wB,KAAM5yB,GAC5BqM,EAAavK,QAAQ8wB,KAAM3yB,GAEjC,OADA6C,EAAWkqC,qBAAwBlrC,QAAQ8wB,KAAM1yB,GAAW4C,GACrDmpC,uBAA0BniC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAEnHyoC,aAAaxB,GACT,IAAKxU,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWi1B,mBAAsBgS,GACvC,OAAO,IAAIxrB,cAAczc,QAAQ8wB,KAAMnzB,GAAWqC,QAAQ8wB,KAAMlzB,GAAYoC,QAAQ8wB,KAAMjzB,GAAUmC,QAAQ8wB,KAAMhzB,GAAWkC,QAAQ8wB,KAAM/yB,GAAaiC,QAAQ8wB,KAAM9yB,GAAagC,QAAQ8wB,KAAM7yB,GAAkB+B,QAAQ8wB,KAAM5yB,GAAkB8B,QAAQ8wB,KAAM3yB,GAAiB6C,GAEtRub,IAAIpN,EAAsBG,GACtB,IAAKmkB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOkrC,iDAAoD,MAAOra,KAAM3hB,EAAsBG,GAElG6G,SAAShH,EAAsBG,GAC3B,IAAKmkB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOkrC,iDAAoD,WAAYra,KAAM3hB,EAAsBG,GAEvGslB,MAAMzL,EAAO7Z,GACT,IAAKmkB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOmrC,gCAAmC,QAASta,KAAM3H,EAAO7Z,GAEpEwlB,MAAM3L,EAAO7Z,GACT,IAAKmkB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOmrC,gCAAmC,QAASta,KAAM3H,EAAO7Z,GAEpEylB,MAAMrhB,GACF,IAAK+f,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,QAAqB5C,IAAjBqW,EACA,MAAM,IAAIzT,UAAU,iCACxB,MAAMqP,EAAkC,iBAAjBoE,EACjBshB,oBAAuB,eAAgBthB,GACvCuhB,iBAAoBvhB,GACpBjD,EAAeykB,gBAAmB5lB,EAAS,eAAgB,OAAQ6lB,GAAa,CAAC,QACjFvlB,EAAewlB,uBAA0B9lB,EAAS,cAUlDia,EAAoB8L,4BAA+B/lB,EAT/B,CACtBpH,IAAK,EACLC,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,KAEoEkG,IAAe,GACnG,IAAIzI,EAAOhI,QAAQ8wB,KAAMnzB,GACrBsK,EAAQjI,QAAQ8wB,KAAMlzB,GACtBsK,EAAMlI,QAAQ8wB,KAAMjzB,GACpBsK,EAAOnI,QAAQ8wB,KAAMhzB,GACrBsK,EAASpI,QAAQ8wB,KAAM/yB,GACvBsK,EAASrI,QAAQ8wB,KAAM9yB,GACvBqM,EAAcrK,QAAQ8wB,KAAM7yB,GAC5BqM,EAActK,QAAQ8wB,KAAM5yB,GAC5BqM,EAAavK,QAAQ8wB,KAAM3yB,GAE/B,QADG6J,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe8gC,iBAAoBrjC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYgf,EAAmB9Y,EAAcb,IAChNu6B,uBAA0BniC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvK,QAAQ8wB,KAAM1yB,IAEjIo3B,OAAOtM,GACH,IAAKuK,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQmiB,mBAAsBpiB,GACpC,IAAK,MAAM2gB,IAAQ,CACflsC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACD,CAGC,GAFa6B,QAAQ8wB,KAAM+Y,KACd7pC,QAAQmpB,EAAO0gB,GAExB,OAAO,EAEf,OAAOC,eAAkB9pC,QAAQ8wB,KAAM1yB,GAAW4B,QAAQmpB,EAAO/qB,IAErEqL,SAASiK,GACL,IAAK+f,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,IAC9BzC,UAAEA,EAASC,KAAEA,EAAId,UAAEA,GAAcslB,yBAA4BpmB,GAGnE,OAAOi8B,yBAA4Bza,KAAM7f,EAFpB+4B,qBAAwB16B,GAEqB,CAAE4B,KAAAA,EAAMd,UAAAA,EAAWR,aADhEwlB,uBAA0B9lB,EAAS,WAG5DsmB,SACI,IAAKnC,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOsrC,yBAA4Bza,KAAM,QAE7C+E,eAAelE,EAAqBriB,GAChC,IAAKmkB,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvDgF,UACI,MAAM,IAAI71B,UAAU,+DAExB81B,gBAAgBpa,EAAsBjI,GAClC,IAAK+f,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM4H,EAAW8oB,mBAAsBhV,GAIvC,OAAOua,4BAA+Bl2B,QADtBi0B,6BAAgCpsB,EAAUipB,KADnC0a,yBADPvW,iBAAoBvhB,KAGmBjW,GAAmBoK,EAAU7H,QAAQ8wB,KAAM1yB,IAEtGqtC,cACI,IAAKhY,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyrC,uBAA0B5a,MAErCwZ,mBACI,IAAK7W,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GAG/B,OAAOmsC,4BAA+BvpC,EADvBg4B,sBAAyBlI,KADrBuY,eAAkBroC,EAAU,CAAC,YAAa,SACH,KAG9DwpC,kBACI,IAAK/W,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GAG/B,OAAOqsC,2BAA8BzpC,EADtBg4B,sBAAyBlI,KADrBuY,eAAkBroC,EAAU,CAAC,MAAO,cACG,KAG9D2qC,cACI,IAAKlY,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2rC,uBAA0B9a,MAErC4Z,eACI,IAAKjX,mBAAsB3C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAO,CACHe,SAAUhB,QAAQ8wB,KAAM1yB,GACxBiZ,OAAQrX,QAAQ8wB,KAAMjzB,GACtBguC,QAAS7rC,QAAQ8wB,KAAMhzB,GACvBguC,eAAgB9rC,QAAQ8wB,KAAM5yB,GAC9B6tC,eAAgB/rC,QAAQ8wB,KAAM7yB,GAC9B+tC,UAAWhsC,QAAQ8wB,KAAM/yB,GACzBqZ,SAAUpX,QAAQ8wB,KAAMlzB,GACxBquC,cAAejsC,QAAQ8wB,KAAM3yB,GAC7B+tC,UAAWlsC,QAAQ8wB,KAAM9yB,GACzBmZ,QAASnX,QAAQ8wB,KAAMnzB,IAG/B2J,YAAYiB,EAAMmL,GACd,MAAMpE,EAAU2lB,iBAAoBvhB,GACpC,OAAI+f,mBAAsBlrB,IACtB6vB,mBAAsB9oB,GACf66B,uBAA0BnqC,QAAQuI,EAAM5K,GAAWqC,QAAQuI,EAAM3K,GAAYoC,QAAQuI,EAAM1K,GAAUmC,QAAQuI,EAAMzK,GAAWkC,QAAQuI,EAAMxK,GAAaiC,QAAQuI,EAAMvK,GAAagC,QAAQuI,EAAMtK,GAAkB+B,QAAQuI,EAAMrK,GAAkB8B,QAAQuI,EAAMpK,GAAiB6B,QAAQuI,EAAMnK,KAErSktC,mBAAsB/iC,EAAM+G,GAEvCynB,eAAeC,EAAUC,GACrB,MAAM/b,EAAMowB,mBAAsBtU,GAC5B7b,EAAMmwB,mBAAsBrU,GAClC,IAAK,MAAM4S,IAAQ,CACflsC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACD,CACC,MAAMguC,EAAOnsC,QAAQkb,EAAK2uB,GACpBuC,EAAOpsC,QAAQmb,EAAK0uB,GAC1B,GAAIsC,IAASC,EACT,OAAO5N,iBAAoB2N,EAAOC,GAE1C,OAAO,GAIfjwC,mBAAmBsgB,cAAe,0BCvX3B,MAAM4vB,SACTjY,YAAYlP,EAAa,EAAGC,EAAc,EAAGC,EAAa,EAAG5B,EAAY,EAAGC,EAAa,EAAGhX,EAAe,EAAGE,EAAe,EAAGC,EAAoB,EAAGC,EAAoB,EAAGC,EAAmB,GAC7L,MAAMrB,EAAQ6gC,yBAA4BpnB,GACpCxZ,EAAS4gC,yBAA4BnnB,GACrCxZ,EAAQ2gC,yBAA4BlnB,GACpCxZ,EAAO0gC,yBAA4B9oB,GACnC3X,EAAQygC,yBAA4B7oB,GACpC1X,EAAUugC,yBAA4B7/B,GACtCR,EAAUqgC,yBAA4B3/B,GACtCR,EAAemgC,yBAA4B1/B,GAC3CR,EAAekgC,yBAA4Bz/B,GAC3CR,EAAcigC,yBAA4Bx/B,GAChDy/B,eAAkB9gC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACnGjN,YAAY0xB,MACZ5wB,QAAQ4wB,KAAMvyB,EAAOkN,GACrBvL,QAAQ4wB,KAAMtyB,EAAQkN,GACtBxL,QAAQ4wB,KAAMryB,EAAOkN,GACrBzL,QAAQ4wB,KAAMpyB,EAAMkN,GACpB1L,QAAQ4wB,KAAMnyB,EAAOkN,GACrB3L,QAAQ4wB,KAAMlyB,EAASmN,GACvB7L,QAAQ4wB,KAAMjyB,EAASoN,GACvB/L,QAAQ4wB,KAAMhyB,EAAcqN,GAC5BjM,QAAQ4wB,KAAM/xB,EAAcqN,GAC5BlM,QAAQ4wB,KAAM9xB,EAAaqN,GAU/BZ,YACI,IAAK+gC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMvyB,GAEzBmN,aACI,IAAK8gC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMtyB,GAEzBmN,YACI,IAAK6gC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMryB,GAEzBmN,WACI,IAAK4gC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMpyB,GAEzBmN,YACI,IAAK2gC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMnyB,GAEzBoN,cACI,IAAKygC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMlyB,GAEzBqN,cACI,IAAKugC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMjyB,GAEzBsN,mBACI,IAAKqgC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMhyB,GAEzBsN,mBACI,IAAKogC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM/xB,GAEzBsN,kBACI,IAAKmgC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM9xB,GAEzB2D,WACI,IAAK6pC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOwsC,aAAgBzsC,QAAQ8wB,KAAMvyB,GAAQyB,QAAQ8wB,KAAMtyB,GAASwB,QAAQ8wB,KAAMryB,GAAQuB,QAAQ8wB,KAAMpyB,GAAOsB,QAAQ8wB,KAAMnyB,GAAQqB,QAAQ8wB,KAAMlyB,GAAUoB,QAAQ8wB,KAAMjyB,GAAUmB,QAAQ8wB,KAAMhyB,GAAekB,QAAQ8wB,KAAM/xB,GAAeiB,QAAQ8wB,KAAM9xB,IAEjQ0tC,YACI,IAAKF,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAgR,IAAxQwsC,aAAgBzsC,QAAQ8wB,KAAMvyB,GAAQyB,QAAQ8wB,KAAMtyB,GAASwB,QAAQ8wB,KAAMryB,GAAQuB,QAAQ8wB,KAAMpyB,GAAOsB,QAAQ8wB,KAAMnyB,GAAQqB,QAAQ8wB,KAAMlyB,GAAUoB,QAAQ8wB,KAAMjyB,GAAUmB,QAAQ8wB,KAAMhyB,GAAekB,QAAQ8wB,KAAM/xB,GAAeiB,QAAQ8wB,KAAM9xB,IAElQkqC,KAAKzd,GACD,IAAK+gB,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqpC,EAAQtQ,sBAAyBvN,EAEvC,CACI,OACA,QACA,eACA,eACA,UACA,SACA,cACA,UACA,QACA,SACD,WACH,IAAK6d,EACD,MAAM,IAAIrpC,UAAU,yBAExB,MAAMwL,MAAEA,EAAQzL,QAAQ8wB,KAAMvyB,GAAMmN,OAAEA,EAAS1L,QAAQ8wB,KAAMtyB,GAAOmN,MAAEA,EAAQ3L,QAAQ8wB,KAAMryB,GAAMmN,KAAEA,EAAO5L,QAAQ8wB,KAAMpyB,GAAKmN,MAAEA,EAAQ7L,QAAQ8wB,KAAMnyB,GAAMoN,QAAEA,EAAU/L,QAAQ8wB,KAAMlyB,GAAQqN,QAAEA,EAAUjM,QAAQ8wB,KAAMjyB,GAAQsN,aAAEA,EAAenM,QAAQ8wB,KAAMhyB,GAAasN,aAAEA,EAAepM,QAAQ8wB,KAAM/xB,GAAasN,YAAEA,EAAcrM,QAAQ8wB,KAAM9xB,IAAiBsqC,EACvW,OAAO,IAAI+C,SAAS5gC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAEzGsgC,UACI,IAAKH,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO0pC,8BAAiC7Y,MAE5CvuB,MACI,IAAKiqC,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAIosC,SAASnqC,KAAKK,IAAIvC,QAAQ8wB,KAAMvyB,IAAS2D,KAAKK,IAAIvC,QAAQ8wB,KAAMtyB,IAAU0D,KAAKK,IAAIvC,QAAQ8wB,KAAMryB,IAASyD,KAAKK,IAAIvC,QAAQ8wB,KAAMpyB,IAAQwD,KAAKK,IAAIvC,QAAQ8wB,KAAMnyB,IAASuD,KAAKK,IAAIvC,QAAQ8wB,KAAMlyB,IAAWsD,KAAKK,IAAIvC,QAAQ8wB,KAAMjyB,IAAWqD,KAAKK,IAAIvC,QAAQ8wB,KAAMhyB,IAAgBoD,KAAKK,IAAIvC,QAAQ8wB,KAAM/xB,IAAgBmD,KAAKK,IAAIvC,QAAQ8wB,KAAM9xB,KAEjWud,IAAI4M,EAAO7Z,GACP,IAAKk9B,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2sC,4CAA+C,MAAO9b,KAAM3H,EAAO7Z,GAE9E6G,SAASgT,EAAO7Z,GACZ,IAAKk9B,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2sC,4CAA+C,WAAY9b,KAAM3H,EAAO7Z,GAEnFylB,MAAMrhB,GACF,IAAK84B,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,QAAqB5C,IAAjBqW,EACA,MAAM,IAAIzT,UAAU,iCACxB,IAAIwL,EAAQzL,QAAQ8wB,KAAMvyB,GACtBmN,EAAS1L,QAAQ8wB,KAAMtyB,GACvBmN,EAAQ3L,QAAQ8wB,KAAMryB,GACtBmN,EAAO5L,QAAQ8wB,KAAMpyB,GACrBmN,EAAQ7L,QAAQ8wB,KAAMnyB,GACtBoN,EAAU/L,QAAQ8wB,KAAMlyB,GACxBqN,EAAUjM,QAAQ8wB,KAAMjyB,GACxBsN,EAAenM,QAAQ8wB,KAAMhyB,GAC7BsN,EAAepM,QAAQ8wB,KAAM/xB,GAC7BsN,EAAcrM,QAAQ8wB,KAAM9xB,GAC5BsqB,EAAqBujB,2BAA8BphC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GACxI,MAAMiD,EAAkC,iBAAjBoE,EACjBshB,oBAAuB,eAAgBthB,GACvCuhB,iBAAoBvhB,GAC1B,IAAIjD,EAAeykB,gBAAmB5lB,EAAS,eAAgB,gBAAYjS,GACvEyvC,GAAsB,EACrBr8B,IACDq8B,GAAsB,EACtBr8B,EAAe,cAEnB6Y,EAAqByjB,yBAA4BzjB,EAAoB7Y,GACrE,IAAIkD,EAAcuhB,gBAAmB5lB,EAAS,cAAe,gBAAYjS,EAAW,CAAC,SACjF2vC,GAAqB,EAOzB,GANKr5B,IACDq5B,GAAqB,EACrBr5B,EAAc2V,GAEE,SAAhB3V,IACAA,EAAc2V,IACbwjB,IAAwBE,EACzB,MAAM,IAAIrnC,WAAW,2DAEzB,GAAIonC,yBAA4Bp5B,EAAalD,KAAkBkD,EAC3D,MAAM,IAAIhO,WAAW,eAAegO,yCAAmDlD,KAE3F,MAAMb,EAAewlB,uBAA0B9lB,EAAS,cAClDia,EAAoB0jB,oCAAuC39B,EAASmB,GAC1E,IAAI0B,EAAa+6B,yBAA4B59B,GAW7C,QAVG7D,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAASuhC,0BAA6B1hC,EAAOC,EAAQC,EAAOC,EAAM+H,EAAaxB,MACrG1G,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAChF+gC,cAAiB3hC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAakd,EAAmB9Y,EAAcb,EAAcuC,MAC/J1G,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAChFghC,0BAA6B5hC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAakd,EAAmB9Y,EAAcb,EAAcuC,MAC3K1G,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GNg1E1B,SAAS0hC,wBAAwBpoB,EAAYC,EAAaC,EAAY5B,EAAW7P,EAAa0R,GACjG,IAAI5Z,EAAQyZ,EACRxZ,EAASyZ,EACTxZ,EAAQyZ,EACRxZ,EAAO4X,EACX,MAAM8B,EAAmB/nB,aAAa,uBAChCoF,EAAO+a,aAAajS,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GACrE,GAAa,IAATjJ,EACA,MAAO,CAAE8I,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GACnC,IAAI5K,EACAmR,EACAkT,IACAlT,EAAakC,eAAegR,GAC5BrkB,EAAWhB,QAAQmS,EAAY/T,IAEnC,MAAMmnB,EAAU,IAAID,EAAiB3iB,GAC/B6iB,EAAW,IAAIF,EAAiB,EAAG3iB,GACnC8iB,EAAU,IAAIH,EAAiB,EAAG,EAAG3iB,GAC3C,OAAQgR,GACJ,IAAK,OAAQ,CACT,IAAK3S,EACD,MAAM,IAAI2E,WAAW,oDAEzB,IAAIggB,EAAeG,EASfE,EAPJ,MADG7T,WAAYwT,EAAe/Z,KAAMka,GAAgBC,iBAAiB/kB,EAAUmR,EAAYoT,IACpFjjB,EAAQsJ,IAAStJ,EAAQwjB,IAC5Bla,GAAQka,EACRra,GAAS9I,EACTwP,EAAawT,IACVxT,WAAYwT,EAAe/Z,KAAMka,GAAgBC,iBAAiB/kB,EAAUmR,EAAYoT,IAK/F,MADGpT,WAAYwT,EAAe/Z,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IACrFljB,EAAQsJ,IAAStJ,EAAQ0jB,IAC5Bpa,GAAQoa,EACRta,GAAU/I,EACVwP,EAAawT,IACVxT,WAAYwT,EAAe/Z,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IAGhG,MAAMxM,EAAUhY,EAASgY,QACzB2M,EAAgB7M,gBAAgB9X,EAAUmR,EAAYoT,OAASloB,EAAW2b,GAC1E,MAAMI,EAAYpY,EAASoY,UACrBwM,EAAeliB,GAAa,MAClCkiB,EAAajS,YAAc,QAC3B,IAAI45B,EAAct0B,kBAAkBjY,EAAUmR,EAAYwT,EAAeC,EAAcxM,GACnFyM,EAAgB7lB,QAAQutC,EAAa/uC,GACzC,KAAO8D,EAAQoJ,IAAWpJ,EAAQujB,IAAgB,CAC9Cna,GAAUma,EACVpa,GAAS9I,EACTwP,EAAawT,EACbA,EAAgB7M,gBAAgB9X,EAAUmR,EAAYoT,OAASloB,EAAW2b,GAC1E,MAAM4M,EAAeliB,GAAa,MAClCkiB,EAAajS,YAAc,QAC3B45B,EAAct0B,kBAAkBjY,EAAUmR,EAAYwT,EAAeC,EAAcxM,GACnFyM,EAAgB7lB,QAAQutC,EAAa/uC,GAEzC,MAEJ,IAAK,QAAS,CACV,IAAKwC,EACD,MAAM,IAAI2E,WAAW,qDAEzB,IAAIggB,EAAeK,EAEnB,MADG7T,WAAYwT,EAAe/Z,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IACrFljB,EAAQsJ,IAAStJ,EAAQ0jB,IAC5Bpa,GAAQoa,EACRta,GAAU/I,EACVwP,EAAawT,IACVxT,WAAYwT,EAAe/Z,KAAMoa,GAAiBD,iBAAiB/kB,EAAUmR,EAAYqT,IAEhG,MAEJ,IAAK,OAAQ,CACT,IAAKxkB,EACD,MAAM,IAAI2E,WAAW,oDAEzB,IAAIggB,EAAeM,EAEnB,MADG9T,WAAYwT,EAAe/Z,KAAMqa,GAAgBF,iBAAiB/kB,EAAUmR,EAAYsT,IACpFnjB,EAAQsJ,IAAStJ,EAAQ2jB,IAC5Bra,GAAQqa,EACRta,GAAShJ,EACTwP,EAAawT,IACVxT,WAAYwT,EAAe/Z,KAAMqa,GAAgBF,iBAAiB/kB,EAAUmR,EAAYsT,IAE/F,OAMR,MAAO,CAAEha,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GM56EO4hC,CAA2B/hC,EAAOC,EAAQC,EAAOC,EAAM+H,EAAaxB,IAClGuhB,wBAA2BvhB,KAC3BA,EAAas7B,0BAA6Bt7B,EAAY1G,EAAOC,EAAQC,EAAO,MAE7EC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBgsB,gBAAmBzsB,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAasH,EAAaxB,IAC/K,IAAIk6B,SAAS5gC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,GAEzG6R,MAAMxK,GACF,IAAK84B,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAIwL,EAAQzL,QAAQ8wB,KAAMvyB,GACtBmN,EAAS1L,QAAQ8wB,KAAMtyB,GACvBmN,EAAQ3L,QAAQ8wB,KAAMryB,GACtBmN,EAAO5L,QAAQ8wB,KAAMpyB,GACrBmN,EAAQ7L,QAAQ8wB,KAAMnyB,GACtBoN,EAAU/L,QAAQ8wB,KAAMlyB,GACxBqN,EAAUjM,QAAQ8wB,KAAMjyB,GACxBsN,EAAenM,QAAQ8wB,KAAMhyB,GAC7BsN,EAAepM,QAAQ8wB,KAAM/xB,GAC7BsN,EAAcrM,QAAQ8wB,KAAM9xB,GAChC,QAAqB3B,IAAjBqW,EACA,MAAM,IAAIzT,UAAU,gCACxB,MAAMqP,EAAkC,iBAAjBoE,EACjBshB,oBAAuB,OAAQthB,GAC/BuhB,iBAAoBvhB,GACpBxC,EAAOgkB,gBAAmB5lB,EAAS,OAAQ,WAAY6lB,IACvDhjB,EAAa+6B,yBAA4B59B,GAI/C,IAAIyZ,IAFDtd,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,GAASuhC,0BAA6B1hC,EAAOC,EAAQC,EAAOC,EAAMsF,EAAMiB,IAG7FuhB,wBAA2BvhB,KAC3B4W,EAAe0kB,0BAA6Bt7B,EAAY1G,EAAOC,EAAQC,EAAO,MAE/EC,KAAAA,EAAMC,MAAAA,EAAOE,QAAAA,EAASE,QAAAA,EAASE,aAAAA,EAAcC,aAAAA,EAAcC,YAAAA,GAAgBgsB,gBAAmBzsB,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAa6E,EAAM6X,IAE/K,MAAM7K,MAAEA,GAAUkvB,cAAiB3hC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOE,EAASE,EAASE,EAAcC,EAAcC,EAAa,EAAG6E,EAAM,QAASiB,GACnJ,OAAO+L,EAEXzU,SAASiK,GACL,IAAK84B,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,IAC9BzC,UAAEA,EAASC,KAAEA,EAAId,UAAEA,GAAcslB,yBAA4BpmB,GACnE,GAAkB,WAAd2B,EACA,MAAM,IAAItL,WAAW,qCAEzB,OAAO+nC,yBAA4B5c,KAAM7f,EAAW,CAAEC,KAAAA,EAAMd,UAAAA,EAAWR,aADlDwlB,uBAA0B9lB,EAAS,WAG5DsmB,SACI,IAAK4W,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOytC,yBAA4B5c,MAEvC+E,eAAelE,EAAqBriB,GAChC,IAAKk9B,mBAAsB1b,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAoB,oBAAT8B,WAAuD,IAAxBA,KAAK4rC,eACpC,IAAI5rC,KAAK4rC,eAAehc,EAASriB,GAASmS,OAAOqP,OAE5D8c,QAAQC,KAAK,8EACNH,yBAA4B5c,OAEvCgF,UACI,MAAM,IAAI71B,UAAU,8CAExBqH,YAAYiB,GACR,OAAIikC,mBAAsBjkC,GACf,IAAI8jC,SAASrsC,QAAQuI,EAAMhK,GAAQyB,QAAQuI,EAAM/J,GAASwB,QAAQuI,EAAM9J,GAAQuB,QAAQuI,EAAM7J,GAAOsB,QAAQuI,EAAM5J,GAAQqB,QAAQuI,EAAM3J,GAAUoB,QAAQuI,EAAM1J,GAAUmB,QAAQuI,EAAMzJ,GAAekB,QAAQuI,EAAMxJ,GAAeiB,QAAQuI,EAAMvJ,IAEvPm5B,mBAAsB5vB,GAEjCwuB,eAAeC,EAAUC,EAAUvjB,GAC/B,MAAMwH,EAAMid,mBAAsBnB,GAC5B7b,EAAMgd,mBAAsBlB,GAE5B9kB,EAAa+6B,yBADHjY,iBAAoBvhB,IAE9B6S,EAAKvmB,QAAQkb,EAAK3c,GAClBiqB,EAAOxoB,QAAQkb,EAAK1c,GACpBqsB,EAAK7qB,QAAQkb,EAAKzc,GACxB,IAAIgoB,EAAKzmB,QAAQkb,EAAKxc,GACtB,MAAM0oB,EAAKpnB,QAAQkb,EAAKvc,GAClB0oB,EAAOrnB,QAAQkb,EAAKtc,GACpB0oB,EAAKtnB,QAAQkb,EAAKrc,GAClB0oB,EAAMvnB,QAAQkb,EAAKpc,GACnB,EAAMkB,QAAQkb,EAAKnc,GACzB,IAAIyoB,EAAMxnB,QAAQkb,EAAKlc,GACvB,MAAM0nB,EAAK1mB,QAAQmb,EAAK5c,GAClBgqB,EAAOvoB,QAAQmb,EAAK3c,GACpBssB,EAAK9qB,QAAQmb,EAAK1c,GACxB,IAAImoB,EAAK5mB,QAAQmb,EAAKzc,GACtB,MAAM+oB,EAAKznB,QAAQmb,EAAKxc,GAClB+oB,EAAO1nB,QAAQmb,EAAKvc,GACpB+oB,EAAK3nB,QAAQmb,EAAKtc,GAClB+oB,EAAM5nB,QAAQmb,EAAKrc,GACnB,EAAMkB,QAAQmb,EAAKpc,GACzB,IAAI8oB,EAAM7nB,QAAQmb,EAAKnc,GACvB,MAAM8uC,EAASC,qBAAwB57B,EAAYoU,EAAIiC,EAAMqC,EAAIpE,GAC3DunB,EAASD,qBAAwB57B,EAAYuU,EAAI6B,EAAMuC,EAAIlE,GACtD,IAAPL,GAAmB,IAAPG,GAAqB,IAAT8B,GAAuB,IAATD,GAAqB,IAAPsC,GAAmB,IAAPC,MAC7Dlf,KAAM6a,GAAO0mB,0BAA6B5mB,EAAIiC,EAAMqC,EAAIpE,EAAI,MAAOtU,MACnEvG,KAAMgb,GAAOumB,0BAA6BzmB,EAAI6B,EAAMuC,EAAIlE,EAAI,MAAOzU,KAE1E,MAAM87B,EAAWC,yBAA4BznB,EAAIW,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAKsmB,GACxEK,EAAWD,yBAA4BtnB,EAAIa,EAAIC,EAAMC,EAAIC,EAAK,EAAKC,EAAKmmB,GAC9E,OAAOxP,iBAAoBt6B,EAAKwS,SAASxS,EAAKiS,SAAS83B,EAAUE,MAIzEhyC,mBAAmBkwC,SAAU,qBCtS7B,MAAM3oC,GAAepH,OAAOiD,OACrB,MAAM6uC,cACTha,YAAY2T,EAAeC,EAAaC,EAAgB5R,qBAAyBgY,EAAwB,MACrG,MAAMj3B,EAAW8wB,yBAA4BH,GACvC1wB,EAAS6wB,yBAA4BF,GACrChnC,EAAWi1B,mBAAsBgS,GACjC78B,EAAmB88B,yBAA4BmG,GAKrD,GAAIha,UAAU/nB,OAAS,EACnB,MAAM,IAAI3G,WAAW,sDAEzB2oC,4BAA+Bxd,KAAM1Z,EAAUC,EAAQrW,EAAUoK,GAErEgK,gBACI,IAAKwe,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuoC,kBAAqBxoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD5oB,UACI,IAAK0rB,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOwoC,YAAezoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEnD9vB,eACI,IAAK4yB,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM1yB,GAEzB8qC,KAAKqF,EAAsB76B,GACvB,IAAKkgB,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYuY,GACb,MAAM,IAAItuC,UAAU,oBAExBmpC,mCAAsCmF,GACtC,MAAMvtC,EAAWhB,QAAQ8wB,KAAM1yB,GACzBqa,EAAa4wB,eAAkBroC,EAAU,CAAC,MAAO,QAAS,YAAa,SACvEsoC,EAAQtQ,sBAAyBuV,EAAsB91B,EAAY,WACzE,IAAK6wB,EACD,MAAM,IAAIrpC,UAAU,0BAExB,IAAIuS,EAASwmB,sBAAyBlI,KAAMrY,EAAY,IACxDjG,EAAS+2B,oBAAuBvoC,EAAUwR,EAAQ82B,GAClD92B,EAASwmB,sBAAyBxmB,EAAQiG,EAAY,IAEtD,OAAOgyB,2BAA8BzpC,EAAUwR,EAD/ByiB,iBAAoBvhB,IAGxC8hB,OAAOtM,GACH,IAAK0K,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQqlB,mBAAsBtlB,GACpC,IAAK,MAAM2gB,IAAQ,CAACjsC,EAAWC,EAASF,GAAW,CAG/C,GAFaqC,QAAQ8wB,KAAM+Y,KACd7pC,QAAQmpB,EAAO0gB,GAExB,OAAO,EAEf,OAAOC,eAAkB9pC,QAAQ8wB,KAAM1yB,GAAW4B,QAAQmpB,EAAO/qB,IAErEqL,SAASiK,GACL,IAAKkgB,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBAGxB,OAAOwuC,yBAA4B3d,KADdkZ,qBADL/U,iBAAoBvhB,KAIxCkiB,SACI,IAAKhC,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOwuC,yBAA4B3d,MAEvC+E,eAAelE,EAAqBriB,GAChC,IAAKskB,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvDgF,UACI,MAAM,IAAI71B,UAAU,kDAExBwrC,YAAYljC,GACR,IAAKqrB,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYztB,GACb,MAAM,IAAItI,UAAU,gCACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GACzBswC,EAAqBrF,eAAkBroC,EAAU,CAAC,MAAO,cACzDwR,EAASwmB,sBAAyBlI,KAAM4d,EAAoB,IAC5DC,EAAkBtF,eAAkBroC,EAAU,CAAC,SAErD,IAAI4tC,EAAerF,oBAAuBvoC,EAAUwR,EADhCwmB,sBAAyBzwB,EAAMomC,EAAiB,KAIpEC,EAAe5V,sBAAyB4V,EADf,IAAI,IAAI9W,IAAI,IAAI4W,KAAuBC,KACQ,IACxE,MAAMr/B,EAAU5L,GAAa,MAE7B,OADA4L,EAAQnB,SAAW,SACZq7B,uBAA0BxoC,EAAU4tC,EAAct/B,GAE7Do7B,eACI,IAAK9W,mBAAsB9C,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAO,CACHe,SAAUhB,QAAQ8wB,KAAM1yB,GACxBiZ,OAAQrX,QAAQ8wB,KAAMjzB,GACtBuZ,SAAUpX,QAAQ8wB,KAAMlzB,GACxBuZ,QAASnX,QAAQ8wB,KAAMnzB,IAG/B2J,YAAYiB,EAAMmL,GACd,MAAMpE,EAAU2lB,iBAAoBvhB,GACpC,OAAIkgB,mBAAsBrrB,IACtB6vB,mBAAsB9oB,GACfiqB,uBAA0Bv5B,QAAQuI,EAAM3K,GAAYoC,QAAQuI,EAAM1K,GAAUmC,QAAQuI,EAAMnK,GAAW4B,QAAQuI,EAAM5K,KAEvH6wC,mBAAsBjmC,EAAM+G,IAI3CnT,mBAAmBiyC,cAAe,0BC1HlC,MAAM91B,QAAU,IAEL,IADS/a,aAAa,sBACtB,CAAYsxC,MAEjB7kB,cAAgB,CAACnP,EAAcc,EAAuB9T,cACxD,MAAMinC,EAAKne,mBAAsBhV,GAC3B3a,EAAWi1B,mBAAsBpb,GAEvC,OAAOk0B,mCAAsCD,EADhCx2B,UAC0CtX,IAErDguC,iBAAmB,CAACrzB,EAAuB9T,cAC7C,MAAMinC,EAAKne,mBAAsBhV,GAC3B3a,EAAWq1B,qBAEjB,OAAO0Y,mCAAsCD,EADhCx2B,UAC0CtX,IAErDypB,cAAgB,CAAC5P,EAAcc,EAAuB9T,cACxD,MAAMinC,EAAKne,mBAAsBhV,GAC3B3a,EAAWi1B,mBAAsBpb,GACvC,OAAOqb,4BAA+B2Y,KAAgCC,EAAI9tC,IAcxE6G,SAAW,IRuxHV,SAASonC,iBACZ,MAAMC,EAAM,IAAIrtC,EAAmB,SAEnC,OAAO,IADkBtE,aAAa,uBAC/B,CAAqB2L,sBAAsBgmC,EAAIzvB,kBAAkB5X,WQzxHjEsnC,GAEEC,GAAM,CACf92B,QACA0R,cACAglB,iBACArlB,UAhBc,CAAC9O,EAAcc,EAAuB9T,aAC7C6jC,uBAA0B1hB,cAAcnP,EAAcc,IAgB7D0zB,aAdiB,CAAC1zB,EAAuB9T,aAClC6jC,uBAA0BsD,iBAAiBrzB,IAclD2zB,aAZiB,CAAC3zB,EAAuB9T,aAClC+jC,uBAA0BoD,iBAAiBrzB,IAYlD9T,SACA4iB,cACA8kB,iBAxBqB,CAAC5zB,EAAuB9T,aACtC4iB,cAAc4L,qBAAyB1a,GAwB9C,CAAClf,OAAOC,aAAc,gBAE1BJ,OAAOC,eAAe6yC,GAAK3yC,OAAOC,YAAa,CAC3CC,MAAO,eACPC,UAAU,EACVC,YAAY,EACZC,cAAc,ICjDlB,MAAM0G,GAAelH,OAAOmH,OAC5B,SAAS+rC,qBAAqBtuC,EAAM+P,EAAW3B,GAC3C,IAAInH,EAAOnI,QAAQkB,EAAMpD,GACrBsK,EAASpI,QAAQkB,EAAMnD,GACvBsK,EAASrI,QAAQkB,EAAMlD,GACvBqM,EAAcrK,QAAQkB,EAAMjD,GAC5BqM,EAActK,QAAQkB,EAAMhD,GAC5BqM,EAAavK,QAAQkB,EAAM/C,GAC/B,GAAImR,EAAS,CACT,MAAM4B,KAAEA,EAAId,UAAEA,EAASR,aAAEA,GAAiBN,IACvCnH,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeklC,UAAatnC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY6F,EAAWc,EAAMtB,IAKhK,MAAO,GAHYyrB,sBAAyBlzB,MACvBkzB,sBAAyBjzB,KAC9BsnC,wBAA2BrnC,EAAQgC,EAAaC,EAAaC,EAAY0G,KAGtF,MAAM0+B,UACTvb,YAAYwb,EAAe,EAAGC,EAAiB,EAAGC,EAAiB,EAAGC,EAAsB,EAAGC,EAAsB,EAAGC,EAAqB,GACzI,MAAMpE,EAAU3D,yBAA4B0H,GACtC5D,EAAY9D,yBAA4B2H,GACxC3D,EAAYhE,yBAA4B4H,GACxC/D,EAAiB7D,yBAA4B6H,GAC7CjE,EAAiB5D,yBAA4B8H,GAC7C/D,EAAgB/D,yBAA4B+H,GAClDC,WAAcrE,EAASG,EAAWE,EAAWH,EAAgBD,EAAgBG,GAC7E7sC,YAAY0xB,MACZ5wB,QAAQ4wB,KAAMhzB,EAAU+tC,GACxB3rC,QAAQ4wB,KAAM/yB,EAAYiuC,GAC1B9rC,QAAQ4wB,KAAM9yB,EAAYkuC,GAC1BhsC,QAAQ4wB,KAAM7yB,EAAiB8tC,GAC/B7rC,QAAQ4wB,KAAM5yB,EAAiB4tC,GAC/B5rC,QAAQ4wB,KAAM3yB,EAAgB8tC,GAC9B/rC,QAAQ4wB,KAAM1yB,EAAUi4B,sBAU5Br1B,eACI,IAAKwyB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBAExB,OAAOD,QAAQ8wB,KAAM1yB,GAEzB+J,WACI,IAAKqrB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMhzB,GAEzBsK,aACI,IAAKorB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM/yB,GAEzBsK,aACI,IAAKmrB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM9yB,GAEzBqM,kBACI,IAAKmpB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM7yB,GAEzBqM,kBACI,IAAKkpB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM5yB,GAEzBqM,iBACI,IAAKipB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM3yB,GAEzB+qC,KAAKiH,EAAkBz8B,GACnB,IAAK8f,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYma,GACb,MAAM,IAAIlwC,UAAU,oBAExBmpC,mCAAsC+G,GACtC,MAAMC,EAAcC,qBAAwBF,EAAkB,WAExDhiC,EAAWiqB,mBADDnD,iBAAoBvhB,IAE9BlB,EAAS69B,qBAAwBvf,MACvC,IAAI3oB,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAe/G,GAAagP,EAAQ49B,GAE1F,QADGjoC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe+lC,aAAgBnoC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY4D,IACvI,IAAIwhC,UAAUxnC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAEzEgS,IAAIpN,GACA,IAAKqkB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOswC,6CAAgD,MAAOzf,KAAM3hB,GAExEgH,SAAShH,GACL,IAAKqkB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOswC,6CAAgD,WAAYzf,KAAM3hB,GAE7EylB,MAAMzL,EAAO7Z,GACT,IAAKkkB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuwC,4BAA+B,QAAS1f,KAAM3H,EAAO7Z,GAEhEwlB,MAAM3L,EAAO7Z,GACT,IAAKkkB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuwC,4BAA+B,QAAS1f,KAAM3H,EAAO7Z,GAEhEylB,MAAMrhB,GACF,IAAK8f,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,QAAqB5C,IAAjBqW,EACA,MAAM,IAAIzT,UAAU,iCACxB,MAAMqP,EAAkC,iBAAjBoE,EACjBshB,oBAAuB,eAAgBthB,GACvCuhB,iBAAoBvhB,GACpBjD,EAAeykB,gBAAmB5lB,EAAS,eAAgB,OAAQ6lB,IACnEvlB,EAAewlB,uBAA0B9lB,EAAS,cASlDia,EAAoB8L,4BAA+B/lB,EARlC,CACnBnH,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,KAEiEkG,IAAe,GAChG,IAAItI,EAAOnI,QAAQ8wB,KAAMhzB,GACrBsK,EAASpI,QAAQ8wB,KAAM/yB,GACvBsK,EAASrI,QAAQ8wB,KAAM9yB,GACvBqM,EAAcrK,QAAQ8wB,KAAM7yB,GAC5BqM,EAActK,QAAQ8wB,KAAM5yB,GAC5BqM,EAAavK,QAAQ8wB,KAAM3yB,GAE/B,QADGgK,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAeklC,UAAatnC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYgf,EAAmB9Y,EAAcb,IACrK,IAAI+/B,UAAUxnC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAEzEirB,OAAOtM,GACH,IAAKsK,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQihB,eAAkBlhB,GAChC,IAAK,MAAM2gB,IAAQ,CAAC/rC,EAAUC,EAAYC,EAAYC,EAAiBC,EAAiBC,GAAiB,CAGrG,GAFa6B,QAAQ8wB,KAAM+Y,KACd7pC,QAAQmpB,EAAO0gB,GAExB,OAAO,EAEf,OAAO,EAEXpgC,SAASiK,GACL,IAAK8f,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,IAC9BzC,UAAEA,EAASC,KAAEA,EAAId,UAAEA,GAAcslB,yBAA4BpmB,GAEnE,OAAOkgC,qBAAqB1e,KAAM7f,EAAW,CAAEC,KAAAA,EAAMd,UAAAA,EAAWR,aAD3CwlB,uBAA0B9lB,EAAS,WAG5DsmB,SACI,IAAKpC,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuvC,qBAAqB1e,KAAM,QAEtC+E,eAAelE,EAAqBriB,GAChC,IAAKkkB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvDgF,UACI,MAAM,IAAI71B,UAAU,2DAExBgqC,gBAAgBe,GACZ,IAAKxX,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMgrC,EAAe/S,eAAkB8S,GACjChjC,EAAOhI,QAAQirC,EAActtC,GAC7BsK,EAAQjI,QAAQirC,EAAcrtC,GAC9BsK,EAAMlI,QAAQirC,EAAcptC,GAC5BmD,EAAWhB,QAAQirC,EAAc7sC,GAOvC,OAAO+rC,uBAA0BniC,EAAMC,EAAOC,EANjClI,QAAQ8wB,KAAMhzB,GACZkC,QAAQ8wB,KAAM/yB,GACdiC,QAAQ8wB,KAAM9yB,GACTgC,QAAQ8wB,KAAM7yB,GACd+B,QAAQ8wB,KAAM5yB,GACf8B,QAAQ8wB,KAAM3yB,GAC8E6C,GAEnH+0B,gBAAgBxtB,GACZ,IAAKirB,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYztB,GACb,MAAM,IAAItI,UAAU,oBAExB,MAAMqZ,EAAW/Q,EAAKohB,UACtB,QAAiBtsB,IAAbic,EACA,MAAM,IAAIrZ,UAAU,yBAExB,MAAMgrC,EAAe/S,eAAkB5e,GACjC+wB,EAAe9hC,EAAKV,SAC1B,QAAqBxK,IAAjBgtC,EACA,MAAM,IAAIpqC,UAAU,6BAExB,MAAM4H,EAAW8oB,mBAAsB0Z,GACjCriC,EAAOhI,QAAQirC,EAActtC,GAC7BsK,EAAQjI,QAAQirC,EAAcrtC,GAC9BsK,EAAMlI,QAAQirC,EAAcptC,GAC5BmD,EAAWhB,QAAQirC,EAAc7sC,GACjC+J,EAAOnI,QAAQ8wB,KAAMhzB,GACrBsK,EAASpI,QAAQ8wB,KAAM/yB,GACvBsK,EAASrI,QAAQ8wB,KAAM9yB,GACvBqM,EAAcrK,QAAQ8wB,KAAM7yB,GAC5BqM,EAActK,QAAQ8wB,KAAM5yB,GAC5BqM,EAAavK,QAAQ8wB,KAAM3yB,GAIjC,OAAO+3B,4BAA+Bl2B,QADtBi0B,6BAAgCpsB,EADrC,IADWtK,aAAa,4BACxB,CAAkByK,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAC7C,cACPvD,GAAmBoK,EAAU7G,GAExF0pC,eACI,IAAKlX,eAAkB1C,MACnB,MAAM,IAAI7wB,UAAU,oBACxB,MAAO,CACHe,SAAUhB,QAAQ8wB,KAAM1yB,GACxBytC,QAAS7rC,QAAQ8wB,KAAMhzB,GACvBguC,eAAgB9rC,QAAQ8wB,KAAM5yB,GAC9B6tC,eAAgB/rC,QAAQ8wB,KAAM7yB,GAC9B+tC,UAAWhsC,QAAQ8wB,KAAM/yB,GACzBkuC,cAAejsC,QAAQ8wB,KAAM3yB,GAC7B+tC,UAAWlsC,QAAQ8wB,KAAM9yB,IAGjCsJ,YAAYiB,EAAMmL,GACd,MACMvF,EAAWiqB,mBADDnD,iBAAoBvhB,IAEpC,OAAI8f,eAAkBjrB,GACX,IAAIonC,UAAU3vC,QAAQuI,EAAMzK,GAAWkC,QAAQuI,EAAMxK,GAAaiC,QAAQuI,EAAMvK,GAAagC,QAAQuI,EAAMtK,GAAkB+B,QAAQuI,EAAMrK,GAAkB8B,QAAQuI,EAAMpK,IAE/KisC,eAAkB7hC,EAAM4F,GAEnC4oB,eAAeC,EAAUC,GACrB,MAAM/b,EAAMkvB,eAAkBpT,GACxB7b,EAAMivB,eAAkBnT,GAC9B,IAAK,MAAM4S,IAAQ,CAAC/rC,EAAUC,EAAYC,EAAYC,EAAiBC,EAAiBC,GAAiB,CACrG,MAAMguC,EAAOnsC,QAAQkb,EAAK2uB,GACpBuC,EAAOpsC,QAAQmb,EAAK0uB,GAC1B,GAAIsC,IAASC,EACT,OAAO5N,iBAAoB2N,EAAOC,GAE1C,OAAO,GAIfjwC,mBAAmBwzC,UAAW,sBChQvB,MAAMc,SACTrc,YAAYsc,GAGR,GAAIrc,UAAU/nB,OAAS,EACnB,MAAM,IAAI3G,WAAW,4CAEzB,MAAMgC,EAAqBgpC,+BAAkCD,GAC7DtxC,YAAY0xB,MACZ5wB,QAAQ4wB,KAAMpzB,EAAaiK,GAU/B5H,SACI,IAAK6wC,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOi0B,SAAYpD,MAEvB/U,wBAAwB80B,GACpB,IAAKD,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqY,EAAUmd,kBAAqBob,GAC/B9wC,EAAKC,QAAQ8wB,KAAMpzB,GACzB,OAAIozC,yBAA4B/wC,GACrBgxC,0BAA6BhxC,GAEjCixC,iCAAoChxC,QAAQsY,EAAS7a,GAAmBsC,GAEnFkxC,mBAAmBJ,GACf,IAAKD,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBAExB,OAAOixC,kCAAqCpgB,KAD5B2E,kBAAqBob,IAGzCM,oBAAoBN,EAAc5I,EAAgB5R,sBAG9C,OAAO0Y,mCAAsCje,KAF7B2E,kBAAqBob,GACpB5a,mBAAsBgS,IAG3CmJ,cAAcC,EAAe39B,GACzB,IAAKk9B,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBAIxB,OAAOg0B,6BAAgCnD,KAHtBwa,mBAAsB+F,GAEhB7F,yBADPvW,iBAAoBvhB,KAIxCoJ,uBAAuBu0B,GACnB,IAAKT,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM4b,EAAWyvB,mBAAsB+F,GACjCn1B,EAAU3e,aAAa,sBACvBwC,EAAKC,QAAQ8wB,KAAMpzB,GACzB,GAAIozC,yBAA4B/wC,GAAK,CACjC,MAAM8N,EAAUyjC,qBAAwBtxC,QAAQ6b,EAAUle,GAAWqC,QAAQ6b,EAAUje,GAAYoC,QAAQ6b,EAAUhe,GAAUmC,QAAQ6b,EAAU/d,GAAWkC,QAAQ6b,EAAU9d,GAAaiC,QAAQ6b,EAAU7d,GAAagC,QAAQ6b,EAAU5d,GAAkB+B,QAAQ6b,EAAU3d,GAAkB8B,QAAQ6b,EAAU1d,IACpT,GAAgB,OAAZ0P,EACA,MAAM,IAAIlI,WAAW,uCACzB,MAAM+H,EAAWqjC,0BAA6BhxC,GAC9C,MAAO,CAAC,IAAImc,EAAQhY,EAAKiS,SAAStI,EAAS3J,EAAKC,OAAOuJ,MAG3D,OV6jED,SAAS6jC,0BAA0BxxC,EAAIiI,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAC5G,MAAMyK,EAAKlH,qBAAqB9F,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,GAClG,GAAW,OAAPyK,EACA,MAAM,IAAIrP,WAAW,uCACzB,IAAI6rC,EAAYttC,EAAKiS,SAASnB,EAAItQ,IAC9BR,EAAKoC,SAASkrC,EAAW5sC,MACzB4sC,EAAYx8B,GAChB,IAAIy8B,EAAUvtC,EAAKqY,IAAIvH,EAAItQ,IACvBR,EAAKsc,YAAYixB,EAAS5sC,MAC1B4sC,EAAUz8B,GACd,MAAM08B,EAAWhyB,iCAAiC8xB,EAAWzxC,GACvD4xC,EAASjyB,iCAAiC+xB,EAAS1xC,GAEzD,OADc2xC,IAAaC,EAAS,CAACD,GAAY,CAACA,EAAUC,IAEvD5qC,KAAK+Y,IACN,MAAM1H,EAAmBlU,EAAKiS,SAASnB,EAAI9Q,EAAKC,OAAO2b,IACjDwB,EAAQ3B,6BAA6BvH,EAAkBrY,GAC7D,GAAIiI,IAASsZ,EAAMtZ,MACfC,IAAUqZ,EAAMrZ,OAChBC,IAAQoZ,EAAMpZ,KACdC,IAASmZ,EAAMnZ,MACfC,IAAWkZ,EAAMlZ,QACjBC,IAAWiZ,EAAMjZ,QACjBgC,IAAgBiX,EAAMjX,aACtBC,IAAgBgX,EAAMhX,aACtBC,IAAe+W,EAAM/W,WAGzB,OAAO6N,KAENsrB,QAAQz9B,QAAY5I,IAAN4I,IU5lES2rC,CAA6B7xC,EAAIC,QAAQ6b,EAAUle,GAAWqC,QAAQ6b,EAAUje,GAAYoC,QAAQ6b,EAAUhe,GAAUmC,QAAQ6b,EAAU/d,GAAWkC,QAAQ6b,EAAU9d,GAAaiC,QAAQ6b,EAAU7d,GAAagC,QAAQ6b,EAAU5d,GAAkB+B,QAAQ6b,EAAU3d,GAAkB8B,QAAQ6b,EAAU1d,IAC9S4I,KAAKiO,GAAO,IAAIkH,EAAQlH,KAEnD68B,kBAAkBC,GACd,IAAKlB,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM8xC,EAAgBtc,kBAAqBqc,GACrC/xC,EAAKC,QAAQ8wB,KAAMpzB,GAEzB,GAAIozC,yBAA4B/wC,IAAc,QAAPA,EACnC,OAAO,KAEX,IAAIqY,EAAmBpY,QAAQ+xC,EAAet0C,GAC9C,MAAMye,EAAU3e,aAAa,sBAE7B,OADA6a,EVs7DD,SAAS45B,8BAA8B55B,EAAkBrY,GAe5D,MAAMkyC,EAAe/tC,EAAKqY,IAAInE,EAAkBpT,IAC1CktC,EAAWxwB,QAAQC,oCAAqCswB,GAG9D,IAAI9vB,EAAYT,QAAQ5c,GAAgCsT,GACxD,MAAMgK,EAAe1C,iCAAiCyC,EAAWpiB,GACjE,IAAIkiB,EAAaE,EACbD,EAAgBE,EACpB,KAAOA,IAAiBF,GAAiBhe,EAAKoC,SAASpC,EAAKC,OAAOge,GAAY+vB,IAC3EjwB,EAAa/d,EAAKqY,IAAI4F,EAAWld,IACjCid,EAAgBxC,iCAAiCuC,EAAYliB,GACzDqiB,IAAiBF,IACjBC,EAAYF,GAGpB,OAAIG,IAAiBF,EACV,KACIG,QAAQxU,GAAY6R,iCAAiC7R,EAAS9N,IAAKoiB,EAAWF,EAAYG,EAAcF,GUt9DhGiwB,CAAiC/5B,EAAkBrY,GAC1C,OAArBqY,EAA4B,KAAO,IAAI8D,EAAQ9D,GAE1Dg6B,sBAAsBN,GAClB,IAAKlB,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,MAAM8xC,EAAgBtc,kBAAqBqc,GACrC/xC,EAAKC,QAAQ8wB,KAAMpzB,GAEzB,GAAIozC,yBAA4B/wC,IAAc,QAAPA,EACnC,OAAO,KAEX,IAAIqY,EAAmBpY,QAAQ+xC,EAAet0C,GAC9C,MAAMye,EAAU3e,aAAa,sBAE7B,OADA6a,EAAmBi6B,kCAAqCj6B,EAAkBrY,GAC9C,OAArBqY,EAA4B,KAAO,IAAI8D,EAAQ9D,GAE1D3O,WACI,IAAKmnC,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOi0B,SAAYl0B,QAAQ8wB,KAAMpzB,IAErCk4B,SACI,IAAKgb,mBAAsB9f,MACvB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOi0B,SAAYpD,MAEvBxpB,YAAYiB,GACR,OAAOooB,mBAAsBpoB,IAIrCpM,mBAAmBs0C,SAAU,qBCjH7B,MAAM/sC,GAAepH,OAAOiD,OACrB,MAAM+yC,eACTle,YAAY0T,EAAcC,EAAeE,EAAgB5R,qBAAyBkc,EAAuB,GACrG,MAAMp7B,EAAU+wB,yBAA4BJ,GACtC1wB,EAAW8wB,yBAA4BH,GACvC/mC,EAAWi1B,mBAAsBgS,GACjCh9B,EAAkBi9B,yBAA4BqK,GAKpD,GAAIle,UAAU/nB,OAAS,EACnB,MAAM,IAAI3G,WAAW,uDAEzB6sC,6BAAgC1hB,KAAM3Z,EAASC,EAAUpW,EAAUiK,GAEvEjD,WACI,IAAK2rB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOqoC,aAAgBtoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEpD7oB,YACI,IAAK0rB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOsoC,cAAiBvoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAErD1b,gBACI,IAAKue,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuoC,kBAAqBxoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEzD9vB,eACI,IAAK2yB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM1yB,GAEzB2J,UACI,IAAK4rB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOmoC,YAAepoC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEnD9c,cACI,IAAK2f,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOooC,gBAAmBroC,QAAQ8wB,KAAM1yB,GAAW0yB,MAEvDzW,kBACI,IAAKsZ,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO6oC,oBAAuB9oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE3DvW,iBACI,IAAKoZ,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO8oC,mBAAsB/oC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DrW,mBACI,IAAKkZ,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO+oC,qBAAwBhpC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE5DnW,iBACI,IAAKgZ,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOgpC,mBAAsBjpC,QAAQ8wB,KAAM1yB,GAAW0yB,MAE1DoY,KAAKuJ,EAAuB/+B,GACxB,IAAKigB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYyc,GACb,MAAM,IAAIxyC,UAAU,oBAExBmpC,mCAAsCqJ,GACtC,MAAMzxC,EAAWhB,QAAQ8wB,KAAM1yB,GACzBqa,EAAa4wB,eAAkBroC,EAAU,CAAC,QAAS,YAAa,SAChEsoC,EAAQtQ,sBAAyByZ,EAAuBh6B,EAAY,WAC1E,IAAK6wB,EACD,MAAM,IAAIrpC,UAAU,2BAExB,IAAIuS,EAASwmB,sBAAyBlI,KAAMrY,EAAY,IACxDjG,EAAS+2B,oBAAuBvoC,EAAUwR,EAAQ82B,GAClD92B,EAASwmB,sBAAyBxmB,EAAQiG,EAAY,IAEtD,OAAO8xB,4BAA+BvpC,EAAUwR,EADhCyiB,iBAAoBvhB,IAGxC6I,IAAIpN,EAAsBG,GACtB,IAAKqkB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyyC,kDAAqD,MAAO5hB,KAAM3hB,EAAsBG,GAEnG6G,SAAShH,EAAsBG,GAC3B,IAAKqkB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyyC,kDAAqD,WAAY5hB,KAAM3hB,EAAsBG,GAExGslB,MAAMzL,EAAO7Z,GACT,IAAKqkB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO0yC,iCAAoC,QAAS7hB,KAAM3H,EAAO7Z,GAErEwlB,MAAM3L,EAAO7Z,GACT,IAAKqkB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO0yC,iCAAoC,QAAS7hB,KAAM3H,EAAO7Z,GAErEkmB,OAAOtM,GACH,IAAKyK,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQypB,oBAAuB1pB,GACrC,IAAK,MAAM2gB,IAAQ,CAAClsC,EAAUC,EAAWC,GAAU,CAG/C,GAFamC,QAAQ8wB,KAAM+Y,KACd7pC,QAAQmpB,EAAO0gB,GAExB,OAAO,EAEf,OAAOC,eAAkB9pC,QAAQ8wB,KAAM1yB,GAAW4B,QAAQmpB,EAAO/qB,IAErEqL,SAASiK,GACL,IAAKigB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBAGxB,OAAO4yC,0BAA6B/hB,KADfkZ,qBADL/U,iBAAoBvhB,KAIxCkiB,SACI,IAAKjC,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO4yC,0BAA6B/hB,MAExC+E,eAAelE,EAAqBriB,GAChC,IAAKqkB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvDgF,UACI,MAAM,IAAI71B,UAAU,gEAExBwrC,YAAYljC,GACR,IAAKorB,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYztB,GACb,MAAM,IAAItI,UAAU,gCACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GACzBswC,EAAqBrF,eAAkBroC,EAAU,CAAC,YAAa,SAC/DwR,EAASwmB,sBAAyBlI,KAAM4d,EAAoB,IAC5DC,EAAkBtF,eAAkBroC,EAAU,CAAC,QAErD,IAAI4tC,EAAerF,oBAAuBvoC,EAAUwR,EADhCwmB,sBAAyBzwB,EAAMomC,EAAiB,KAIpEC,EAAe5V,sBAAyB4V,EADf,IAAI,IAAI9W,IAAI,IAAI4W,KAAuBC,KACQ,IACxE,MAAMr/B,EAAU5L,GAAa,MAE7B,OADA4L,EAAQnB,SAAW,SACZq7B,uBAA0BxoC,EAAU4tC,EAAct/B,GAE7Do7B,eACI,IAAK/W,oBAAuB7C,MACxB,MAAM,IAAI7wB,UAAU,oBACxB,MAAO,CACHe,SAAUhB,QAAQ8wB,KAAM1yB,GACxBiZ,OAAQrX,QAAQ8wB,KAAMjzB,GACtBuZ,SAAUpX,QAAQ8wB,KAAMlzB,GACxBuZ,QAASnX,QAAQ8wB,KAAMnzB,IAG/B2J,YAAYiB,EAAMmL,GACd,MAAMpE,EAAU2lB,iBAAoBvhB,GACpC,OAAIigB,oBAAuBprB,IACvB6vB,mBAAsB9oB,GACf+pB,wBAA2Br5B,QAAQuI,EAAM5K,GAAWqC,QAAQuI,EAAM3K,GAAYoC,QAAQuI,EAAMnK,GAAW4B,QAAQuI,EAAM1K,KAEzH+0C,oBAAuBrqC,EAAM+G,GAExCynB,eAAeC,EAAUC,GACrB,MAAM/b,EAAM03B,oBAAuB5b,GAC7B7b,EAAMy3B,oBAAuB3b,GACnC,OAAOyN,eAAkB1kC,QAAQkb,EAAKvd,GAAWqC,QAAQkb,EAAKtd,GAAYoC,QAAQkb,EAAKrd,GAAUmC,QAAQmb,EAAKxd,GAAWqC,QAAQmb,EAAKvd,GAAYoC,QAAQmb,EAAKtd,KAIvK1B,mBAAmBm2C,eAAgB,2BClL5B,MAAMQ,cACT1e,YAAY0C,EAAuBic,EAAe9K,EAAgB5R,sBAK9D,GAAIhC,UAAU/nB,OAAS,EACnB,MAAM,IAAIrM,UAAU,kDAKxB+yC,iCAAoCliB,KAHXwD,SAAYwC,GACpBnG,mBAAsBoiB,GACtB9c,mBAAsBgS,IAG3CjnC,eACI,IAAK0yB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAM1yB,GAEzByJ,eACI,IAAK6rB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ8wB,KAAMxyB,GAEzB0J,WACI,IAAK0rB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOqoC,aAAgBtoC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAE7D7oB,YACI,IAAKyrB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOsoC,cAAiBvoC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAE9D1b,gBACI,IAAKse,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOuoC,kBAAqBxoC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAElE5oB,UACI,IAAKwrB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOwoC,YAAezoC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAE5D3oB,WACI,IAAKurB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ6b,SAASiV,MAAOhzB,GAEnCsK,aACI,IAAKsrB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ6b,SAASiV,MAAO/yB,GAEnCsK,aACI,IAAKqrB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ6b,SAASiV,MAAO9yB,GAEnCqM,kBACI,IAAKqpB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ6b,SAASiV,MAAO7yB,GAEnCqM,kBACI,IAAKopB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ6b,SAASiV,MAAO5yB,GAEnCqM,iBACI,IAAKmpB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOD,QAAQ6b,SAASiV,MAAO3yB,GAEnC4J,UACI,IAAK2rB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOmoC,YAAepoC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAE5D9c,cACI,IAAK0f,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOooC,gBAAmBroC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAEhE0D,mBACI,IAAKd,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMtD,EAAQqD,QAAQ8wB,KAAMrzB,GAC5B,OAAOyG,EAAKwS,SAASxS,EAAKkC,OAAOzJ,EAAO6H,KAE5Cic,wBACI,IAAKiT,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMtD,EAAQqD,QAAQ8wB,KAAMrzB,GAC5B,OAAOyG,EAAKwS,SAASxS,EAAKkC,OAAOzJ,EAAO4H,KAE5CkwB,wBACI,IAAKf,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMtD,EAAQqD,QAAQ8wB,KAAMrzB,GAC5B,OAAOi3B,iBAAoBxwB,EAAKkC,OAAOzJ,EAAO2H,KAElD8T,uBACI,IAAKsb,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOy0B,iBAAoB10B,QAAQ8wB,KAAMrzB,IAE7Coc,gBACI,IAAK6Z,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyoC,kBAAqB1oC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAElE/W,gBACI,IAAK2Z,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO0oC,kBAAqB3oC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAElE7W,iBACI,IAAKyZ,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2oC,mBAAsB5oC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAEnEmiB,iBACI,IAAKvf,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMgW,EAAK4F,SAASiV,MACdkD,EAAWz2B,aAAa,4BACxByK,EAAOhI,QAAQiW,EAAItY,GACnBsK,EAAQjI,QAAQiW,EAAIrY,GACpBsK,EAAMlI,QAAQiW,EAAIpY,GAClBq1C,EAAQ,IAAIlf,EAAShsB,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GACtDirC,EAAiBxZ,WAAc3xB,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,UAC7DkrC,EAAW,IAAIpf,EAASmf,EAAenrC,KAAMmrC,EAAelrC,MAAOkrC,EAAejrC,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GACtGL,EAAW7H,QAAQ8wB,KAAMxyB,GACzB+0C,EAAUrzC,QAAQi0B,6BAAgCpsB,EAAUqrC,EAAO,cAAez1C,GAClF61C,EAAatzC,QAAQi0B,6BAAgCpsB,EAAUurC,EAAU,cAAe31C,GAC9F,OAAOyG,EAAKwS,SAASxS,EAAKiS,SAASm9B,EAAYD,IAAY,MAE/Dl5B,iBACI,IAAKuZ,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO4oC,mBAAsB7oC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAEnEzW,kBACI,IAAKqZ,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO6oC,oBAAuB9oC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAEpEvW,iBACI,IAAKmZ,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO8oC,mBAAsB/oC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAEnErW,mBACI,IAAKiZ,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO+oC,qBAAwBhpC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAErEnW,iBACI,IAAK+Y,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOgpC,mBAAsBjpC,QAAQ8wB,KAAM1yB,GAAWyd,SAASiV,OAEnEhwB,aACI,IAAK4yB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOixC,kCAAqClxC,QAAQ8wB,KAAMxyB,GAAY0B,QAAQ8wB,KAAMzyB,IAExFyhB,wBACI,IAAK4T,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOszC,wBAA2BvzC,QAAQ8wB,KAAMxyB,GAAY0B,QAAQ8wB,KAAMzyB,IAE9E6qC,KAAKsK,EAA2B9/B,GAC5B,IAAKggB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,IAAK+1B,SAAYwd,GACb,MAAM,IAAIvzC,UAAU,gCAExBmpC,mCAAsCoK,GAEtC,MAAMlkC,EAAU2lB,iBAAoBvhB,GAC9BoC,EAAiB01B,yBAA4Bl8B,GAC7CxO,EAAS2yC,iBAAoBnkC,EAAS,UACtCzH,EAAW7H,QAAQ8wB,KAAMxyB,GACzB0C,EAAWhB,QAAQ8wB,KAAM1yB,GAazBs1C,EAAmBC,UAZNtK,eAAkBroC,EAAU,CAC3C,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,SAE8C,UAC5CsoC,EAAQtQ,sBAAyBwa,EAA2BE,EAAkB,WAC9EE,EAA8BD,UAAaD,EAAkB,YACnE,IAAIlhC,EAASwmB,sBAAyBlI,KAAM8iB,EAA6B,CAAC,WAAY,WACtFphC,EAAS+2B,oBAAuBvoC,EAAUwR,EAAQ82B,GAClD92B,EAASwmB,sBAAyBxmB,EAAQohC,EAA6B,CAAC,WAAY,WACpF,IAAI5rC,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAMgC,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,GAAesgC,gCAAmC7pC,EAAUwR,EAAQlD,GAI5I,OAAO4mB,4BAFkB2d,2BAA8B7rC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY,SADpHwmC,0BAA6Bv+B,EAAO1R,QACoG+G,EAAUiO,EAAgBhV,GAC/J,GACoCd,QAAQ8wB,KAAMxyB,GAAY0C,GAEtF+pC,cAAcC,GACV,IAAKtX,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMgrC,EAAe/S,eAAkB8S,GACjChjC,EAAOhI,QAAQirC,EAActtC,GAC7BsK,EAAQjI,QAAQirC,EAAcrtC,GAC9BsK,EAAMlI,QAAQirC,EAAcptC,GAClC,IAAImD,EAAWhB,QAAQirC,EAAc7sC,GACrC,MAAM01C,EAASj4B,SAASiV,MAClB3oB,EAAOnI,QAAQ8zC,EAAQh2C,GACvBsK,EAASpI,QAAQ8zC,EAAQ/1C,GACzBsK,EAASrI,QAAQ8zC,EAAQ91C,GACzBqM,EAAcrK,QAAQ8zC,EAAQ71C,GAC9BqM,EAActK,QAAQ8zC,EAAQ51C,GAC9BqM,EAAavK,QAAQ8zC,EAAQ31C,GACnC6C,EAAWkqC,qBAAwBlrC,QAAQ8wB,KAAM1yB,GAAW4C,GAC5D,MAAM6G,EAAW7H,QAAQ8wB,KAAMxyB,GAI/B,OAAO43B,4BAA+Bl2B,QADtBi0B,6BAAgCpsB,EADrC,IADWtK,aAAa,4BACxB,CAAkByK,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAC7C,cACPvD,GAAmBoK,EAAU7G,GAExF8pC,cAAcZ,GACV,IAAKxW,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAM0vC,EAAYpyC,aAAa,wBACzBwuB,OAAqC1uB,IAAtB6sC,EAAkC,IAAIyF,EAAcvF,eAAkBF,GACrF4J,EAASj4B,SAASiV,MAClB9oB,EAAOhI,QAAQ8zC,EAAQn2C,GACvBsK,EAAQjI,QAAQ8zC,EAAQl2C,GACxBsK,EAAMlI,QAAQ8zC,EAAQj2C,GACtBmD,EAAWhB,QAAQ8wB,KAAM1yB,GACzB+J,EAAOnI,QAAQ+rB,EAAcjuB,GAC7BsK,EAASpI,QAAQ+rB,EAAchuB,GAC/BsK,EAASrI,QAAQ+rB,EAAc/tB,GAC/BqM,EAAcrK,QAAQ+rB,EAAc9tB,GACpCqM,EAActK,QAAQ+rB,EAAc7tB,GACpCqM,EAAavK,QAAQ+rB,EAAc5tB,GACnC0J,EAAW7H,QAAQ8wB,KAAMxyB,GAI/B,OAAO43B,4BAA+Bl2B,QADtBi0B,6BAAgCpsB,EADrC,IADWtK,aAAa,4BACxB,CAAkByK,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYvJ,GAC7C,cACPvD,GAAmBoK,EAAU7G,GAExF+yC,aAAahB,GACT,IAAKrf,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAM4H,EAAW8oB,mBAAsBoiB,GACvC,OAAO7c,4BAA+Bl2B,QAAQ8wB,KAAMrzB,GAAmBoK,EAAU7H,QAAQ8wB,KAAM1yB,IAEnGqrC,aAAaxB,GACT,IAAKvU,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWi1B,mBAAsBgS,GACvC,OAAO/R,4BAA+Bl2B,QAAQ8wB,KAAMrzB,GAAmBuC,QAAQ8wB,KAAMxyB,GAAY0C,GAErGub,IAAIpN,EAAsBG,GACtB,IAAKokB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO+zC,iDAAoD,MAAOljB,KAAM3hB,EAAsBG,GAElG6G,SAAShH,EAAsBG,GAC3B,IAAKokB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO+zC,iDAAoD,WAAYljB,KAAM3hB,EAAsBG,GAEvGslB,MAAMzL,EAAO7Z,GACT,IAAKokB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOg0C,gCAAmC,QAASnjB,KAAM3H,EAAO7Z,GAEpEwlB,MAAM3L,EAAO7Z,GACT,IAAKokB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOg0C,gCAAmC,QAASnjB,KAAM3H,EAAO7Z,GAEpEylB,MAAMrhB,GACF,IAAKggB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,QAAqB5C,IAAjBqW,EACA,MAAM,IAAIzT,UAAU,iCACxB,MAAMqP,EAAkC,iBAAjBoE,EACjBshB,oBAAuB,eAAgBthB,GACvCuhB,iBAAoBvhB,GACpBjD,EAAeykB,gBAAmB5lB,EAAS,eAAgB,OAAQ6lB,GAAa,CAAC,QACjFvlB,EAAewlB,uBAA0B9lB,EAAS,cAUlDia,EAAoB8L,4BAA+B/lB,EAT/B,CACtBpH,IAAK,EACLC,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRgC,YAAa,IACbC,YAAa,IACbC,WAAY,KAEoEkG,IAAe,GAE7FwF,EAAK4F,SAASiV,MACpB,IAAI9oB,EAAOhI,QAAQiW,EAAItY,GACnBsK,EAAQjI,QAAQiW,EAAIrY,GACpBsK,EAAMlI,QAAQiW,EAAIpY,GAClBsK,EAAOnI,QAAQiW,EAAInY,GACnBsK,EAASpI,QAAQiW,EAAIlY,GACrBsK,EAASrI,QAAQiW,EAAIjY,GACrBqM,EAAcrK,QAAQiW,EAAIhY,GAC1BqM,EAActK,QAAQiW,EAAI/X,GAC1BqM,EAAavK,QAAQiW,EAAI9X,GAC7B,MAAM61B,EAAWz2B,aAAa,4BACxBsK,EAAW7H,QAAQ8wB,KAAMxyB,GACzB0C,EAAWhB,QAAQ8wB,KAAM1yB,GAEzB81C,EAAejgB,6BAAgCpsB,EADrC,IAAImsB,EAASh0B,QAAQiW,EAAItY,GAAWqC,QAAQiW,EAAIrY,GAAYoC,QAAQiW,EAAIpY,GAAU,EAAG,EAAG,EAAG,EAAG,EAAG,GACzC,cAClEmmB,EAAQmwB,iBAAoBD,EAAcrsC,EAAU7G,EAAU,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzF6iB,EAAc3f,EAAKiS,SAAS6N,EAAO9f,EAAKC,OAAOnE,QAAQk0C,EAAcz2C,KAC3E,GAAIyG,EAAKoa,MAAMuF,EAAa5f,IACxB,MAAM,IAAI0B,WAAW,sEAEtBqC,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQgC,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,GAAe8gC,iBAAoBrjC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAYgf,EAAmB9Y,EAAcb,EAGvN1L,EAAKwS,SAASmN,KASd,OAAOqS,4BAFkB2d,2BAA8B7rC,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQgC,EAAaC,EAAaC,EAAY,SADpHgpC,wBAA2B1rC,EAAU7H,QAAQ8wB,KAAMzyB,IACqFwJ,EAAU,aAAc,UAC7J,GACoCA,EAAU7H,QAAQ8wB,KAAM1yB,IAEpFo3B,OAAOtM,GACH,IAAKwK,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMkpB,EAAQirB,wBAA2BlrB,GACnChO,EAAMlb,QAAQ8wB,KAAMrzB,GACpB0d,EAAMnb,QAAQmpB,EAAO1rB,GAC3B,QAAKyG,EAAKoa,MAAMpa,EAAKC,OAAO+W,GAAMhX,EAAKC,OAAOgX,QAEzCk5B,eAAkBr0C,QAAQ8wB,KAAMxyB,GAAY0B,QAAQmpB,EAAO7qB,KAEzDwrC,eAAkB9pC,QAAQ8wB,KAAM1yB,GAAW4B,QAAQmpB,EAAO/qB,KAErEqL,SAASiK,GACL,IAAKggB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMqP,EAAU2lB,iBAAoBvhB,IAC9BzC,UAAEA,EAASC,KAAEA,EAAId,UAAEA,GAAcslB,yBAA4BpmB,GAC7DM,EAAewlB,uBAA0B9lB,EAAS,SAIxD,OAAOglC,8BAAiCxjB,KAAM7f,EAHzB+4B,qBAAwB16B,GZwV9C,SAASilC,yBAAyBjlC,GACrC,OAAOC,UAAUD,EAAS,eAAgB,CAAC,OAAQ,SAAU,QYxVpCklC,CAA4BllC,GZ0VlD,SAASmlC,mBAAmBnlC,GAC/B,OAAOC,UAAUD,EAAS,SAAU,CAAC,OAAQ,SAAU,QY1VhColC,CAAsBplC,GACwD,CAC7F4B,KAAAA,EACAd,UAAAA,EACAR,aAAAA,IAGRimB,eAAelE,EAAqBriB,GAChC,IAAKokB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO,IAAI+B,GAAe2vB,EAASriB,GAASmS,OAAOqP,MAEvD8E,SACI,IAAKlC,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOq0C,8BAAiCxjB,KAAM,QAElDgF,UACI,MAAM,IAAI71B,UAAU,+DAExB00C,aACI,IAAKjhB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMgW,EAAK4F,SAASiV,MACdkD,EAAWz2B,aAAa,4BACxByD,EAAWhB,QAAQ8wB,KAAM1yB,GACzB8lB,EAAU,IAAI8P,EAASh0B,QAAQiW,EAAItY,GAAWqC,QAAQiW,EAAIrY,GAAYoC,QAAQiW,EAAIpY,GAAU,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGmD,GAC9G6G,EAAW7H,QAAQ8wB,KAAMxyB,GAE/B,OAAO43B,4BAA+Bl2B,QADtBi0B,6BAAgCpsB,EAAUqc,EAAS,cACZzmB,GAAmBoK,EAAU7G,GAExF4zC,YACI,IAAKlhB,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBAExB,OAAO,IADiB1C,aAAa,sBAC9B,CAAoByC,QAAQ8wB,KAAMrzB,IAE7CguC,cACI,IAAK/X,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAOyrC,uBAA0B7vB,SAASiV,OAE9C6a,cACI,IAAKjY,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO2rC,uBAA0B/vB,SAASiV,OAE9CmZ,kBACI,IAAKvW,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,OAAO4b,SAASiV,MAEpBwZ,mBACI,IAAK5W,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GAG/B,OAAOmsC,4BAA+BvpC,EADvBg4B,sBAAyBlI,KADrBuY,eAAkBroC,EAAU,CAAC,YAAa,SACH,KAG9DwpC,kBACI,IAAK9W,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMe,EAAWhB,QAAQ8wB,KAAM1yB,GAG/B,OAAOqsC,2BAA8BzpC,EADtBg4B,sBAAyBlI,KADrBuY,eAAkBroC,EAAU,CAAC,MAAO,cACG,KAG9D0pC,eACI,IAAKhX,wBAA2B5C,MAC5B,MAAM,IAAI7wB,UAAU,oBACxB,MAAMgW,EAAK4F,SAASiV,MACdzR,EAAKrf,QAAQ8wB,KAAMxyB,GACzB,MAAO,CACH0C,SAAUhB,QAAQ8wB,KAAM1yB,GACxBiZ,OAAQrX,QAAQiW,EAAIpY,GACpBguC,QAAS7rC,QAAQiW,EAAInY,GACrBguC,eAAgB9rC,QAAQiW,EAAI/X,GAC5B6tC,eAAgB/rC,QAAQiW,EAAIhY,GAC5B+tC,UAAWhsC,QAAQiW,EAAIlY,GACvBqZ,SAAUpX,QAAQiW,EAAIrY,GACtBquC,cAAejsC,QAAQiW,EAAI9X,GAC3B+tC,UAAWlsC,QAAQiW,EAAIjY,GACvBmZ,QAASnX,QAAQiW,EAAItY,GACrBmD,OAAQowC,kCAAqC7xB,EAAIrf,QAAQ8wB,KAAMzyB,IAC/DwJ,SAAUwX,GAGlB/X,YAAYiB,EAAMmL,GACd,MAAMpE,EAAU2lB,iBAAoBvhB,GACpC,OAAIggB,wBAA2BnrB,IAC3B6vB,mBAAsB9oB,GACtBk8B,yBAA4Bl8B,GAC5BmkC,iBAAoBnkC,EAAS,UACtB4mB,4BAA+Bl2B,QAAQuI,EAAM9K,GAAmBuC,QAAQuI,EAAMjK,GAAY0B,QAAQuI,EAAMnK,KAE5Gg2C,wBAA2B7rC,EAAM+G,GAE5CynB,eAAeC,EAAUC,GACrB,MAAM/b,EAAMk5B,wBAA2Bpd,GACjC7b,EAAMi5B,wBAA2Bnd,GACjCzP,EAAMxnB,QAAQkb,EAAKzd,GACnBoqB,EAAM7nB,QAAQmb,EAAK1d,GACzB,OAAIyG,EAAKoC,SAASpC,EAAKC,OAAOqjB,GAAMtjB,EAAKC,OAAO0jB,KACpC,EACR3jB,EAAKsc,YAAYtc,EAAKC,OAAOqjB,GAAMtjB,EAAKC,OAAO0jB,IACxC,EACJ,GAKf,SAAShM,SAASoD,GACd,OAAO8vB,mCAAsC/uC,QAAQif,EAAK3gB,GAAY0B,QAAQif,EAAK5gB,GAAU2B,QAAQif,EAAK7gB,IAF9GjC,mBAAmB22C,cAAe,wLC1d3B,SAAS+B,oBAEZ,MAAMz8B,EAAmBlU,EAAKS,SAAST,EAAKC,QAAQ2sB,MAAOvsB,IAC3D,OAAO,IAAI2X,QAAQoY,SAAYlc,ICGnC,MAAM08B,GAAQ,CACVC,QACAC,SACAC,UACAC,cACAC,SACAC,cAEAC,UACAC,SACAC,eACAC,eAEJ,IAAK,MAAMtZ,KAAQ4Y,GAAO,CACtB,MAAMzkB,EAAa/zB,OAAOY,yBAAyBg/B,EAAM,cACrD7L,EAAWvzB,cAAgBuzB,EAAWxzB,YAAcwzB,EAAWzzB,YAC/DyzB,EAAWvzB,cAAe,EAC1BuzB,EAAWxzB,YAAa,EACxBwzB,EAAWzzB,UAAW,EACtBN,OAAOC,eAAe2/B,EAAM,YAAa7L"} +\ No newline at end of file ++{"version":3,"file":"index.esm.js","sources":["../tsc-out/intrinsicclass.js","../tsc-out/slots.js","../tsc-out/regex.js","../tsc-out/ecmascript.js","../tsc-out/intl.js","../tsc-out/instant.js","../tsc-out/calendar.js","../tsc-out/plaindate.js","../tsc-out/plaindatetime.js","../tsc-out/duration.js","../tsc-out/plainmonthday.js","../tsc-out/now.js","../tsc-out/plaintime.js","../tsc-out/timezone.js","../tsc-out/plainyearmonth.js","../tsc-out/zoneddatetime.js","../tsc-out/legacydate.js","../tsc-out/index.js"],"sourcesContent":["import { DEBUG } from './debug';\nconst INTRINSICS = {};\nconst customUtilInspectFormatters = {\n ['Temporal.Duration'](depth, options) {\n const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n if (depth < 1)\n return descr;\n const entries = [];\n for (const prop of [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n 'microseconds',\n 'nanoseconds'\n ]) {\n if (this[prop] !== 0)\n entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`);\n }\n return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n }\n};\nfunction defaultUtilInspectFormatter(depth, options) {\n return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\nexport function MakeIntrinsicClass(Class, name) {\n Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n value: name,\n writable: false,\n enumerable: false,\n configurable: true\n });\n if (DEBUG) {\n Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n for (const prop of Object.getOwnPropertyNames(Class)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class, prop, desc);\n }\n for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class.prototype, prop, desc);\n }\n DefineIntrinsic(name, Class);\n DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\nexport function DefineIntrinsic(name, value) {\n const key = `%${name}%`;\n if (INTRINSICS[key] !== undefined)\n throw new Error(`intrinsic ${name} already exists`);\n INTRINSICS[key] = value;\n}\nexport function GetIntrinsic(intrinsic) {\n return INTRINSICS[intrinsic];\n}\n//# sourceMappingURL=intrinsicclass.js.map","// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\nconst slots = new WeakMap();\nexport function CreateSlots(container) {\n slots.set(container, Object.create(null));\n}\nfunction GetSlots(container) {\n return slots.get(container);\n}\nexport function HasSlot(container, ...ids) {\n if (!container || 'object' !== typeof container)\n return false;\n const myslots = GetSlots(container);\n return !!myslots && ids.reduce((all, id) => all && id in myslots, true);\n}\nexport function GetSlot(container, id) {\n const value = GetSlots(container)[id];\n if (value === undefined)\n throw new TypeError(`Missing internal slot ${id}`);\n return value;\n}\nexport function SetSlot(container, id, value) {\n GetSlots(container)[id] = value;\n}\n//# sourceMappingURL=slots.js.map","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nconst timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\\\d{1,2}|${offsetNoCapture.source})`);\nconst calComponent = /[A-Za-z0-9]{3,8}/;\nconst calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`);\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\\\[(${timeZoneID.source})\\\\])?`);\nconst calendar = new RegExp(`\\\\[u-ca=(${calendarID.source})\\\\]`);\nexport const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i');\nexport const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i');\n// The short forms of YearMonth and MonthDay are only for the ISO calendar.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\nexport const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`);\nexport const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`);\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n//# sourceMappingURL=regex.js.map","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectAssign = Object.assign;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ObjectIs = Object.is;\nconst ReflectApply = Reflect.apply;\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { CreateSlots, GetSlot, HasSlot, SetSlot, EPOCHNANOSECONDS, TIMEZONE_ID, CALENDAR_ID, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, DATE_BRAND, YEAR_MONTH_BRAND, MONTH_DAY_BRAND, TIME_ZONE, CALENDAR, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS } from './slots';\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst DAY_SECONDS = 86400;\nconst DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\nconst BUILTIN_CALENDAR_IDS = [\n 'iso8601',\n 'hebrew',\n 'islamic',\n 'islamic-umalqura',\n 'islamic-tbla',\n 'islamic-civil',\n 'islamic-rgsa',\n 'islamicc',\n 'persian',\n 'ethiopic',\n 'ethioaa',\n 'coptic',\n 'chinese',\n 'dangi',\n 'roc',\n 'indian',\n 'buddhist',\n 'japanese',\n 'gregory'\n];\nfunction IsInteger(value) {\n if (typeof value !== 'number' || !NumberIsFinite(value))\n return false;\n const abs = MathAbs(value);\n return MathFloor(abs) === abs;\n}\nexport function IsObject(value) {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\nexport function ToNumber(value) {\n if (typeof value === 'bigint')\n throw new TypeError('Cannot convert BigInt to number');\n return NumberCtor(value);\n}\nfunction ToInteger(value) {\n const num = ToNumber(value);\n if (NumberIsNaN(num))\n return 0;\n const integer = MathTrunc(num);\n if (num === 0)\n return 0;\n return integer;\n}\nexport function ToString(value) {\n if (typeof value === 'symbol') {\n throw new TypeError('Cannot convert a Symbol value to a String');\n }\n return StringCtor(value);\n}\nexport function ToIntegerThrowOnInfinity(value) {\n const integer = ToInteger(value);\n if (!NumberIsFinite(integer)) {\n throw new RangeError('infinity is out of range');\n }\n return integer;\n}\nfunction ToPositiveInteger(valueParam, property) {\n const value = ToInteger(valueParam);\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (value < 1) {\n if (property !== undefined) {\n throw new RangeError(`property '${property}' cannot be a a number less than one`);\n }\n throw new RangeError('Cannot convert a number less than one to a positive integer');\n }\n return value;\n}\nexport function ToIntegerWithoutRounding(valueParam) {\n const value = ToNumber(valueParam);\n if (NumberIsNaN(value))\n return 0;\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (!IsInteger(value)) {\n throw new RangeError(`unsupported fractional value ${value}`);\n }\n return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0\n}\nfunction divmod(x, y) {\n const quotient = JSBI.divide(x, y);\n const remainder = JSBI.remainder(x, y);\n return { quotient, remainder };\n}\nfunction abs(x) {\n if (JSBI.lessThan(x, ZERO))\n return JSBI.multiply(x, NEGATIVE_ONE);\n return x;\n}\nexport function ArrayPush(arr, ...newItem) {\n ArrayPrototypePush.apply(arr, newItem);\n return arr;\n}\nconst BUILTIN_CASTS = new Map([\n ['year', ToIntegerThrowOnInfinity],\n ['month', ToPositiveInteger],\n ['monthCode', ToString],\n ['day', ToPositiveInteger],\n ['hour', ToIntegerThrowOnInfinity],\n ['minute', ToIntegerThrowOnInfinity],\n ['second', ToIntegerThrowOnInfinity],\n ['millisecond', ToIntegerThrowOnInfinity],\n ['microsecond', ToIntegerThrowOnInfinity],\n ['nanosecond', ToIntegerThrowOnInfinity],\n ['years', ToIntegerWithoutRounding],\n ['months', ToIntegerWithoutRounding],\n ['weeks', ToIntegerWithoutRounding],\n ['days', ToIntegerWithoutRounding],\n ['hours', ToIntegerWithoutRounding],\n ['minutes', ToIntegerWithoutRounding],\n ['seconds', ToIntegerWithoutRounding],\n ['milliseconds', ToIntegerWithoutRounding],\n ['microseconds', ToIntegerWithoutRounding],\n ['nanoseconds', ToIntegerWithoutRounding],\n ['era', ToString],\n ['eraYear', ToInteger],\n ['offset', ToString]\n]);\nconst BUILTIN_DEFAULTS = new Map([\n ['hour', 0],\n ['minute', 0],\n ['second', 0],\n ['millisecond', 0],\n ['microsecond', 0],\n ['nanosecond', 0]\n]);\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n ['years', 'year', 'date'],\n ['months', 'month', 'date'],\n ['weeks', 'week', 'date'],\n ['days', 'day', 'date'],\n ['hours', 'hour', 'time'],\n ['minutes', 'minute', 'time'],\n ['seconds', 'second', 'time'],\n ['milliseconds', 'millisecond', 'time'],\n ['microseconds', 'microsecond', 'time'],\n ['nanoseconds', 'nanosecond', 'time']\n];\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]]));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\nimport * as PARSE from './regex';\nconst IntlDateTimeFormatEnUsCache = new Map();\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) {\n let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n if (instance === undefined) {\n instance = new IntlDateTimeFormat('en-us', {\n timeZone: StringCtor(timeZoneIdentifier),\n hour12: false,\n era: 'short',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n }\n return instance;\n}\nexport function IsTemporalInstant(item) {\n return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\nexport function IsTemporalTimeZone(item) {\n return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item) {\n return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item) {\n return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item) {\n return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item) {\n return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY));\n}\nexport function IsTemporalDateTime(item) {\n return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND);\n}\nexport function IsTemporalYearMonth(item) {\n return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item) {\n return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item) {\n return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectObjectWithCalendarOrTimeZone(item) {\n if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n throw new TypeError('with() does not support a calendar or timeZone property');\n }\n if (item.calendar !== undefined) {\n throw new TypeError('with() does not support a calendar property');\n }\n if (item.timeZone !== undefined) {\n throw new TypeError('with() does not support a timeZone property');\n }\n}\nfunction ParseTemporalTimeZone(stringIdent) {\n let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n if (ianaName)\n return ianaName;\n if (z)\n return 'UTC';\n return offset; // if !ianaName && !z then offset must be present\n}\nfunction FormatCalendarAnnotation(id, showCalendar) {\n if (showCalendar === 'never')\n return '';\n if (showCalendar === 'auto' && id === 'iso8601')\n return '';\n return `[u-ca=${id}]`;\n}\nfunction ParseISODateTime(isoString) {\n // ZDT is the superset of fields for every other Temporal type\n const match = PARSE.zoneddatetime.exec(isoString);\n if (!match)\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n const year = ToInteger(yearString);\n const month = ToInteger(match[2] || match[4]);\n const day = ToInteger(match[3] || match[5]);\n const hour = ToInteger(match[6]);\n const hasTime = match[6] !== undefined;\n const minute = ToInteger(match[7] || match[10]);\n let second = ToInteger(match[8] || match[11]);\n if (second === 60)\n second = 59;\n const fraction = (match[9] || match[12]) + '000000000';\n const millisecond = ToInteger(fraction.slice(0, 3));\n const microsecond = ToInteger(fraction.slice(3, 6));\n const nanosecond = ToInteger(fraction.slice(6, 9));\n let offset;\n let z = false;\n if (match[13]) {\n offset = undefined;\n z = true;\n }\n else if (match[14] && match[15]) {\n const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n const offsetHours = match[15] || '00';\n const offsetMinutes = match[16] || '00';\n const offsetSeconds = match[17] || '00';\n let offsetFraction = match[18] || '0';\n offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n if (+offsetFraction) {\n while (offsetFraction.endsWith('0'))\n offsetFraction = offsetFraction.slice(0, -1);\n offset += `:${offsetSeconds}.${offsetFraction}`;\n }\n else if (+offsetSeconds) {\n offset += `:${offsetSeconds}`;\n }\n if (offset === '-00:00')\n offset = '+00:00';\n }\n let ianaName = match[19];\n if (ianaName) {\n try {\n // Canonicalize name if it is an IANA link name or is capitalized wrong\n ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString();\n }\n catch {\n // Not an IANA name, may be a custom ID, pass through unchanged\n }\n }\n const calendar = match[20];\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n return {\n year,\n month,\n day,\n hasTime,\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond,\n ianaName,\n offset,\n z,\n calendar\n };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.z && !result.offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.ianaName)\n throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString) {\n const match = PARSE.time.exec(isoString);\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (match) {\n hour = ToInteger(match[1]);\n minute = ToInteger(match[2] || match[5]);\n second = ToInteger(match[3] || match[6]);\n if (second === 60)\n second = 59;\n const fraction = (match[4] || match[7]) + '000000000';\n millisecond = ToInteger(fraction.slice(0, 3));\n microsecond = ToInteger(fraction.slice(3, 6));\n nanosecond = ToInteger(fraction.slice(6, 9));\n calendar = match[15];\n }\n else {\n let z, hasTime;\n ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseISODateTime(isoString));\n if (!hasTime)\n throw new RangeError(`time is missing in string: ${isoString}`);\n if (z)\n throw new RangeError('Z designator not supported for PlainTime');\n }\n // if it's a date-time string, OK\n if (/[tT ][0-9][0-9]/.test(isoString)) {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n // slow but non-grammar-dependent way to ensure that time-only strings that\n // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to\n // assertion in spec text\n try {\n const { month, day } = ParseTemporalMonthDayString(isoString);\n RejectISODate(1972, month, day);\n }\n catch {\n try {\n const { year, month } = ParseTemporalYearMonthString(isoString);\n RejectISODate(year, month, 1);\n }\n catch {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n }\n throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString) {\n const match = PARSE.yearmonth.exec(isoString);\n let year, month, calendar, referenceISODay;\n if (match) {\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n year = ToInteger(yearString);\n month = ToInteger(match[2]);\n calendar = match[3];\n }\n else {\n let z;\n ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainYearMonth');\n }\n return { year, month, calendar, referenceISODay };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString) {\n const match = PARSE.monthday.exec(isoString);\n let month, day, calendar, referenceISOYear;\n if (match) {\n month = ToInteger(match[1]);\n day = ToInteger(match[2]);\n }\n else {\n let z;\n ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainMonthDay');\n }\n return { month, day, calendar, referenceISOYear };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent) {\n try {\n let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent);\n if (canonicalIdent)\n return { ianaName: canonicalIdent.toString() };\n }\n catch {\n // fall through\n }\n try {\n // Try parsing ISO string instead\n const result = ParseISODateTime(stringIdent);\n if (result.z || result.offset || result.ianaName) {\n return result;\n }\n }\n catch {\n // fall through\n }\n throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString) {\n const match = PARSE.duration.exec(isoString);\n if (!match)\n throw new RangeError(`invalid duration: ${isoString}`);\n if (match.slice(2).every((element) => element === undefined)) {\n throw new RangeError(`invalid duration: ${isoString}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n const years = ToInteger(match[2]) * sign;\n const months = ToInteger(match[3]) * sign;\n const weeks = ToInteger(match[4]) * sign;\n const days = ToInteger(match[5]) * sign;\n const hours = ToInteger(match[6]) * sign;\n let fHours = match[7];\n let minutes = ToInteger(match[8]) * sign;\n let fMinutes = match[9];\n let seconds = ToInteger(match[10]) * sign;\n const fSeconds = match[11] + '000000000';\n let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign;\n let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign;\n let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign;\n fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0;\n fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0;\n ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds));\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString) {\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString);\n if (!z && !offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n // At least one of z or offset is defined, but TS doesn't seem to understand\n // that we only use offset if z is not defined (and thus offset must be defined).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs));\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n return epochNs;\n}\nexport function RegulateISODate(yearParam, monthParam, dayParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, day);\n break;\n case 'constrain':\n ({ year, month, day } = ConstrainISODate(year, month, day));\n break;\n }\n return { year, month, day };\n}\nexport function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n switch (overflow) {\n case 'reject':\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n break;\n case 'constrain':\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond));\n break;\n }\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RegulateISOYearMonth(yearParam, monthParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n const referenceISODay = 1;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, referenceISODay);\n break;\n case 'constrain':\n ({ year, month } = ConstrainISODate(year, month));\n break;\n }\n return { year, month };\n}\nfunction DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) {\n let fHours = fHoursParam;\n let minutes = minutesParam;\n let fMinutes = fMinutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (fHours !== 0) {\n [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const mins = fHours * 60;\n minutes = MathTrunc(mins);\n fMinutes = mins % 1;\n }\n if (fMinutes !== 0) {\n [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const secs = fMinutes * 60;\n seconds = MathTrunc(secs);\n const fSeconds = secs % 1;\n if (fSeconds !== 0) {\n const mils = fSeconds * 1000;\n milliseconds = MathTrunc(mils);\n const fMilliseconds = mils % 1;\n if (fMilliseconds !== 0) {\n const mics = fMilliseconds * 1000;\n microseconds = MathTrunc(mics);\n const fMicroseconds = mics % 1;\n if (fMicroseconds !== 0) {\n const nans = fMicroseconds * 1000;\n nanoseconds = MathTrunc(nans);\n }\n }\n }\n }\n return { minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalDurationRecord(item) {\n if (!IsObject(item)) {\n return ParseTemporalDurationString(ToString(item));\n }\n if (IsTemporalDuration(item)) {\n return {\n years: GetSlot(item, YEARS),\n months: GetSlot(item, MONTHS),\n weeks: GetSlot(item, WEEKS),\n days: GetSlot(item, DAYS),\n hours: GetSlot(item, HOURS),\n minutes: GetSlot(item, MINUTES),\n seconds: GetSlot(item, SECONDS),\n milliseconds: GetSlot(item, MILLISECONDS),\n microseconds: GetSlot(item, MICROSECONDS),\n nanoseconds: GetSlot(item, NANOSECONDS)\n };\n }\n const result = {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n let partial = ToTemporalPartialDurationRecord(item);\n for (const property of DURATION_FIELDS) {\n const value = partial[property];\n if (value !== undefined) {\n result[property] = value;\n }\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalPartialDurationRecord(temporalDurationLike) {\n if (!IsObject(temporalDurationLike)) {\n throw new TypeError('invalid duration-like');\n }\n const result = {\n years: undefined,\n months: undefined,\n weeks: undefined,\n days: undefined,\n hours: undefined,\n minutes: undefined,\n seconds: undefined,\n milliseconds: undefined,\n microseconds: undefined,\n nanoseconds: undefined\n };\n let any = false;\n for (const property of DURATION_FIELDS) {\n const value = temporalDurationLike[property];\n if (value !== undefined) {\n any = true;\n result[property] = ToIntegerWithoutRounding(value);\n }\n }\n if (!any) {\n throw new TypeError('invalid duration-like');\n }\n return result;\n}\nfunction ToLimitedTemporalDuration(item, disallowedProperties) {\n let record = ToTemporalDurationRecord(item);\n for (const property of disallowedProperties) {\n if (record[property] !== 0) {\n throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);\n }\n }\n return record;\n}\nexport function ToTemporalOverflow(options) {\n if (options === undefined)\n return 'constrain';\n return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\nexport function ToTemporalDisambiguation(options) {\n if (options === undefined)\n return 'compatible';\n return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\nexport function ToTemporalRoundingMode(options, fallback) {\n return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback);\n}\nfunction NegateTemporalRoundingMode(roundingMode) {\n switch (roundingMode) {\n case 'ceil':\n return 'floor';\n case 'floor':\n return 'ceil';\n default:\n return roundingMode;\n }\n}\nexport function ToTemporalOffset(options, fallback) {\n if (options === undefined)\n return fallback;\n return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\nexport function ToShowCalendarOption(options) {\n return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto');\n}\nexport function ToShowTimeZoneNameOption(options) {\n return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto');\n}\nexport function ToShowOffsetOption(options) {\n return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\nexport function ToTemporalRoundingIncrement(options, dividend, inclusive) {\n let maximum = Infinity;\n if (dividend !== undefined)\n maximum = dividend;\n if (!inclusive && dividend !== undefined)\n maximum = dividend > 1 ? dividend - 1 : 1;\n const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1);\n if (dividend !== undefined && dividend % increment !== 0) {\n throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n }\n return increment;\n}\nexport function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) {\n const maximumIncrements = {\n year: undefined,\n month: undefined,\n week: undefined,\n day: undefined,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n}\nexport function ToSecondsStringPrecision(options) {\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n if (smallestUnit === 'hour') {\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains.\n // Maybe this is fixed in later TS versions?\n if (c === 'time' && s !== 'hour') {\n allowed.push(s, p);\n }\n return allowed;\n }, []);\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n switch (smallestUnit) {\n case 'minute':\n return { precision: 'minute', unit: 'minute', increment: 1 };\n case 'second':\n return { precision: 0, unit: 'second', increment: 1 };\n case 'millisecond':\n return { precision: 3, unit: 'millisecond', increment: 1 };\n case 'microsecond':\n return { precision: 6, unit: 'microsecond', increment: 1 };\n case 'nanosecond':\n return { precision: 9, unit: 'nanosecond', increment: 1 };\n default: // fall through if option not given\n }\n let digits = options.fractionalSecondDigits;\n if (digits === undefined)\n digits = 'auto';\n if (typeof digits !== 'number') {\n const stringDigits = ToString(digits);\n if (stringDigits === 'auto')\n return { precision: 'auto', unit: 'nanosecond', increment: 1 };\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`);\n }\n if (NumberIsNaN(digits) || digits < 0 || digits > 9) {\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n const precision = MathFloor(digits);\n switch (precision) {\n case 0:\n return { precision, unit: 'second', increment: 1 };\n case 1:\n case 2:\n case 3:\n return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n case 4:\n case 5:\n case 6:\n return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n case 7:\n case 8:\n case 9:\n return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n default:\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n}\nexport const REQUIRED = Symbol('~required~');\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) {\n const allowedSingular = [];\n for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n if (unitGroup === 'datetime' || unitGroup === category) {\n allowedSingular.push(singular);\n }\n }\n allowedSingular.push(...extraValues);\n let defaultVal = requiredOrDefault;\n if (defaultVal === REQUIRED) {\n defaultVal = undefined;\n }\n else if (defaultVal !== undefined) {\n allowedSingular.push(defaultVal);\n }\n const allowedValues = [\n ...allowedSingular\n ];\n for (const singular of allowedSingular) {\n const plural = PLURAL_FOR.get(singular);\n if (plural !== undefined)\n allowedValues.push(plural);\n }\n let retval = GetOption(options, key, allowedValues, defaultVal);\n if (retval === undefined && requiredOrDefault === REQUIRED) {\n throw new RangeError(`${key} is required`);\n }\n // Coerce any plural units into their singular form\n if (SINGULAR_FOR.has(retval)) {\n // We just has-checked this, but tsc doesn't understand that.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(retval);\n }\n return retval;\n}\nexport function ToRelativeTemporalObject(options) {\n const relativeTo = options.relativeTo;\n if (relativeTo === undefined)\n return relativeTo;\n let offsetBehaviour = 'option';\n let matchMinutes = false;\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n if (IsObject(relativeTo)) {\n if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo))\n return relativeTo;\n if (IsTemporalDateTime(relativeTo))\n return TemporalDateTimeToDate(relativeTo);\n calendar = GetTemporalCalendarWithISODefault(relativeTo);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n const dateOptions = ObjectCreate(null);\n dateOptions.overflow = 'constrain';\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions));\n // The `offset` and `timeZone` properties only exist on ZonedDateTime (or\n // ZonedDateTimeLike-property bags). The assertions below are used to avoid\n // TS errors while not diverging runtime code from proposal-temporal.\n offset = relativeTo.offset;\n if (offset === undefined)\n offsetBehaviour = 'wall';\n timeZone = relativeTo.timeZone;\n }\n else {\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n ParseISODateTime(ToString(relativeTo)));\n if (ianaName)\n timeZone = ianaName;\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinutes = true;\n }\n if (timeZone !== undefined) {\n timeZone = ToTemporalTimeZone(timeZone);\n let offsetNs = 0;\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(ToString(offset));\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n }\n return CreateTemporalDate(year, month, day, calendar);\n}\nexport function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n for (const [prop, v] of [\n ['years', years],\n ['months', months],\n ['weeks', weeks],\n ['days', days],\n ['hours', hours],\n ['minutes', minutes],\n ['seconds', seconds],\n ['milliseconds', milliseconds],\n ['microseconds', microseconds],\n ['nanoseconds', nanoseconds]\n ]) {\n if (v !== 0) {\n // All the above keys are definitely in SINGULAR_FOR\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(prop);\n }\n }\n return 'nanosecond';\n}\nexport function LargerOfTwoTemporalUnits(unit1, unit2) {\n if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2))\n return unit2;\n return unit1;\n}\nfunction MergeLargestUnitOption(optionsParam, largestUnit) {\n let options = optionsParam;\n if (options === undefined)\n options = ObjectCreate(null);\n return ObjectAssign(ObjectCreate(null), options, { largestUnit });\n}\nexport function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) {\n const result = ObjectCreate(null);\n let any = false;\n for (const property of fields) {\n let value = bag[property];\n if (value !== undefined) {\n any = true;\n if (BUILTIN_CASTS.has(property)) {\n // We just has-checked this map access, so there will definitely be a\n // value.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n value = BUILTIN_CASTS.get(property)(value);\n }\n result[property] = value;\n }\n else if (requiredFields !== 'partial') {\n // TODO: using .call in this way is not correctly type-checked by tsc.\n // We might need a type-safe Call wrapper?\n if (ArrayIncludes.call(requiredFields, property)) {\n throw new TypeError(`required property '${property}' missing or undefined`);\n }\n value = BUILTIN_DEFAULTS.get(property);\n result[property] = value;\n }\n }\n if (requiredFields === 'partial' && !any) {\n throw new TypeError(emptySourceErrorMessage);\n }\n if ((result.era === undefined) !== (result.eraYear === undefined)) {\n throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n }\n return result;\n}\nexport function ToTemporalTimeRecord(bag, completeness = 'complete') {\n // NOTE: Field order here is important.\n const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n const result = {};\n for (const field of fields) {\n const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n if (valueDesc !== undefined) {\n result[field] = valueDesc.value;\n }\n else if (completeness === 'complete') {\n result[field] = 0;\n }\n }\n return result;\n}\nexport function ToTemporalDate(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalDate(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarDateFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n if (z)\n throw new RangeError('Z designator not supported for PlainDate');\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n return new TemporalPlainDate(year, month, day, calendar); // include validation\n}\nexport function InterpretTemporalDateTimeFields(calendar, fields, options) {\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n const overflow = ToTemporalOverflow(options);\n const date = CalendarDateFromFields(calendar, fields, options);\n const year = GetSlot(date, ISO_YEAR);\n const month = GetSlot(date, ISO_MONTH);\n const day = GetSlot(date, ISO_DAY);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function ToTemporalDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalDateTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDate(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseTemporalDateTimeString(ToString(item)));\n if (z)\n throw new RangeError('Z designator not supported for PlainDateTime');\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n }\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function ToTemporalDuration(item) {\n if (IsTemporalDuration(item))\n return item;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function ToTemporalInstant(item) {\n if (IsTemporalInstant(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n }\n const ns = ParseTemporalInstant(ToString(item));\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(ns);\n}\nexport function ToTemporalMonthDay(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalMonthDay(item))\n return item;\n let calendar, calendarAbsent;\n if (HasSlot(item, CALENDAR)) {\n calendar = GetSlot(item, CALENDAR);\n calendarAbsent = false;\n }\n else {\n let maybeStringCalendar = item.calendar;\n calendarAbsent = maybeStringCalendar === undefined;\n if (maybeStringCalendar === undefined)\n maybeStringCalendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(maybeStringCalendar);\n }\n // HasSlot above adjusts the type of 'item' to include\n // TypesWithCalendarUnits, which causes type-inference failures below.\n // This is probably indicative of problems with HasSlot's typing.\n item = item;\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n // Callers who omit the calendar are not writing calendar-independent\n // code. In that case, `monthCode`/`year` can be omitted; `month` and\n // `day` are sufficient. Add a `year` to satisfy calendar validation.\n if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n fields.year = 1972;\n }\n return CalendarMonthDayFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item));\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISOYear === undefined) {\n RejectISODate(1972, month, day);\n return CreateTemporalMonthDay(month, day, calendar);\n }\n const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n return CalendarMonthDayFromFields(calendar, result);\n}\nexport function ToTemporalTime(itemParam, overflow = 'constrain') {\n let item = itemParam;\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n if (ToString(calendar) !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n }\n else {\n ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item)));\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar !== undefined && calendar !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n }\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function ToTemporalYearMonth(item, options) {\n if (IsObject(item)) {\n if (IsTemporalYearMonth(item))\n return item;\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item));\n // TODO: replace with ternary?\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISODay === undefined) {\n RejectISODate(year, month, 1);\n return CreateTemporalYearMonth(year, month, calendar);\n }\n const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n return CalendarYearMonthFromFields(calendar, result);\n}\nexport function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n // Simple case: ISO string without a TZ offset (or caller wants to ignore\n // the offset), so just convert DateTime to Instant in the given time zone\n const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n }\n // The caller wants the offset to always win ('use') OR the caller is OK\n // with the offset winning ('prefer' or 'reject') as long as it's valid\n // for this timezone and date/time.\n if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n // Calculate the instant for the input's date/time and offset\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('ZonedDateTime outside of supported range');\n return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n }\n // \"prefer\" or \"reject\"\n const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n for (const candidate of possibleInstants) {\n const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand'));\n if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n return GetSlot(candidate, EPOCHNANOSECONDS);\n }\n }\n // the user-provided offset doesn't match any instants for this time\n // zone and date/time.\n if (offsetOpt === 'reject') {\n const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n // toString (which is invoked by Node when using template literals directly).\n // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n }\n // fall through: offsetOpt === 'prefer', but the offset doesn't match\n // so fall back to use the time zone instead.\n const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n}\nexport function ToTemporalZonedDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar;\n let matchMinute = false;\n let offsetBehaviour = 'option';\n if (IsObject(item)) {\n if (IsTemporalZonedDateTime(item))\n return item;\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset');\n const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n timeZone = ToTemporalTimeZone(fields.timeZone);\n offset = fields.offset;\n if (offset === undefined) {\n offsetBehaviour = 'wall';\n }\n else {\n offset = ToString(offset);\n }\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n ParseTemporalZonedDateTimeString(ToString(item)));\n if (!ianaName)\n throw new RangeError('time zone ID required in brackets');\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n timeZone = new TemporalTimeZone(ianaName);\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinute = true; // ISO strings may specify offset with less precision\n }\n let offsetNs = 0;\n // The code above guarantees that if offsetBehaviour === 'option', then\n // `offset` is not undefined.\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(offset);\n const disambiguation = ToTemporalDisambiguation(options);\n const offsetOpt = ToTemporalOffset(options, 'reject');\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nexport function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) {\n RejectISODate(isoYear, isoMonth, isoDay);\n RejectDateRange(isoYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, DATE_BRAND, true);\n if (DEBUG) {\n ObjectDefineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) {\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n const result = ObjectCreate(TemporalPlainDate.prototype);\n CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n return result;\n}\nexport function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) {\n RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_HOUR, h);\n SetSlot(result, ISO_MINUTE, min);\n SetSlot(result, ISO_SECOND, s);\n SetSlot(result, ISO_MILLISECOND, ms);\n SetSlot(result, ISO_MICROSECOND, µs);\n SetSlot(result, ISO_NANOSECOND, ns);\n SetSlot(result, CALENDAR, calendar);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) {\n const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const result = ObjectCreate(TemporalPlainDateTime.prototype);\n CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n return result;\n}\nexport function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) {\n RejectISODate(referenceISOYear, isoMonth, isoDay);\n RejectDateRange(referenceISOYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_YEAR, referenceISOYear);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, MONTH_DAY_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) {\n const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n return result;\n}\nexport function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) {\n RejectISODate(isoYear, isoMonth, referenceISODay);\n RejectYearMonthRange(isoYear, isoMonth);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, referenceISODay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, YEAR_MONTH_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) {\n const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n return result;\n}\nexport function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) {\n ValidateEpochNanoseconds(epochNanoseconds);\n CreateSlots(result);\n SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n SetSlot(result, TIME_ZONE, timeZone);\n SetSlot(result, CALENDAR, calendar);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n SetSlot(result, INSTANT, instant);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) {\n const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n const result = ObjectCreate(TemporalZonedDateTime.prototype);\n CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n return result;\n}\nexport function GetISO8601Calendar() {\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n return new TemporalCalendar('iso8601');\n}\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields(calendar, fieldNamesParam) {\n let fieldNames = fieldNamesParam;\n if (calendar.fields) {\n fieldNames = calendar.fields(fieldNames);\n }\n const result = [];\n for (const name of fieldNames) {\n if (typeof name !== 'string')\n throw new TypeError('bad return from calendar.fields()');\n ArrayPrototypePush.call(result, name);\n }\n return result;\n}\nexport function CalendarMergeFields(calendar, fields, additionalFields) {\n const calMergeFields = calendar.mergeFields;\n if (!calMergeFields) {\n return { ...fields, ...additionalFields };\n }\n const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]);\n if (!IsObject(result))\n throw new TypeError('bad return from calendar.mergeFields()');\n return result;\n}\nexport function CalendarDateAdd(calendar, date, duration, options, dateAddParam) {\n let dateAdd = dateAddParam;\n if (dateAdd === undefined) {\n dateAdd = calendar.dateAdd;\n }\n const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nfunction CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) {\n let dateUntil = dateUntilParam;\n if (dateUntil === undefined) {\n dateUntil = calendar.dateUntil;\n }\n const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n if (!IsTemporalDuration(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYear(calendar, dateLike) {\n const result = calendar.year(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar year result must be an integer');\n }\n return ToIntegerThrowOnInfinity(result);\n}\nexport function CalendarMonth(calendar, dateLike) {\n const result = calendar.month(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar month result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarMonthCode(calendar, dateLike) {\n const result = calendar.monthCode(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar monthCode result must be a string');\n }\n return ToString(result);\n}\nexport function CalendarDay(calendar, dateLike) {\n const result = calendar.day(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar day result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarEra(calendar, dateLike) {\n let result = calendar.era(dateLike);\n if (result !== undefined) {\n result = ToString(result);\n }\n return result;\n}\nexport function CalendarEraYear(calendar, dateLike) {\n let result = calendar.eraYear(dateLike);\n if (result !== undefined) {\n result = ToIntegerThrowOnInfinity(result);\n }\n return result;\n}\nexport function CalendarDayOfWeek(calendar, dateLike) {\n return calendar.dayOfWeek(dateLike);\n}\nexport function CalendarDayOfYear(calendar, dateLike) {\n return calendar.dayOfYear(dateLike);\n}\nexport function CalendarWeekOfYear(calendar, dateLike) {\n return calendar.weekOfYear(dateLike);\n}\nexport function CalendarDaysInWeek(calendar, dateLike) {\n return calendar.daysInWeek(dateLike);\n}\nexport function CalendarDaysInMonth(calendar, dateLike) {\n return calendar.daysInMonth(dateLike);\n}\nexport function CalendarDaysInYear(calendar, dateLike) {\n return calendar.daysInYear(dateLike);\n}\nexport function CalendarMonthsInYear(calendar, dateLike) {\n return calendar.monthsInYear(dateLike);\n}\nexport function CalendarInLeapYear(calendar, dateLike) {\n return calendar.inLeapYear(dateLike);\n}\nexport function ToTemporalCalendar(calendarLikeParam) {\n let calendarLike = calendarLikeParam;\n if (IsObject(calendarLike)) {\n if (HasSlot(calendarLike, CALENDAR))\n return GetSlot(calendarLike, CALENDAR);\n if (!('calendar' in calendarLike))\n return calendarLike;\n calendarLike = calendarLike.calendar;\n if (IsObject(calendarLike) && !('calendar' in calendarLike))\n return calendarLike;\n }\n const identifier = ToString(calendarLike);\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n if (IsBuiltinCalendar(identifier))\n return new TemporalCalendar(identifier);\n let calendar;\n try {\n ({ calendar } = ParseISODateTime(identifier));\n }\n catch {\n throw new RangeError(`Invalid calendar: ${identifier}`);\n }\n if (!calendar)\n calendar = 'iso8601';\n return new TemporalCalendar(calendar);\n}\nfunction GetTemporalCalendarWithISODefault(item) {\n if (HasSlot(item, CALENDAR))\n return GetSlot(item, CALENDAR);\n const { calendar } = item;\n if (calendar === undefined)\n return GetISO8601Calendar();\n return ToTemporalCalendar(calendar);\n}\nexport function CalendarEquals(one, two) {\n if (one === two)\n return true;\n const cal1 = ToString(one);\n const cal2 = ToString(two);\n return cal1 === cal2;\n}\nexport function ConsolidateCalendars(one, two) {\n if (one === two)\n return two;\n const sOne = ToString(one);\n const sTwo = ToString(two);\n if (sOne === sTwo || sOne === 'iso8601') {\n return two;\n }\n else if (sTwo === 'iso8601') {\n return one;\n }\n else {\n throw new RangeError('irreconcilable calendars');\n }\n}\nexport function CalendarDateFromFields(calendar, fields, options) {\n const result = calendar.dateFromFields(fields, options);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYearMonthFromFields(calendar, fields, options) {\n const result = calendar.yearMonthFromFields(fields, options);\n if (!IsTemporalYearMonth(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarMonthDayFromFields(calendar, fields, options) {\n const result = calendar.monthDayFromFields(fields, options);\n if (!IsTemporalMonthDay(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function ToTemporalTimeZone(temporalTimeZoneLikeParam) {\n let temporalTimeZoneLike = temporalTimeZoneLikeParam;\n if (IsObject(temporalTimeZoneLike)) {\n if (IsTemporalZonedDateTime(temporalTimeZoneLike))\n return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n if (!('timeZone' in temporalTimeZoneLike))\n return temporalTimeZoneLike;\n temporalTimeZoneLike = temporalTimeZoneLike.timeZone;\n if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) {\n return temporalTimeZoneLike;\n }\n }\n const identifier = ToString(temporalTimeZoneLike);\n const timeZone = ParseTemporalTimeZone(identifier);\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(timeZone);\n}\nexport function TimeZoneEquals(one, two) {\n if (one === two)\n return true;\n const tz1 = ToString(one);\n const tz2 = ToString(two);\n return tz1 === tz2;\n}\nexport function TemporalDateTimeToDate(dateTime) {\n return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR));\n}\nexport function TemporalDateTimeToTime(dateTime) {\n const Time = GetIntrinsic('%Temporal.PlainTime%');\n return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n}\nexport function GetOffsetNanosecondsFor(timeZone, instant) {\n let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor;\n if (typeof getOffsetNanosecondsFor !== 'function') {\n throw new TypeError('getOffsetNanosecondsFor not callable');\n }\n const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]);\n if (typeof offsetNs !== 'number') {\n throw new TypeError('bad return from getOffsetNanosecondsFor');\n }\n if (!IsInteger(offsetNs) || MathAbs(offsetNs) > 86400e9) {\n throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n }\n return offsetNs;\n}\nexport function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) {\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n return FormatTimeZoneOffsetString(offsetNs);\n}\nexport function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) {\n const ns = GetSlot(instant, EPOCHNANOSECONDS);\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs));\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) {\n const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\nfunction DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const numInstants = possibleInstants.length;\n if (numInstants === 1)\n return possibleInstants[0];\n if (numInstants) {\n switch (disambiguation) {\n case 'compatible':\n // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n case 'earlier':\n return possibleInstants[0];\n case 'later':\n return possibleInstants[numInstants - 1];\n case 'reject': {\n throw new RangeError('multiple instants found');\n }\n }\n }\n const year = GetSlot(dateTime, ISO_YEAR);\n const month = GetSlot(dateTime, ISO_MONTH);\n const day = GetSlot(dateTime, ISO_DAY);\n const hour = GetSlot(dateTime, ISO_HOUR);\n const minute = GetSlot(dateTime, ISO_MINUTE);\n const second = GetSlot(dateTime, ISO_SECOND);\n const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utcns === null)\n throw new RangeError('DateTime outside of supported range');\n const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n const nanoseconds = offsetAfter - offsetBefore;\n switch (disambiguation) {\n case 'earlier': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined);\n const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar);\n return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n }\n case 'compatible':\n // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n case 'later': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined);\n const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar);\n const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n return possible[possible.length - 1];\n }\n case 'reject': {\n throw new RangeError('no such instant found');\n }\n }\n}\nfunction GetPossibleInstantsFor(timeZone, dateTime) {\n const possibleInstants = timeZone.getPossibleInstantsFor(dateTime);\n const result = [];\n for (const instant of possibleInstants) {\n if (!IsTemporalInstant(instant)) {\n throw new TypeError('bad return from getPossibleInstantsFor');\n }\n ArrayPrototypePush.call(result, instant);\n }\n return result;\n}\nexport function ISOYearString(year) {\n let yearString;\n if (year < 0 || year > 9999) {\n const sign = year < 0 ? '-' : '+';\n const yearNumber = MathAbs(year);\n yearString = sign + `000000${yearNumber}`.slice(-6);\n }\n else {\n yearString = `0000${year}`.slice(-4);\n }\n return yearString;\n}\nexport function ISODateTimePartString(part) {\n return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) {\n if (precision === 'minute')\n return '';\n const secs = `:${ISODateTimePartString(second)}`;\n let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n let fraction;\n if (precision === 'auto') {\n if (fractionNumber === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n }\n else {\n if (precision === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n }\n return `${secs}.${fraction}`;\n}\nexport function TemporalInstantToString(instant, timeZone, precision) {\n let outputTimeZone = timeZone;\n if (outputTimeZone === undefined) {\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n outputTimeZone = new TemporalTimeZone('UTC');\n }\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let timeZoneString = 'Z';\n if (timeZone !== undefined) {\n const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n }\n return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\nexport function TemporalDurationToString(duration, precision = 'auto', options = undefined) {\n function formatNumber(num) {\n if (num <= NumberMaxSafeInteger)\n return num.toString(10);\n return JSBI.BigInt(num).toString(10);\n }\n const years = GetSlot(duration, YEARS);\n const months = GetSlot(duration, MONTHS);\n const weeks = GetSlot(duration, WEEKS);\n const days = GetSlot(duration, DAYS);\n const hours = GetSlot(duration, HOURS);\n const minutes = GetSlot(duration, MINUTES);\n let seconds = GetSlot(duration, SECONDS);\n let ms = GetSlot(duration, MILLISECONDS);\n let µs = GetSlot(duration, MICROSECONDS);\n let ns = GetSlot(duration, NANOSECONDS);\n const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({\n seconds,\n milliseconds: ms,\n microseconds: µs,\n nanoseconds: ns\n } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n }\n const dateParts = [];\n if (years)\n dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n if (months)\n dateParts.push(`${formatNumber(MathAbs(months))}M`);\n if (weeks)\n dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n if (days)\n dateParts.push(`${formatNumber(MathAbs(days))}D`);\n const timeParts = [];\n if (hours)\n timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n if (minutes)\n timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n const secondParts = [];\n let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n let nsBigInt, µsBigInt, msBigInt, secondsBigInt;\n ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n const fraction = MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n let decimalPart;\n if (precision === 'auto') {\n if (fraction !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0');\n while (decimalPart[decimalPart.length - 1] === '0') {\n decimalPart = decimalPart.slice(0, -1);\n }\n }\n }\n else if (precision !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n }\n if (decimalPart)\n secondParts.unshift('.', decimalPart);\n if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n secondParts.unshift(abs(secondsBigInt).toString());\n }\n if (secondParts.length)\n timeParts.push(`${secondParts.join('')}S`);\n if (timeParts.length)\n timeParts.unshift('T');\n if (!dateParts.length && !timeParts.length)\n return 'PT0S';\n return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\nexport function TemporalDateToString(date, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(date, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n const calendarID = ToString(GetSlot(date, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${year}-${month}-${day}${calendar}`;\n}\nexport function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) {\n let year = GetSlot(dateTime, ISO_YEAR);\n let month = GetSlot(dateTime, ISO_MONTH);\n let day = GetSlot(dateTime, ISO_DAY);\n let hour = GetSlot(dateTime, ISO_HOUR);\n let minute = GetSlot(dateTime, ISO_MINUTE);\n let second = GetSlot(dateTime, ISO_SECOND);\n let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const yearString = ISOYearString(year);\n const monthString = ISODateTimePartString(month);\n const dayString = ISODateTimePartString(day);\n const hourString = ISODateTimePartString(hour);\n const minuteString = ISODateTimePartString(minute);\n const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n const calendarID = ToString(GetSlot(dateTime, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\nexport function TemporalMonthDayToString(monthDay, showCalendar = 'auto') {\n const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n let resultString = `${month}-${day}`;\n const calendar = GetSlot(monthDay, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n resultString = `${year}-${resultString}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n let resultString = `${year}-${month}`;\n const calendar = GetSlot(yearMonth, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n resultString += `-${day}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) {\n let instant = GetSlot(zdt, INSTANT);\n if (options) {\n const { unit, increment, roundingMode } = options;\n const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n instant = new TemporalInstant(ns);\n }\n const tz = GetSlot(zdt, TIME_ZONE);\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n if (showOffset !== 'never') {\n const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n result += FormatISOTimeZoneOffsetString(offsetNs);\n }\n if (showTimeZone !== 'never')\n result += `[${tz}]`;\n const calendarID = ToString(GetSlot(zdt, CALENDAR));\n result += FormatCalendarAnnotation(calendarID, showCalendar);\n return result;\n}\nexport function TestTimeZoneOffsetString(string) {\n return OFFSET.test(StringCtor(string));\n}\nexport function ParseTimeZoneOffsetString(string) {\n const match = OFFSET.exec(StringCtor(string));\n if (!match) {\n throw new RangeError(`invalid time zone offset: ${string}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n const hours = +match[2];\n const minutes = +(match[3] || 0);\n const seconds = +(match[4] || 0);\n const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) {\n if (TestTimeZoneOffsetString(timeZoneIdentifier)) {\n const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n return FormatTimeZoneOffsetString(offsetNs);\n }\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n return formatter.resolvedOptions().timeZone;\n}\nexport function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) {\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utc === null)\n throw new RangeError('Date outside of supported range');\n return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam) {\n const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n const nanoseconds = offsetNanoseconds % 1e9;\n const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n const secondString = ISODateTimePartString(seconds);\n let post = '';\n if (nanoseconds) {\n let fraction = `${nanoseconds}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n post = `:${secondString}.${fraction}`;\n }\n else if (seconds) {\n post = `:${secondString}`;\n }\n return `${sign}${hourString}:${minuteString}${post}`;\n}\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam) {\n let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand'));\n const sign = offsetNanoseconds < 0 ? '-' : '+';\n offsetNanoseconds = MathAbs(offsetNanoseconds);\n const minutes = (offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n // Note: Date.UTC() interprets one and two-digit years as being in the\n // 20th century, so don't use it\n const legacyDate = new Date();\n legacyDate.setUTCHours(hour, minute, second, millisecond);\n legacyDate.setUTCFullYear(year, month - 1, day);\n const ms = legacyDate.getTime();\n if (NumberIsNaN(ms))\n return null;\n let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX))\n return null;\n return ns;\n}\nfunction GetISOPartsFromEpoch(epochNanoseconds) {\n const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n let epochMilliseconds = JSBI.toNumber(quotient);\n let nanos = JSBI.toNumber(remainder);\n if (nanos < 0) {\n nanos += 1e6;\n epochMilliseconds -= 1;\n }\n const microsecond = MathFloor(nanos / 1e3) % 1e3;\n const nanosecond = nanos % 1e3;\n const item = new Date(epochMilliseconds);\n const year = item.getUTCFullYear();\n const month = item.getUTCMonth() + 1;\n const day = item.getUTCDate();\n const hour = item.getUTCHours();\n const minute = item.getUTCMinutes();\n const second = item.getUTCSeconds();\n const millisecond = item.getUTCMilliseconds();\n return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) {\n const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction maxJSBI(one, two) {\n return JSBI.lessThan(one, two) ? two : one;\n}\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\nexport function GetIANATimeZoneNextTransition(epochNanoseconds, id) {\n // Decide how far in the future after `epochNanoseconds` we'll look for an\n // offset change. There are two cases:\n // 1. If it's a past date (or a date in the near future) then it's possible\n // that the time zone may have newly added DST in the next few years. So\n // we'll have to look from the provided time until a few years after the\n // current system time. (Changes to DST policy are usually announced a few\n // years in the future.) Note that the first DST anywhere started in 1847,\n // so we'll start checks in 1847 instead of wasting cycles on years where\n // there will never be transitions.\n // 2. If it's a future date beyond the next few years, then we'll just assume\n // that the latest DST policy in TZDB will still be in effect. In this\n // case, we only need to look one year in the future to see if there are\n // any DST transitions. We actually only need to look 9-10 months because\n // DST has two transitions per year, but we'll use a year just to be safe.\n const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n // start there if an earlier date is supplied.\n let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n let rightNanos = leftNanos;\n let rightOffsetNs = leftOffsetNs;\n while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n if (leftOffsetNs === rightOffsetNs) {\n leftNanos = rightNanos;\n }\n }\n if (leftOffsetNs === rightOffsetNs)\n return null;\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\nexport function GetIANATimeZonePreviousTransition(epochNanoseconds, id) {\n // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n // have to look back one year to find a transition. But if it doesn't use DST,\n // then we need to look all the way back to 1847 (the earliest rule in the\n // TZDB) to see if it had other offset transitions in the past. Looping back\n // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n // also unnecessary because DST rules aren't put into the TZDB more than a few\n // years in the future because the political changes in time zones happen with\n // only a few years' warning. Therefore, if a far-future date is provided,\n // then we'll run the check in two parts:\n // 1. First, we'll look back for up to one year to see if the latest TZDB\n // rules have DST.\n // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n // current system time, and then look back to 1847. This reduces the\n // worst-case loop from 273K years to 175 years, for a ~1500x improvement\n // in worst-case perf.\n const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n let leftNanos = rightNanos;\n let leftOffsetNs = rightOffsetNs;\n while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n if (rightOffsetNs === leftOffsetNs) {\n rightNanos = leftNanos;\n }\n }\n if (rightOffsetNs === leftOffsetNs) {\n if (isFarFuture) {\n // There was no DST after looking back one year, which means that the most\n // recent TZDB rules don't have any recurring transitions. To check for\n // transitions in older rules, back up to a few years after the current\n // date and then look all the way back to 1847. Note that we move back one\n // day from the latest possible rule so that when the recursion runs it\n // won't consider the new time to be \"far future\" because the system clock\n // has advanced in the meantime.\n const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n return GetIANATimeZonePreviousTransition(newTimeToCheck, id);\n }\n return null;\n }\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime) {\n const parts = datetime.split(/[^\\w]+/);\n if (parts.length !== 7) {\n throw new RangeError(`expected 7 parts in \"${datetime}`);\n }\n const month = +parts[0];\n const day = +parts[1];\n let year = +parts[2];\n const era = parts[3].toUpperCase();\n if (era === 'B' || era === 'BC') {\n year = -year + 1;\n }\n else if (era !== 'A' && era !== 'AD') {\n throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n }\n let hour = +parts[4];\n if (hour === 24) {\n // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n hour = 0;\n }\n const minute = +parts[5];\n const second = +parts[6];\n if (!NumberIsFinite(year) ||\n !NumberIsFinite(month) ||\n !NumberIsFinite(day) ||\n !NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second)) {\n throw new RangeError(`Invalid number in \"${datetime}`);\n }\n return { year, month, day, hour, minute, second };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone, epochMilliseconds) {\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n // Using `format` instead of `formatToParts` for compatibility with older clients\n const datetime = formatter.format(new Date(epochMilliseconds));\n return parseFromEnUsFormat(datetime);\n}\nexport function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (ns === null)\n throw new RangeError('DateTime outside of supported range');\n let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n if (JSBI.lessThan(nsEarlier, NS_MIN))\n nsEarlier = ns;\n let nsLater = JSBI.add(ns, DAY_NANOS);\n if (JSBI.greaterThan(nsLater, NS_MAX))\n nsLater = ns;\n const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id);\n const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id);\n const found = earliest === latest ? [earliest] : [earliest, latest];\n return found\n .map((offsetNanoseconds) => {\n const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n if (year !== parts.year ||\n month !== parts.month ||\n day !== parts.day ||\n hour !== parts.hour ||\n minute !== parts.minute ||\n second !== parts.second ||\n millisecond !== parts.millisecond ||\n microsecond !== parts.microsecond ||\n nanosecond !== parts.nanosecond) {\n return undefined;\n }\n return epochNanoseconds;\n })\n .filter((x) => x !== undefined);\n}\nexport function LeapYear(year) {\n if (undefined === year)\n return false;\n const isDiv4 = year % 4 === 0;\n const isDiv100 = year % 100 === 0;\n const isDiv400 = year % 400 === 0;\n return isDiv4 && (!isDiv100 || isDiv400);\n}\nexport function ISODaysInMonth(year, month) {\n const DoM = {\n standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n };\n return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\nexport function DayOfWeek(year, month, day) {\n const m = month + (month < 3 ? 10 : -2);\n const Y = year - (month < 3 ? 1 : 0);\n const c = MathFloor(Y / 100);\n const y = Y - c * 100;\n const d = day;\n const pD = d;\n const pM = MathFloor(2.6 * m - 0.2);\n const pY = y + MathFloor(y / 4);\n const pC = MathFloor(c / 4) - 2 * c;\n const dow = (pD + pM + pY + pC) % 7;\n return dow + (dow <= 0 ? 7 : 0);\n}\nexport function DayOfYear(year, month, day) {\n let days = day;\n for (let m = month - 1; m > 0; m--) {\n days += ISODaysInMonth(year, m);\n }\n return days;\n}\nexport function WeekOfYear(year, month, day) {\n const doy = DayOfYear(year, month, day);\n const dow = DayOfWeek(year, month, day) || 7;\n const doj = DayOfWeek(year, 1, 1);\n const week = MathFloor((doy - dow + 10) / 7);\n if (week < 1) {\n if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n return 53;\n }\n else {\n return 52;\n }\n }\n if (week === 53) {\n if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n return 1;\n }\n }\n return week;\n}\nexport function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) {\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (prop !== 0)\n return prop < 0 ? -1 : 1;\n }\n return 0;\n}\nfunction BalanceISOYearMonth(yearParam, monthParam) {\n let year = yearParam;\n let month = monthParam;\n if (!NumberIsFinite(year) || !NumberIsFinite(month))\n throw new RangeError('infinity is out of range');\n month -= 1;\n year += MathFloor(month / 12);\n month %= 12;\n if (month < 0)\n month += 12;\n month += 1;\n return { year, month };\n}\nfunction BalanceISODate(yearParam, monthParam, dayParam) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n if (!NumberIsFinite(day))\n throw new RangeError('infinity is out of range');\n ({ year, month } = BalanceISOYearMonth(year, month));\n let daysInYear = 0;\n let testYear = month > 2 ? year : year - 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n year -= 1;\n testYear -= 1;\n day += daysInYear;\n }\n testYear += 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n year += 1;\n testYear += 1;\n day -= daysInYear;\n }\n while (day < 1) {\n ({ year, month } = BalanceISOYearMonth(year, month - 1));\n day += ISODaysInMonth(year, month);\n }\n while (day > ISODaysInMonth(year, month)) {\n day -= ISODaysInMonth(year, month);\n ({ year, month } = BalanceISOYearMonth(year, month + 1));\n }\n return { year, month, day };\n}\nfunction BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n if (!NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second) ||\n !NumberIsFinite(millisecond) ||\n !NumberIsFinite(microsecond) ||\n !NumberIsFinite(nanosecond)) {\n throw new RangeError('infinity is out of range');\n }\n microsecond += MathFloor(nanosecond / 1000);\n nanosecond = NonNegativeModulo(nanosecond, 1000);\n millisecond += MathFloor(microsecond / 1000);\n microsecond = NonNegativeModulo(microsecond, 1000);\n second += MathFloor(millisecond / 1000);\n millisecond = NonNegativeModulo(millisecond, 1000);\n minute += MathFloor(second / 60);\n second = NonNegativeModulo(second, 60);\n hour += MathFloor(minute / 60);\n minute = NonNegativeModulo(minute, 60);\n const deltaDays = MathFloor(hour / 24);\n hour = NonNegativeModulo(hour, 24);\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) {\n const days = JSBI.BigInt(daysParam);\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n if (daysParam !== 0)\n nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\nfunction NanosecondsToDays(nanosecondsParam, relativeTo) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n let dayLengthNs = 86400e9;\n if (sign === 0)\n return { days: 0, nanoseconds: ZERO, dayLengthNs };\n if (!IsTemporalZonedDateTime(relativeTo)) {\n let days;\n ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n }\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n const start = GetSlot(relativeTo, INSTANT);\n const endNs = JSBI.add(startNs, nanoseconds);\n const end = new TemporalInstant(endNs);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n // Find the difference in days only.\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate(null));\n let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n // If clock time after addition was in the middle of a skipped period, the\n // endpoint was disambiguated to a later clock time. So it's possible that\n // the resulting disambiguated result is later than endNs. If so, then back\n // up one day and try again. Repeat if necessary (some transitions are\n // > 24 hours) until either there's zero days left or the date duration is\n // back inside the period where it belongs. Note that this case only can\n // happen for positive durations because the only direction that\n // `disambiguation: 'compatible'` can change clock time is forwards.\n if (sign === 1) {\n while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) {\n --days;\n intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may do disambiguation\n }\n }\n nanoseconds = JSBI.subtract(endNs, intermediateNs);\n let isOverflow = false;\n let relativeInstant = new TemporalInstant(intermediateNs);\n do {\n // calculate length of the next day (day that contains the time remainder)\n const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO);\n if (isOverflow) {\n nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n relativeInstant = new TemporalInstant(oneDayFartherNs);\n days += sign;\n }\n } while (isOverflow);\n return { days, nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\nexport function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) {\n let days = daysParam;\n let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt;\n if (IsTemporalZonedDateTime(relativeTo)) {\n const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam);\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n }\n else {\n nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0);\n }\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n }\n else {\n days = 0;\n }\n const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n nanosecondsBigInt = abs(nanosecondsBigInt);\n microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n switch (largestUnit) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n break;\n case 'minute':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n break;\n case 'second':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n break;\n case 'millisecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n break;\n case 'microsecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n break;\n case 'nanosecond':\n break;\n default:\n throw new Error('assert not reached');\n }\n const hours = JSBI.toNumber(hoursBigInt) * sign;\n const minutes = JSBI.toNumber(minutesBigInt) * sign;\n const seconds = JSBI.toNumber(secondsBigInt) * sign;\n const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year':\n // no-op\n break;\n case 'month':\n {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance years down to months\n const dateAdd = calendar.dateAdd;\n const dateUntil = calendar.dateUntil;\n let relativeToDateOnly = relativeTo;\n while (MathAbs(years) > 0) {\n const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil);\n const oneYearMonths = GetSlot(untilResult, MONTHS);\n relativeToDateOnly = newRelativeTo;\n months += oneYearMonths;\n years -= sign;\n }\n }\n break;\n case 'week':\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance years down to days\n while (MathAbs(years) > 0) {\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n break;\n default:\n // balance years down to days\n while (MathAbs(years) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n // balance weeks down to days\n while (MathAbs(weeks) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n days += oneWeekDays;\n weeks -= sign;\n }\n break;\n }\n return { years, months, weeks, days };\n}\nexport function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n if (sign === 0)\n return { years, months, weeks, days };\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('a starting point is required for years balancing');\n // balance days up to years\n let newRelativeTo, oneYearDays;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n while (MathAbs(days) >= MathAbs(oneYearDays)) {\n days -= oneYearDays;\n years += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n }\n // balance days up to months\n let oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n // balance months up to years\n const dateAdd = calendar.dateAdd;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const dateUntil = calendar.dateUntil;\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n let oneYearMonths = GetSlot(untilResult, MONTHS);\n while (MathAbs(months) >= MathAbs(oneYearMonths)) {\n months -= oneYearMonths;\n years += sign;\n relativeTo = newRelativeTo;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n oneYearMonths = GetSlot(untilResult, MONTHS);\n }\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance days up to months\n let newRelativeTo, oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance days up to weeks\n let newRelativeTo, oneWeekDays;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n days -= oneWeekDays;\n weeks += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n break;\n }\n default:\n // no-op\n break;\n }\n return { years, months, weeks, days };\n}\nexport function CalculateOffsetShift(relativeTo, y, mon, w, d) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n const instant = GetSlot(relativeTo, INSTANT);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instantAfter = new TemporalInstant(after);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n return offsetAfter - offsetBefore;\n }\n return 0;\n}\nexport function CreateNegatedTemporalDuration(duration) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS));\n}\nexport function ConstrainToRange(value, min, max) {\n // Math.Max accepts undefined values and returns NaN. Undefined values are\n // used for optional params in the method below.\n return MathMin(max, MathMax(min, value));\n}\nfunction ConstrainISODate(year, monthParam, dayParam) {\n const month = ConstrainToRange(monthParam, 1, 12);\n const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n return { year, month, day };\n}\nfunction ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const hour = ConstrainToRange(hourParam, 0, 23);\n const minute = ConstrainToRange(minuteParam, 0, 59);\n const second = ConstrainToRange(secondParam, 0, 59);\n const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RejectToRange(value, min, max) {\n if (value < min || value > max)\n throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\nfunction RejectISODate(year, month, day) {\n RejectToRange(month, 1, 12);\n RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\nfunction RejectDateRange(year, month, day) {\n // Noon avoids trouble at edges of DateTime range (excludes midnight)\n RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\nexport function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(hour, 0, 23);\n RejectToRange(minute, 0, 59);\n RejectToRange(second, 0, 59);\n RejectToRange(millisecond, 0, 999);\n RejectToRange(microsecond, 0, 999);\n RejectToRange(nanosecond, 0, 999);\n}\nfunction RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectISODate(year, month, day);\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n // Reject any DateTime 24 hours or more outside the Instant range\n if ((year === YEAR_MIN &&\n null ==\n GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n (year === YEAR_MAX &&\n null ==\n GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) {\n throw new RangeError('DateTime outside of supported range');\n }\n}\nexport function ValidateEpochNanoseconds(epochNanoseconds) {\n if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n throw new RangeError('Instant outside of supported range');\n }\n}\nfunction RejectYearMonthRange(year, month) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n if (year === YEAR_MIN) {\n RejectToRange(month, 4, 12);\n }\n else if (year === YEAR_MAX) {\n RejectToRange(month, 1, 9);\n }\n}\nexport function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) {\n const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (!NumberIsFinite(prop))\n throw new RangeError('infinite values not allowed as duration fields');\n const propSign = MathSign(prop);\n if (propSign !== 0 && propSign !== sign)\n throw new RangeError('mixed-sign values not allowed as duration fields');\n }\n}\nexport function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) {\n switch (largestUnit) {\n case 'year':\n case 'month': {\n const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n if (sign === 0)\n return { years: 0, months: 0, weeks: 0, days: 0 };\n const start = { year: y1, month: m1, day: d1 };\n const end = { year: y2, month: m2, day: d2 };\n let years = end.year - start.year;\n let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months: 0, weeks: 0, days: 0 }\n : { years: 0, months: years * 12, weeks: 0, days: 0 };\n }\n let months = end.month - start.month;\n if (midSign !== sign) {\n years -= sign;\n months += sign * 12;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months, weeks: 0, days: 0 }\n : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n }\n if (midSign !== sign) {\n // The end date is later in the month than mid date (or earlier for\n // negative durations). Back up one month.\n months -= sign;\n if (months === -sign) {\n years -= sign;\n months = 11 * sign;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n }\n let days = 0;\n // If we get here, months and years are correct (no overflow), and `mid`\n // is within the range from `start` to `end`. To count the days between\n // `mid` and `end`, there are 3 cases:\n // 1) same month: use simple subtraction\n // 2) end is previous month from intermediate (negative duration)\n // 3) end is next month from intermediate (positive duration)\n if (mid.month === end.month) {\n // 1) same month: use simple subtraction\n days = end.day - mid.day;\n }\n else if (sign < 0) {\n // 2) end is previous month from intermediate (negative duration)\n // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n }\n else {\n // 3) end is next month from intermediate (positive duration)\n // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n }\n if (largestUnit === 'month') {\n months += years * 12;\n years = 0;\n }\n return { years, months, weeks: 0, days };\n }\n case 'week':\n case 'day': {\n let larger, smaller, sign;\n if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n smaller = { year: y1, month: m1, day: d1 };\n larger = { year: y2, month: m2, day: d2 };\n sign = 1;\n }\n else {\n smaller = { year: y2, month: m2, day: d2 };\n larger = { year: y1, month: m1, day: d1 };\n sign = -1;\n }\n let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n for (let year = smaller.year; year < larger.year; ++year) {\n days += LeapYear(year) ? 366 : 365;\n }\n let weeks = 0;\n if (largestUnit === 'week') {\n weeks = MathFloor(days / 7);\n days %= 7;\n }\n weeks *= sign;\n days *= sign;\n return { years: 0, months: 0, weeks, days };\n }\n default:\n throw new Error('assert not reached');\n }\n}\nfunction DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) {\n let hours = h2 - h1;\n let minutes = min2 - min1;\n let seconds = s2 - s1;\n let milliseconds = ms2 - ms1;\n let microseconds = µs2 - µs1;\n let nanoseconds = ns2 - ns1;\n const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n let deltaDays = 0;\n ({\n deltaDays,\n hour: hours,\n minute: minutes,\n second: seconds,\n millisecond: milliseconds,\n microsecond: microseconds,\n nanosecond: nanoseconds\n } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n if (deltaDays != 0)\n throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceInstant(ns1, ns2, increment, unit, roundingMode) {\n const diff = JSBI.subtract(ns2, ns1);\n const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(diff, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n const roundedDiff = JSBI.add(wholeDays, roundedRemainder);\n const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND));\n const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND));\n const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND));\n const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION));\n return { seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) {\n let y1 = y1Param;\n let mon1 = mon1Param;\n let d1 = d1Param;\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2);\n const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n if (dateSign === -timeSign) {\n ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const untilOptions = MergeLargestUnitOption(options, dateLargestUnit);\n // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n // Type 'SmallestUnit | undefined' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n // Type '\"hour\"' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions);\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) {\n const nsDiff = JSBI.subtract(ns2, ns1);\n if (JSBI.equal(nsDiff, ZERO)) {\n return {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n }\n // Find the difference in dates only.\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const start = new TemporalInstant(ns1);\n const end = new TemporalInstant(ns2);\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options);\n const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n // Finally, merge the date and time durations and return the merged result.\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour');\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// TODO: does it make sense to explicitly union the other and options types for each operation?\nexport function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) {\n const other = ToTemporalInstant(otherParam);\n let first, second;\n if (operation === 'until') {\n [first, second] = [instant, other];\n }\n else {\n [first, second] = [other, instant];\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ToTemporalRoundingMode(options, 'trunc');\n const MAX_DIFFERENCE_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false);\n const onens = GetSlot(first, EPOCHNANOSECONDS);\n const twons = GetSlot(second, EPOCHNANOSECONDS);\n let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode);\n let hours, minutes;\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDate(otherParam);\n const calendar = GetSlot(plainDate, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions);\n if (smallestUnit !== 'day' || roundingIncrement !== 1) {\n ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDateTime(otherParam);\n const calendar = GetSlot(plainDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options);\n const relativeTo = TemporalDateTimeToDate(plainDateTime);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalTime(otherParam);\n const options = GetOptionsObject(optionsParam);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'hour';\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalYearMonth(otherParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarID = ToString(calendar);\n const otherCalendarID = ToString(otherCalendar);\n if (calendarID !== otherCalendarID) {\n throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n if (c === 'date' && s !== 'week' && s !== 'day')\n allowed.push(s, p);\n return allowed;\n }, []);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month');\n if (smallestUnit === 'week' || smallestUnit === 'day') {\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'week' || largestUnit === 'day') {\n throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n }\n if (largestUnit === 'auto')\n largestUnit = 'year';\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const otherFields = PrepareTemporalFields(other, fieldNames, []);\n otherFields.day = 1;\n const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n thisFields.day = 1;\n // The calls to PrepareTemporalFields don't mark day as a required property,\n // and TS doesn't automatically narrow the type of the object because of the\n // assignments above, so we must \"cast\" the inputs.\n const otherDate = CalendarDateFromFields(calendar, otherFields);\n const thisDate = CalendarDateFromFields(calendar, thisFields);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions);\n if (smallestUnit !== 'month' || roundingIncrement !== 1) {\n ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalZonedDateTime(otherParam);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, \n // TODO this doesn't type-check as it includes >= day-size units\n // This is probably safe as the typing for ToSmallestTemporalUnit isn't\n // very good.\n smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n throw new RangeError(\"When calculating difference between time zones, largestUnit must be 'hours' \" +\n 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.');\n }\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n year += years;\n month += months;\n ({ year, month } = BalanceISOYearMonth(year, month));\n ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n days += 7 * weeks;\n day += days;\n ({ year, month, day } = BalanceISODate(year, month, day));\n return { year, month, day };\n}\nfunction AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n hour += hours;\n minute += minutes;\n second += seconds;\n millisecond += milliseconds;\n microsecond += microseconds;\n nanosecond += nanoseconds;\n let deltaDays = 0;\n ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond));\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) {\n const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (!relativeTo) {\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n }\n years = months = weeks = 0;\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else if (IsTemporalDate(relativeTo)) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n const dateAdd = calendar.dateAdd;\n const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const differenceOptions = ObjectCreate(null);\n differenceOptions.largestUnit = dateLargestUnit;\n ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else {\n // relativeTo is a ZonedDateTime\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate(null)));\n }\n }\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) {\n let sum = ZERO;\n sum = JSBI.add(sum, JSBI.BigInt(ns));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n const result = JSBI.add(epochNanoseconds, sum);\n ValidateEpochNanoseconds(result);\n return result;\n}\nfunction AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) {\n let days = daysParam;\n // Add the time part\n let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n days += deltaDays;\n // Delegate the date part addition to the calendar\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const datePart = CreateTemporalDate(year, month, day, calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n return {\n year: GetSlot(addedDate, ISO_YEAR),\n month: GetSlot(addedDate, ISO_MONTH),\n day: GetSlot(addedDate, ISO_DAY),\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond\n };\n}\nexport function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) {\n // If only time is to be added, then use Instant math. It's not OK to fall\n // through to the date/time code below because compatible disambiguation in\n // the PlainDateTime=>Instant conversion will change the offset of any\n // ZonedDateTime in the repeated clock time after a backwards transition.\n // When adding/subtracting time units and not dates, this disambiguation is\n // not expected and so is avoided below via a fast path for time-only\n // arithmetic.\n // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n }\n // RFC 5545 requires the date portion to be added in calendar days and the\n // time portion to be added in exact time.\n const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar);\n const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar);\n // Note that 'compatible' is used below because this disambiguation behavior\n // is required by RFC 5545.\n const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible');\n return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\nexport function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other);\n const options = GetOptionsObject(optionsParam);\n const relativeTo = ToRelativeTemporalObject(options);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n 'years',\n 'months',\n 'weeks',\n 'days'\n ]);\n const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ns);\n}\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(dateTime, CALENDAR);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'));\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) {\n let duration = ToTemporalDurationRecord(durationLike);\n if (operation === 'subtract') {\n duration = {\n years: -duration.years,\n months: -duration.months,\n weeks: -duration.weeks,\n days: -duration.days,\n hours: -duration.hours,\n minutes: -duration.minutes,\n seconds: -duration.seconds,\n milliseconds: -duration.milliseconds,\n microseconds: -duration.microseconds,\n nanoseconds: -duration.nanoseconds\n };\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1;\n // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n // and TS doesn't narrow the type as a result of the assignment above, so we\n // cast the fields input to the new type.\n const startDate = CalendarDateFromFields(calendar, fields);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const optionsCopy = ObjectAssign(ObjectCreate(null), options);\n const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options);\n const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nfunction RoundNumberToIncrement(quantity, increment, mode) {\n if (increment === 1)\n return quantity;\n let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment));\n if (JSBI.equal(remainder, ZERO))\n return quantity;\n const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n switch (mode) {\n case 'ceil':\n if (sign > 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'floor':\n if (sign < 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'trunc':\n // no change needed, because divmod is a truncation\n break;\n case 'halfExpand':\n // \"half up away from zero\"\n if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) {\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n }\n break;\n }\n return JSBI.multiply(quotient, JSBI.BigInt(increment));\n}\nexport function RoundInstant(epochNs, increment, unit, roundingMode) {\n // Note: NonNegativeModulo, but with BigInt\n let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9));\n if (JSBI.lessThan(remainder, ZERO))\n remainder = JSBI.add(remainder, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(epochNs, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n return JSBI.add(wholeDays, roundedRemainder);\n}\nexport function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n let quantity = ZERO;\n switch (unit) {\n case 'day':\n case 'hour':\n quantity = JSBI.BigInt(hour);\n // fall through\n case 'minute':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n // fall through\n case 'second':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n // fall through\n case 'millisecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n // fall through\n case 'microsecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n // fall through\n case 'nanosecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n }\n const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode);\n const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n switch (unit) {\n case 'day':\n return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n case 'hour':\n return BalanceTime(result, 0, 0, 0, 0, 0);\n case 'minute':\n return BalanceTime(hour, result, 0, 0, 0, 0);\n case 'second':\n return BalanceTime(hour, minute, result, 0, 0, 0);\n case 'millisecond':\n return BalanceTime(hour, minute, second, result, 0, 0);\n case 'microsecond':\n return BalanceTime(hour, minute, second, millisecond, result, 0);\n case 'nanosecond':\n return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n default:\n throw new Error(`Invalid unit ${unit}`);\n }\n}\nfunction DaysUntil(earlier, later) {\n return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days;\n}\nfunction MoveRelativeDate(calendar, relativeToParam, duration) {\n const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined);\n const days = DaysUntil(relativeToParam, later);\n return { relativeTo: later, days };\n}\nexport function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) {\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\nexport function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (!IsTemporalZonedDateTime(relativeTo) ||\n unit === 'year' ||\n unit === 'month' ||\n unit === 'week' ||\n unit === 'day' ||\n (unit === 'nanosecond' && increment === 1)) {\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n }\n // There's one more round of rounding possible: if relativeTo is a\n // ZonedDateTime, the time units could have rounded up into enough hours\n // to exceed the day length. If this happens, grow the date part by a\n // single day and re-run exact time rounding on the smaller remainder. DO\n // NOT RECURSE, because once the extra hours are sucked up into the date\n // duration, there's no way for another full day to come from the next\n // round of rounding. And if it were possible (e.g. contrived calendar\n // with 30-minute-long \"days\") then it'd risk an infinite loop.\n let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0);\n const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) {\n ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo));\n timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'));\n }\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n let calendar, zdtRelative;\n // A cast is used below because relativeTo will be either PlainDate or\n // undefined for the rest of this long method (after any ZDT=>PlainDate\n // conversion below), and TS isn't smart enough to know that the type has\n // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n let relativeTo = relativeToParam;\n if (relativeTo) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n zdtRelative = relativeTo;\n relativeTo = ToTemporalDate(relativeTo);\n }\n else if (!IsTemporalDate(relativeTo)) {\n throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n }\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n // First convert time units up to days, if rounding to days or higher units.\n // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n // larger. We'll cast away `undefined` when it's used lower down below.\n let dayLengthNs;\n if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n let intermediate;\n if (zdtRelative) {\n intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n }\n let deltaDays;\n let dayLength;\n ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n dayLengthNs = JSBI.BigInt(dayLength);\n days += deltaDays;\n hours = minutes = seconds = milliseconds = microseconds = 0;\n }\n let total;\n switch (unit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('A starting point is required for years rounding');\n // convert months and weeks to days by calculating difference(\n // relativeTo + years, relativeTo + { years, months, weeks })\n const yearsDuration = new TemporalDuration(years);\n const dateAdd = calendar.dateAdd;\n const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n relativeTo = yearsLater;\n days += monthsWeeksInDays;\n const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'year';\n const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years;\n years += yearsPassed;\n const oldRelativeTo = relativeTo;\n relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd);\n const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n days -= daysPassed;\n const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear);\n // Note that `nanoseconds` below (here and in similar code for months,\n // weeks, and days further below) isn't actually nanoseconds for the\n // full date range. Instead, it's a BigInt representation of total\n // days multiplied by the number of nanoseconds in the last day of\n // the duration. This lets us do days-or-larger rounding using BigInt\n // math which reduces precision loss.\n oneYearDays = MathAbs(oneYearDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n months = weeks = days = 0;\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('A starting point is required for months rounding');\n // convert weeks to days by calculating difference(relativeTo +\n // { years, months }, relativeTo + { years, months, weeks })\n const yearsMonths = new TemporalDuration(years, months);\n const dateAdd = calendar.dateAdd;\n const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n relativeTo = yearsMonthsLater;\n days += weeksInDays;\n // Months may be different lengths of days depending on the calendar,\n // convert days to months in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n months += sign;\n days -= oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n oneMonthDays = MathAbs(oneMonthDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n weeks = days = 0;\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('A starting point is required for weeks rounding');\n // Weeks may be different lengths of days depending on the calendar,\n // convert days to weeks in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n weeks += sign;\n days -= oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n oneWeekDays = MathAbs(oneWeekDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n days = 0;\n break;\n }\n case 'day': {\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = dayLengthNs;\n nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n break;\n }\n case 'hour': {\n const divisor = 3600e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n minutes = seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'minute': {\n const divisor = 60e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'second': {\n const divisor = 1e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n milliseconds = microseconds = 0;\n break;\n }\n case 'millisecond': {\n const divisor = 1e6;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n microseconds = 0;\n break;\n }\n case 'microsecond': {\n const divisor = 1e3;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n break;\n }\n case 'nanosecond': {\n total = JSBI.toNumber(nanoseconds);\n nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode);\n break;\n }\n }\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n microseconds,\n nanoseconds: JSBI.toNumber(nanoseconds),\n total\n };\n}\nexport function CompareISODate(y1, m1, d1, y2, m2, d2) {\n for (const [x, y] of [\n [y1, y2],\n [m1, m2],\n [d1, d2]\n ]) {\n if (x !== y)\n return ComparisonResult(x - y);\n }\n return 0;\n}\nfunction NonNegativeModulo(x, y) {\n let result = x % y;\n if (ObjectIs(result, -0))\n return 0;\n if (result < 0)\n result += y;\n return result;\n}\nexport function ToBigIntExternal(arg) {\n const jsbiBI = ToBigInt(arg);\n if (typeof globalThis.BigInt !== 'undefined')\n return globalThis.BigInt(jsbiBI.toString(10));\n return jsbiBI;\n}\nexport function ToBigInt(arg) {\n if (arg instanceof JSBI) {\n return arg;\n }\n let prim = arg;\n if (typeof arg === 'object') {\n const toPrimFn = arg[Symbol.toPrimitive];\n if (toPrimFn && typeof toPrimFn === 'function') {\n prim = ReflectApply(toPrimFn, arg, ['number']);\n }\n }\n switch (typeof prim) {\n case 'undefined':\n case 'object':\n case 'number':\n case 'symbol':\n default:\n throw new TypeError(`cannot convert ${typeof arg} to bigint`);\n case 'string':\n if (!prim.match(/^\\s*(?:[+-]?\\d+\\s*)?$/)) {\n throw new SyntaxError('invalid BigInt syntax');\n }\n // eslint: no-fallthrough: false\n case 'bigint':\n try {\n return JSBI.BigInt(prim.toString());\n }\n catch (e) {\n if (e instanceof Error && e.message.startsWith('Invalid integer'))\n throw new SyntaxError(e.message);\n throw e;\n }\n case 'boolean':\n if (prim) {\n return ONE;\n }\n else {\n return ZERO;\n }\n }\n}\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds = (() => {\n let ns = JSBI.BigInt(Date.now() % 1e6);\n return () => {\n const ms = JSBI.BigInt(Date.now());\n const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n ns = JSBI.remainder(ms, MILLION);\n if (JSBI.greaterThan(result, NS_MAX))\n return NS_MAX;\n if (JSBI.lessThan(result, NS_MIN))\n return NS_MIN;\n return result;\n };\n})();\nexport function SystemTimeZone() {\n const fmt = new IntlDateTimeFormat('en-us');\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone));\n}\nexport function ComparisonResult(value) {\n return value < 0 ? -1 : value > 0 ? 1 : value;\n}\nexport function GetOptionsObject(options) {\n if (options === undefined)\n return ObjectCreate(null);\n if (IsObject(options) && options !== null)\n return options;\n throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\nexport function CreateOnePropObject(propName, propValue) {\n const o = ObjectCreate(null);\n o[propName] = propValue;\n return o;\n}\nfunction GetOption(options, property, allowedValues, fallback) {\n let value = options[property];\n if (value !== undefined) {\n value = ToString(value);\n if (!allowedValues.includes(value)) {\n throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n }\n return value;\n }\n return fallback;\n}\nfunction GetNumberOption(options, property, minimum, maximum, fallback) {\n let valueRaw = options[property];\n if (valueRaw === undefined)\n return fallback;\n const value = ToNumber(valueRaw);\n if (NumberIsNaN(value) || value < minimum || value > maximum) {\n throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`);\n }\n return MathFloor(value);\n}\nexport function IsBuiltinCalendar(id) {\n return ArrayIncludes.call(BUILTIN_CALENDAR_IDS, id);\n}\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\nfunction bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) {\n // This doesn't make much sense - why do these get converted unnecessarily?\n let left = JSBI.BigInt(leftParam);\n let right = JSBI.BigInt(rightParam);\n let lstate = lstateParam;\n let rstate = rstateParam;\n while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n const mstate = getState(middle);\n if (mstate === lstate) {\n left = middle;\n lstate = mstate;\n }\n else if (mstate === rstate) {\n right = middle;\n rstate = mstate;\n }\n else {\n throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n }\n }\n return right;\n}\nconst nsPerTimeUnit = {\n hour: 3600e9,\n minute: 60e9,\n second: 1e9,\n millisecond: 1e6,\n microsecond: 1e3,\n nanosecond: 1\n};\n//# sourceMappingURL=ecmascript.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { GetSlot, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, TIME_ZONE } from './slots';\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst ZONED = Symbol('zoneddatetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst TZ_GIVEN = Symbol('timezone-id-given');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\nconst descriptor = (value) => {\n return {\n value,\n enumerable: true,\n writable: false,\n configurable: true\n };\n};\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy(obj, prop) {\n let val = obj[prop];\n if (typeof val === 'function') {\n // If we get here, `val` is an \"amender function\". It will take the user's\n // options and transform them into suitable options to be passed into the\n // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n // will vary depending on the Temporal type, so that's why we store separate\n // formatters in separate props on the polyfill's DateTimeFormat instances.\n // The efficiency happens because we don't create an (expensive) formatter\n // until the user calls toLocaleString for that Temporal type.\n val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n // TODO: can this be typed more cleanly?\n obj[prop] = val;\n }\n return val;\n}\n// Similarly, lazy-init TimeZone instances.\nfunction getResolvedTimeZoneLazy(obj) {\n let val = obj[TZ_RESOLVED];\n if (typeof val === 'string') {\n val = ES.ToTemporalTimeZone(val);\n obj[TZ_RESOLVED] = val;\n }\n return val;\n}\nfunction DateTimeFormatImpl(locale = undefined, optionsParam = {}) {\n if (!(this instanceof DateTimeFormatImpl)) {\n return new DateTimeFormatImpl(locale, optionsParam);\n }\n const hasOptions = typeof optionsParam !== 'undefined';\n const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n // TODO: remove type assertion after Temporal types land in TS lib types\n const original = new IntlDateTimeFormat(locale, options);\n const ro = original.resolvedOptions();\n // DateTimeFormat instances are very expensive to create. Therefore, they will\n // be lazily created only when needed, using the locale and options provided.\n // But it's possible for callers to mutate those inputs before lazy creation\n // happens. For this reason, we clone the inputs instead of caching the\n // original objects. To avoid the complexity of deep cloning any inputs that\n // are themselves objects (e.g. the locales array, or options property values\n // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n // coercion and cloning for us. Unfortunately, we can't just use the resolved\n // options as-is because our options-amending logic adds additional fields if\n // the user doesn't supply any unit fields like year, month, day, hour, etc.\n // Therefore, we limit the properties in the clone to properties that were\n // present in the original input.\n if (hasOptions) {\n const clonedResolved = ObjectAssign({}, ro);\n for (const prop in clonedResolved) {\n if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n delete clonedResolved[prop];\n }\n }\n this[OPTIONS] = clonedResolved;\n }\n else {\n this[OPTIONS] = options;\n }\n this[TZ_GIVEN] = options.timeZone ? options.timeZone : null;\n this[LOCALE] = ro.locale;\n this[ORIGINAL] = original;\n this[TZ_RESOLVED] = ro.timeZone;\n this[CAL_ID] = ro.calendar;\n this[DATE] = dateAmend;\n this[YM] = yearMonthAmend;\n this[MD] = monthDayAmend;\n this[TIME] = timeAmend;\n this[DATETIME] = datetimeAmend;\n this[ZONED] = zonedDateTimeAmend;\n this[INST] = instantAmend;\n return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n writable: true,\n value: 'DateTimeFormat'\n});\nDateTimeFormatImpl.supportedLocalesOf = function (locales, options) {\n return IntlDateTimeFormat.supportedLocalesOf(locales, options);\n};\nconst propertyDescriptors = {\n resolvedOptions: descriptor(resolvedOptions),\n format: descriptor(format),\n formatRange: descriptor(formatRange)\n};\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n writable: false,\n enumerable: false,\n configurable: false\n});\nexport const DateTimeFormat = DateTimeFormatImpl;\nfunction resolvedOptions() {\n return this[ORIGINAL].resolvedOptions();\n}\nfunction adjustFormatterTimeZone(formatter, timeZone) {\n if (!timeZone)\n return formatter;\n const options = formatter.resolvedOptions();\n if (options.timeZone === timeZone)\n return formatter;\n // Existing Intl isn't typed to accept Temporal-specific options and the lib\n // types for resolved options are less restrictive than the types for options.\n // For example, `weekday` is\n // `'long' | 'short' | 'narrow'` in options but `string` in resolved options.\n // TODO: investigate why, and file an issue against TS if it's a bug.\n if (options['dateStyle'] || options['timeStyle']) {\n // Unfortunately, Safari's resolvedOptions include parameters that will\n // cause errors at runtime if passed along with\n // dateStyle or timeStyle options as per\n // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components.\n // This has been fixed in newer versions of Safari:\n // https://bugs.webkit.org/show_bug.cgi?id=231041\n delete options['weekday'];\n delete options['era'];\n delete options['year'];\n delete options['month'];\n delete options['day'];\n delete options['hour'];\n delete options['minute'];\n delete options['second'];\n delete options['timeZoneName'];\n delete options['hourCycle'];\n delete options['hour12'];\n delete options['dayPeriod'];\n }\n return new IntlDateTimeFormat(options.locale, { ...options, timeZone });\n}\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.format(instant.epochMilliseconds);\n }\n return this[ORIGINAL].format(datetime, ...rest);\n}\nfunction formatToParts(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.formatToParts(instant.epochMilliseconds);\n }\n return this[ORIGINAL].formatToParts(datetime, ...rest);\n}\nfunction formatRange(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRange(a, b);\n}\nfunction formatRangeToParts(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRangeToParts(a, b);\n}\nfunction amend(optionsParam = {}, amended = {}) {\n const options = ObjectAssign({}, optionsParam);\n for (const opt of [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'weekday',\n 'dayPeriod',\n 'timeZoneName',\n 'dateStyle',\n 'timeStyle'\n ]) {\n options[opt] = opt in amended ? amended[opt] : options[opt];\n if (options[opt] === false || options[opt] === undefined)\n delete options[opt];\n }\n return options;\n}\nfunction timeAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n month: false,\n day: false,\n weekday: false,\n timeZoneName: false,\n dateStyle: false\n });\n if (!hasTimeOptions(options)) {\n options = ObjectAssign({}, options, {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction yearMonthAmend(optionsParam) {\n let options = amend(optionsParam, {\n day: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('year' in options || 'month' in options)) {\n options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n }\n return options;\n}\nfunction monthDayAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('month' in options || 'day' in options)) {\n options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n }\n return options;\n}\nfunction dateAmend(optionsParam) {\n let options = amend(optionsParam, {\n hour: false,\n minute: false,\n second: false,\n dayPeriod: false,\n timeZoneName: false,\n timeStyle: false\n });\n if (!hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n });\n }\n return options;\n}\nfunction datetimeAmend(optionsParam) {\n let options = amend(optionsParam, { timeZoneName: false });\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction zonedDateTimeAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n if (options.timeZoneName === undefined)\n options.timeZoneName = 'short';\n }\n return options;\n}\nfunction instantAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction hasDateOptions(options) {\n return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\nfunction hasTimeOptions(options) {\n return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options);\n}\nfunction isTemporalObject(obj) {\n return (ES.IsTemporalDate(obj) ||\n ES.IsTemporalTime(obj) ||\n ES.IsTemporalDateTime(obj) ||\n ES.IsTemporalZonedDateTime(obj) ||\n ES.IsTemporalYearMonth(obj) ||\n ES.IsTemporalMonthDay(obj) ||\n ES.IsTemporalInstant(obj));\n}\nfunction sameTemporalType(x, y) {\n if (!isTemporalObject(x) || !isTemporalObject(y))\n return false;\n if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y))\n return false;\n if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y))\n return false;\n if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y))\n return false;\n if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y))\n return false;\n if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y))\n return false;\n if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y))\n return false;\n if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y))\n return false;\n return true;\n}\nfunction extractOverrides(temporalObj, main) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n if (ES.IsTemporalTime(temporalObj)) {\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, TIME)\n };\n }\n if (ES.IsTemporalYearMonth(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, YM)\n };\n }\n if (ES.IsTemporalMonthDay(temporalObj)) {\n const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, MD)\n };\n }\n if (ES.IsTemporalDate(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATE)\n };\n }\n if (ES.IsTemporalDateTime(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n let datetime = temporalObj;\n if (calendar === 'iso8601') {\n datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n }\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATETIME)\n };\n }\n if (ES.IsTemporalZonedDateTime(temporalObj)) {\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const timeZone = GetSlot(temporalObj, TIME_ZONE);\n const objTimeZone = ES.ToString(timeZone);\n if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) {\n throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`);\n }\n return {\n instant: GetSlot(temporalObj, INSTANT),\n formatter: getPropLazy(main, ZONED),\n timeZone: objTimeZone\n };\n }\n if (ES.IsTemporalInstant(temporalObj)) {\n return {\n instant: temporalObj,\n formatter: getPropLazy(main, INST)\n };\n }\n return {};\n}\n//# sourceMappingURL=intl.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\nexport class Instant {\n constructor(epochNanoseconds) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const ns = ES.ToBigInt(epochNanoseconds);\n ES.ValidateEpochNanoseconds(ns);\n CreateSlots(this);\n SetSlot(this, EPOCHNANOSECONDS, ns);\n if (DEBUG) {\n const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${repr}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get epochSeconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n hour: 24,\n minute: 1440,\n second: 86400,\n millisecond: 86400e3,\n microsecond: 86400e6,\n nanosecond: 86400e9\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true);\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n return new Instant(roundedNs);\n }\n equals(otherParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalInstant(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n let timeZone = options.timeZone;\n if (timeZone !== undefined)\n timeZone = ES.ToTemporalTimeZone(timeZone);\n // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n const roundedInstant = new Instant(roundedNs);\n return ES.TemporalInstantToString(roundedInstant, timeZone, precision);\n }\n toJSON() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalInstantToString(this, undefined, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument in toZonedDateTime');\n }\n const calendarLike = item.calendar;\n if (calendarLike === undefined) {\n throw new TypeError('missing calendar property in toZonedDateTime');\n }\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const temporalTimeZoneLike = item.timeZone;\n if (temporalTimeZoneLike === undefined) {\n throw new TypeError('missing timeZone property in toZonedDateTime');\n }\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toZonedDateTimeISO(itemParam) {\n let item = itemParam;\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (ES.IsObject(item)) {\n const timeZoneProperty = item.timeZone;\n if (timeZoneProperty !== undefined) {\n item = timeZoneProperty;\n }\n }\n const timeZone = ES.ToTemporalTimeZone(item);\n const calendar = ES.GetISO8601Calendar();\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n static fromEpochSeconds(epochSecondsParam) {\n const epochSeconds = ES.ToNumber(epochSecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMilliseconds(epochMillisecondsParam) {\n const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMicroseconds(epochMicrosecondsParam) {\n const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochNanoseconds(epochNanosecondsParam) {\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static from(item) {\n if (ES.IsTemporalInstant(item)) {\n return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n }\n return ES.ToTemporalInstant(item);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalInstant(oneParam);\n const two = ES.ToTemporalInstant(twoParam);\n const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(oneNs, twoNs))\n return -1;\n if (JSBI.greaterThan(oneNs, twoNs))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n//# sourceMappingURL=instant.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport { CALENDAR_ID, ISO_YEAR, ISO_MONTH, ISO_DAY, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, HasSlot, SetSlot } from './slots';\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectEntries = Object.entries;\nconst ObjectKeys = Object.keys;\n/**\n * Implementations for each calendar. Non-ISO calendars have an extra `helper`\n * property that provides additional per-calendar logic.\n */\nconst impl = {};\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n * PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar {\n constructor(idParam) {\n // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n // exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: id is required');\n }\n const id = ES.ToString(idParam);\n if (!ES.IsBuiltinCalendar(id))\n throw new RangeError(`invalid calendar identifier ${id}`);\n CreateSlots(this);\n SetSlot(this, CALENDAR_ID, id);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${id}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n dateFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this);\n }\n yearMonthFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this);\n }\n monthDayFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this);\n }\n fields(fields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const fieldsArray = [];\n const allowed = new Set([\n 'year',\n 'month',\n 'monthCode',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n 'microsecond',\n 'nanosecond'\n ]);\n for (const name of fields) {\n if (typeof name !== 'string')\n throw new TypeError('invalid fields');\n if (!allowed.has(name))\n throw new RangeError(`invalid field name ${name}`);\n allowed.delete(name);\n ArrayPrototypePush.call(fieldsArray, name);\n }\n return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n }\n mergeFields(fields, additionalFields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields);\n }\n dateAdd(dateParam, durationParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n const duration = ES.ToTemporalDuration(durationParam);\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const { days } = ES.BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day');\n return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this);\n }\n dateUntil(oneParam, twoParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'day';\n const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n }\n year(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].year(date);\n }\n month(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (ES.IsTemporalMonthDay(date))\n throw new TypeError('use monthCode on PlainMonthDay instead');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].month(date);\n }\n monthCode(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthCode(date);\n }\n day(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].day(date);\n }\n era(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].era(date);\n }\n eraYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].eraYear(date);\n }\n dayOfWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n }\n dayOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n }\n weekOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n }\n daysInWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n }\n daysInMonth(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date);\n }\n daysInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date);\n }\n monthsInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date);\n }\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date);\n }\n toString() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR_ID);\n }\n toJSON() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalCalendar(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month, day } = fields;\n ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month } = fields;\n ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n return ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1);\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n throw new TypeError('either year or monthCode required with month');\n }\n const useYear = fields.monthCode === undefined;\n const referenceISOYear = 1972;\n fields = resolveNonLunisolarMonth(fields);\n let { month, day, year } = fields;\n ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n return ES.CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n },\n fields(fields) {\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const merged = {};\n for (const nextKey of ObjectKeys(fields)) {\n if (nextKey === 'month' || nextKey === 'monthCode')\n continue;\n merged[nextKey] = fields[nextKey];\n }\n const newKeys = ObjectKeys(additionalFields);\n for (const nextKey of newKeys) {\n merged[nextKey] = additionalFields[nextKey];\n }\n if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) {\n const { month, monthCode } = fields;\n if (month !== undefined)\n merged.month = month;\n if (monthCode !== undefined)\n merged.monthCode = monthCode;\n }\n return merged;\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n let year = GetSlot(date, ISO_YEAR);\n let month = GetSlot(date, ISO_MONTH);\n let day = GetSlot(date, ISO_DAY);\n ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n dateUntil(one, two, largestUnit) {\n return ES.DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit);\n },\n year(date) {\n return GetSlot(date, ISO_YEAR);\n },\n era() {\n return undefined;\n },\n eraYear() {\n return undefined;\n },\n month(date) {\n return GetSlot(date, ISO_MONTH);\n },\n monthCode(date) {\n return buildMonthCode(GetSlot(date, ISO_MONTH));\n },\n day(date) {\n return GetSlot(date, ISO_DAY);\n },\n dayOfWeek(date) {\n return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n dayOfYear(date) {\n return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n weekOfYear(date) {\n return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n daysInWeek() {\n return 7;\n },\n daysInMonth(date) {\n return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n },\n monthsInYear() {\n return 12;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR));\n }\n};\nfunction monthCodeNumberPart(monthCode) {\n if (!monthCode.startsWith('M')) {\n throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`);\n }\n const month = +monthCode.slice(1);\n if (isNaN(month))\n throw new RangeError(`Invalid month code: ${monthCode}`);\n return month;\n}\nfunction buildMonthCode(month, leap = false) {\n return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) {\n let { month, monthCode } = calendarDate;\n if (monthCode === undefined) {\n if (month === undefined)\n throw new TypeError('Either month or monthCode are required');\n // The ISO calendar uses the default (undefined) value because it does\n // constrain/reject after this method returns. Non-ISO calendars, however,\n // rely on this function to constrain/reject out-of-range `month` values.\n if (overflow === 'reject')\n ES.RejectToRange(month, 1, monthsPerYear);\n if (overflow === 'constrain')\n month = ES.ConstrainToRange(month, 1, monthsPerYear);\n monthCode = buildMonthCode(month);\n }\n else {\n const numberPart = monthCodeNumberPart(monthCode);\n if (month !== undefined && month !== numberPart) {\n throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n }\n if (monthCode !== buildMonthCode(numberPart)) {\n throw new RangeError(`Invalid month code: ${monthCode}`);\n }\n month = numberPart;\n if (month < 1 || month > monthsPerYear)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n return { ...calendarDate, month, monthCode };\n}\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance. No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n constructor(cacheToClone) {\n this.map = new Map();\n this.calls = 0;\n this.hits = 0;\n this.misses = 0;\n this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n if (cacheToClone !== undefined) {\n let i = 0;\n for (const entry of cacheToClone.map.entries()) {\n if (++i > OneObjectCache.MAX_CACHE_ENTRIES)\n break;\n this.map.set(...entry);\n }\n }\n }\n get(key) {\n const result = this.map.get(key);\n if (result) {\n this.hits++;\n this.report();\n }\n this.calls++;\n return result;\n }\n set(key, value) {\n this.map.set(key, value);\n this.misses++;\n this.report();\n }\n report() {\n /*\n if (this.calls === 0) return;\n const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n */\n }\n setObject(obj) {\n if (OneObjectCache.objectMap.get(obj))\n throw new RangeError('object already cached');\n OneObjectCache.objectMap.set(obj, this);\n this.report();\n }\n /**\n * Returns a WeakMap-backed cache that's used to store expensive results\n * that are associated with a particular Temporal object instance.\n *\n * @param obj - object to associate with the cache\n */\n static getCacheForObject(obj) {\n let cache = OneObjectCache.objectMap.get(obj);\n if (!cache) {\n cache = new OneObjectCache();\n OneObjectCache.objectMap.set(obj, cache);\n }\n return cache;\n }\n}\nOneObjectCache.objectMap = new WeakMap();\nOneObjectCache.MAX_CACHE_ENTRIES = 1000;\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }) {\n const yearString = ES.ISOYearString(isoYear);\n const monthString = ES.ISODateTimePartString(isoMonth);\n const dayString = ES.ISODateTimePartString(isoDay);\n return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\nfunction simpleDateDiff(one, two) {\n return {\n years: one.year - two.year,\n months: one.month - two.month,\n days: one.day - two.day\n };\n}\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nclass HelperBase {\n constructor() {\n // The short era format works for all calendars except Japanese, which will\n // override.\n this.eraLength = 'short';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = true;\n }\n getFormatter() {\n // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n // calendars that are used. Note that the nonIsoHelperBase object is spread\n // into each each calendar's implementation before any cache is created, so\n // each calendar gets its own separate cached formatter.\n if (typeof this.formatter === 'undefined') {\n this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n era: this.eraLength,\n timeZone: 'UTC'\n });\n }\n return this.formatter;\n }\n isoToCalendarDate(isoDate, cache) {\n const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n let parts, isoString;\n try {\n isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n parts = dateTimeFormat.formatToParts(new Date(isoString));\n }\n catch (e) {\n throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n }\n const result = {};\n for (let { type, value } of parts) {\n if (type === 'year')\n result.eraYear = +value;\n // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n if (type === 'relatedYear')\n result.eraYear = +value;\n if (type === 'month') {\n const matches = /^([0-9]*)(.*?)$/.exec(value);\n if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n throw new RangeError(`Unexpected month: ${value}`);\n }\n // If the month has no numeric part (should only see this for the Hebrew\n // calendar with newer FF / Chromium versions; see\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n // placeholder month index of `1` and rely on the derived class to\n // calculate the correct month index from the month name stored in\n // `monthExtra`.\n result.month = matches[1] ? +matches[1] : 1;\n if (result.month < 1) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)');\n }\n if (result.month > 13) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n // The ICU formats for the Hebrew calendar no longer support a numeric\n // month format. So we'll rely on the derived class to interpret it.\n // `monthExtra` is also used on the Chinese calendar to handle a suffix\n // \"bis\" indicating a leap month.\n if (matches[2])\n result.monthExtra = matches[2];\n }\n if (type === 'day')\n result.day = +value;\n if (this.hasEra && type === 'era' && value != null && value !== '') {\n // The convention for Temporal era values is lowercase, so following\n // that convention in this prototype. Punctuation is removed, accented\n // letters are normalized, and spaces are replaced with dashes.\n // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n // The call to normalize() and the replacement regex deals with era\n // names that contain non-ASCII characters like Japanese eras. Also\n // ignore extra content in parentheses like JPN era date ranges.\n value = value.split(' (')[0];\n result.era = value\n .normalize('NFD')\n .replace(/[^-0-9 \\p{L}]/gu, '')\n .replace(' ', '-')\n .toLowerCase();\n }\n }\n if (result.eraYear === undefined) {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n // Translate eras that may be handled differently by Temporal vs. by Intl\n // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n if (this.reviseIntlEra) {\n const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n result.era = era;\n result.eraYear = eraYear;\n }\n if (this.checkIcuBugs)\n this.checkIcuBugs(isoDate);\n const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n if (calendarDate.year === undefined)\n throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.month === undefined)\n throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.day === undefined)\n throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n cache.set(key, calendarDate);\n // Also cache the reverse mapping\n ['constrain', 'reject'].forEach((overflow) => {\n const keyReverse = JSON.stringify({\n func: 'calendarToIsoDate',\n year: calendarDate.year,\n month: calendarDate.month,\n day: calendarDate.day,\n overflow,\n id: this.id\n });\n cache.set(keyReverse, isoDate);\n });\n return calendarDate;\n }\n validateCalendarDate(calendarDate) {\n const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n // the derived class must deal with it.\n if (monthExtra !== undefined)\n throw new RangeError('Unexpected `monthExtra` value');\n if (year === undefined && eraYear === undefined)\n throw new TypeError('year or eraYear is required');\n if (month === undefined && monthCode === undefined)\n throw new TypeError('month or monthCode is required');\n if (day === undefined)\n throw new RangeError('Missing day');\n if (monthCode !== undefined) {\n if (typeof monthCode !== 'string') {\n throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n }\n if (!/^M([01]?\\d)(L?)$/.test(monthCode))\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n if (this.constantEra) {\n if (era !== undefined && era !== this.constantEra) {\n throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n }\n if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n }\n }\n }\n /**\n * Allows derived calendars to add additional fields and/or to make\n * adjustments e.g. to set the era based on the date or to revise the month\n * number in lunisolar calendars per\n * https://github.com/tc39/proposal-temporal/issues/1203.\n *\n * The base implementation fills in missing values by assuming the simplest\n * possible calendar:\n * - no eras or a constant era defined in `.constantEra`\n * - non-lunisolar calendar (no leap months)\n * */\n adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', \n // This param is only used by derived classes\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromLegacyDate = false) {\n if (this.calendarType === 'lunisolar')\n throw new RangeError('Override required for lunisolar calendars');\n let calendarDate = calendarDateParam;\n this.validateCalendarDate(calendarDate);\n // For calendars that always use the same era, set it here so that derived\n // calendars won't need to implement this method simply to set the era.\n if (this.constantEra) {\n // year and eraYear always match when there's only one possible era\n const { year, eraYear } = calendarDate;\n calendarDate = {\n ...calendarDate,\n era: this.constantEra,\n year: year !== undefined ? year : eraYear,\n eraYear: eraYear !== undefined ? eraYear : year\n };\n }\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, monthCode } = calendarDate;\n ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n return { ...calendarDate, month, monthCode };\n }\n regulateMonthDayNaive(calendarDate, overflow, cache) {\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, day } = calendarDate;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n }\n return { ...calendarDate, month, day };\n }\n calendarToIsoDate(dateParam, overflow = 'constrain', cache) {\n const originalDate = dateParam;\n // First, normalize the calendar date to ensure that (year, month, day)\n // are all present, converting monthCode and eraYear if needed.\n let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n // Fix obviously out-of-bounds values. Values that are valid generally, but\n // not in this particular year, may not be caught here for some calendars.\n // If so, these will be handled lower below.\n date = this.regulateMonthDayNaive(date, overflow, cache);\n const { year, month, day } = date;\n const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n let cached = cache.get(key);\n if (cached)\n return cached;\n // If YMD are present in the input but the input has been constrained\n // already, then cache both the original value and the constrained value.\n let keyOriginal;\n if (originalDate.year !== undefined &&\n originalDate.month !== undefined &&\n originalDate.day !== undefined &&\n (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) {\n keyOriginal = JSON.stringify({\n func: 'calendarToIsoDate',\n year: originalDate.year,\n month: originalDate.month,\n day: originalDate.day,\n overflow,\n id: this.id\n });\n cached = cache.get(keyOriginal);\n if (cached)\n return cached;\n }\n // First, try to roughly guess the result\n let isoEstimate = this.estimateIsoDate({ year, month, day });\n const calculateSameMonthResult = (diffDays) => {\n // If the estimate is in the same year & month as the target, then we can\n // calculate the result exactly and short-circuit any additional logic.\n // This optimization assumes that months are continuous. It would break if\n // a calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So\n // this optimization should be safe for all ICU calendars.\n let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n if (date.day > this.minimumMonthLength(date)) {\n // There's a chance that the calendar date is out of range. Throw or\n // constrain if so.\n let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n if (overflow === 'reject') {\n throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n }\n // Back up a day at a time until we're not hanging over the month end\n testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n }\n }\n return testIsoEstimate;\n };\n let sign = 0;\n let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n let diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n }\n else {\n sign = this.compareCalendarDates(date, roundtripEstimate);\n }\n }\n // If the initial guess is not in the same month, then then bisect the\n // distance to the target, starting with 8 days per step.\n let increment = 8;\n let maybeConstrained = false;\n while (sign) {\n isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n const oldRoundtripEstimate = roundtripEstimate;\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n const oldSign = sign;\n sign = this.compareCalendarDates(date, roundtripEstimate);\n if (sign) {\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n // Signal the loop condition that there's a match.\n sign = 0;\n // If the calendar day is larger than the minimal length for this\n // month, then it might be larger than the actual length of the month.\n // So we won't cache it as the correct calendar date for this ISO\n // date.\n maybeConstrained = date.day > this.minimumMonthLength(date);\n }\n else if (oldSign && sign !== oldSign) {\n if (increment > 1) {\n // If the estimate overshot the target, try again with a smaller increment\n // in the reverse direction.\n increment /= 2;\n }\n else {\n // Increment is 1, and neither the previous estimate nor the new\n // estimate is correct. The only way that can happen is if the\n // original date was an invalid value that will be constrained or\n // rejected here.\n if (overflow === 'reject') {\n throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n }\n else {\n // To constrain, pick the earliest value\n const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n // If current value is larger, then back up to the previous value.\n if (order > 0)\n isoEstimate = this.addDaysIso(isoEstimate, -1);\n maybeConstrained = true;\n sign = 0;\n }\n }\n }\n }\n }\n cache.set(key, isoEstimate);\n if (keyOriginal)\n cache.set(keyOriginal, isoEstimate);\n if (date.year === undefined ||\n date.month === undefined ||\n date.day === undefined ||\n date.monthCode === undefined ||\n (this.hasEra && (date.era === undefined || date.eraYear === undefined))) {\n throw new RangeError('Unexpected missing property');\n }\n if (!maybeConstrained) {\n // Also cache the reverse mapping\n const keyReverse = JSON.stringify({\n func: 'isoToCalendarDate',\n isoYear: isoEstimate.year,\n isoMonth: isoEstimate.month,\n isoDay: isoEstimate.day,\n id: this.id\n });\n cache.set(keyReverse, date);\n }\n return isoEstimate;\n }\n temporalToCalendarDate(date, cache) {\n const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n const result = this.isoToCalendarDate(isoDate, cache);\n return result;\n }\n compareCalendarDates(date1Param, date2Param) {\n // `date1` and `date2` are already records. The calls below simply validate\n // that all three required fields are present.\n const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n if (date1.year !== date2.year)\n return ES.ComparisonResult(date1.year - date2.year);\n if (date1.month !== date2.month)\n return ES.ComparisonResult(date1.month - date2.month);\n if (date1.day !== date2.day)\n return ES.ComparisonResult(date1.day - date2.day);\n return 0;\n }\n /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n regulateDate(calendarDate, overflow = 'constrain', cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n return this.isoToCalendarDate(isoDate, cache);\n }\n addDaysIso(isoDate, days) {\n const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n return added;\n }\n addDaysCalendar(calendarDate, days, cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIso = this.addDaysIso(isoDate, days);\n const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n return addedCalendar;\n }\n addMonthsCalendar(calendarDateParam, months, overflow, cache) {\n let calendarDate = calendarDateParam;\n const { day } = calendarDate;\n for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n const { month } = calendarDate;\n const oldCalendarDate = calendarDate;\n const days = months < 0\n ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n : this.daysInMonth(calendarDate, cache);\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n let addedIso = this.addDaysIso(isoDate, days);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n // Normally, we can advance one month by adding the number of days in the\n // current month. However, if we're at the end of the current month and\n // the next month has fewer days, then we rolled over to the after-next\n // month. Below we detect this condition and back up until we're back in\n // the desired month.\n if (months > 0) {\n const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n while (calendarDate.month - 1 !== month % monthsInOldYear) {\n addedIso = this.addDaysIso(addedIso, -1);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n }\n }\n if (calendarDate.day !== day) {\n // try to retain the original day-of-month, if possible\n calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n }\n }\n if (overflow === 'reject' && calendarDate.day !== day) {\n throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n }\n return calendarDate;\n }\n addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) {\n const { year, day, monthCode } = calendarDate;\n const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n const initialDays = days + weeks * 7;\n const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n return addedDays;\n }\n untilCalendar(calendarOne, calendarTwo, largestUnit, cache) {\n let days = 0;\n let weeks = 0;\n let months = 0;\n let years = 0;\n switch (largestUnit) {\n case 'day':\n days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n break;\n case 'week': {\n const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n days = totalDays % 7;\n weeks = (totalDays - days) / 7;\n break;\n }\n case 'month':\n case 'year': {\n const diffYears = calendarTwo.year - calendarOne.year;\n const diffMonths = calendarTwo.month - calendarOne.month;\n const diffDays = calendarTwo.day - calendarOne.day;\n const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n if (!sign) {\n return { years: 0, months: 0, weeks: 0, days: 0 };\n }\n if (largestUnit === 'year' && diffYears) {\n const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0);\n years = isOneFurtherInYear ? diffYears - sign : diffYears;\n }\n const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n // Now we have less than one year remaining. Add one month at a time\n // until we go over the target, then back up one month and calculate\n // remaining days and weeks.\n let current;\n let next = yearsAdded;\n do {\n months += sign;\n current = next;\n next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n if (next.day !== calendarOne.day) {\n // In case the day was constrained down, try to un-constrain it\n next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n }\n } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n months -= sign; // correct for loop above which overshoots by 1\n const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n days = remainingDays;\n break;\n }\n }\n return { years, months, weeks, days };\n }\n daysInMonth(calendarDate, cache) {\n // Add enough days to roll over to the next month. One we're in the next\n // month, we can calculate the length of the current month. NOTE: This\n // algorithm assumes that months are continuous. It would break if a\n // calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So this\n // code should be safe for all ICU calendars.\n const { day } = calendarDate;\n const max = this.maximumMonthLength(calendarDate);\n const min = this.minimumMonthLength(calendarDate);\n // easiest case: we already know the month length if min and max are the same.\n if (min === max)\n return min;\n // Add enough days to get into the next month, without skipping it\n const increment = day <= max - min ? max : min;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIsoDate = this.addDaysIso(isoDate, increment);\n const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n // Now back up to the last day of the original month\n const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n return endOfMonthCalendar.day;\n }\n daysInPreviousMonth(calendarDate, cache) {\n const { day, month, year } = calendarDate;\n // Check to see if we already know the month length, and return it if so\n const previousMonthYear = month > 1 ? year : year - 1;\n let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n previousMonthDate = { ...previousMonthDate, month: previousMonth };\n const min = this.minimumMonthLength(previousMonthDate);\n const max = this.maximumMonthLength(previousMonthDate);\n if (min === max)\n return max;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n return lastDayOfPreviousMonthCalendar.day;\n }\n startOfCalendarYear(calendarDate) {\n return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n }\n startOfCalendarMonth(calendarDate) {\n return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n }\n calendarDaysUntil(calendarOne, calendarTwo, cache) {\n const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n return this.isoDaysUntil(oneIso, twoIso);\n }\n isoDaysUntil(oneIso, twoIso) {\n const duration = ES.DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day');\n return duration.days;\n }\n monthDayFromFields(fields, overflow, cache) {\n let { year, month, monthCode, day, era, eraYear } = fields;\n if (monthCode === undefined) {\n if (year === undefined && (era === undefined || eraYear === undefined)) {\n throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required');\n }\n ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow));\n }\n let isoYear, isoMonth, isoDay;\n let closestCalendar, closestIso;\n // Look backwards starting from the calendar year of 1972-01-01 up to 100\n // calendar years to find a year that has this month and day. Normal months\n // and days will match immediately, but for leap days and leap months we may\n // have to look for a while.\n const startDateIso = { year: 1972, month: 1, day: 1 };\n const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache);\n for (let i = 0; i < 100; i++) {\n const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache);\n const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n return { month: isoMonth, day: isoDay, year: isoYear };\n }\n else if (overflow === 'constrain') {\n // non-ISO constrain algorithm tries to find the closest date in a matching month\n if (closestCalendar === undefined ||\n (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n roundTripCalendarDate.day > closestCalendar.day)) {\n closestCalendar = roundTripCalendarDate;\n closestIso = isoDate;\n }\n }\n }\n if (overflow === 'constrain' && closestIso !== undefined)\n return closestIso;\n throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n }\n}\nclass HebrewHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'hebrew';\n this.calendarType = 'lunisolar';\n this.months = {\n Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n };\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate) {\n const { year } = calendarDate;\n // FYI: In addition to adding a month in leap years, the Hebrew calendar\n // also has per-year changes to the number of days of Heshvan and Kislev.\n // Given that these can be calculated by counting the number of days in\n // those months, I assume that these DO NOT need to be exposed as\n // Hebrew-only prototype fields or methods.\n return (7 * year + 1) % 19 < 7;\n }\n monthsInYear(calendarDate) {\n return this.inLeapYear(calendarDate) ? 13 : 12;\n }\n minimumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'min');\n }\n maximumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'max');\n }\n minMaxMonthLength(calendarDate, minOrMax) {\n const { month, year } = calendarDate;\n const monthCode = this.getMonthCode(year, month);\n const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n if (monthInfo === undefined)\n throw new RangeError(`unmatched Hebrew month: ${month}`);\n const daysInMonth = monthInfo[1].days;\n return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n }\n /** Take a guess at what ISO date a particular calendar date corresponds to */\n estimateIsoDate(calendarDate) {\n const { year } = calendarDate;\n return { year: year - 3760, month: 1, day: 1 };\n }\n getMonthCode(year, month) {\n if (this.inLeapYear({ year })) {\n return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n }\n else {\n return buildMonthCode(month);\n }\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n // The incoming type is actually CalendarDate (same as args to\n // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n // reassignments below, so as an alternative to 10+ type casts, we'll lie\n // here and claim that the type has `day` and `year` filled in already.\n let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate;\n if (year === undefined && eraYear !== undefined)\n year = eraYear;\n if (eraYear === undefined && year !== undefined)\n eraYear = year;\n if (fromLegacyDate) {\n // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n // output returns the numeric equivalent of `month` as a string, meaning\n // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n // means Adar. In this case, `month` will already be correct and no action\n // is needed. However, in Node 14 and later formatToParts returns the name\n // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n // correct `month` using the string name as a key.\n if (monthExtra) {\n const monthInfo = this.months[monthExtra];\n if (!monthInfo)\n throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n }\n // Because we're getting data from legacy Date, then `month` will always be present\n monthCode = this.getMonthCode(year, month);\n const result = { year, month: month, day, era: undefined, eraYear, monthCode };\n return result;\n }\n else {\n // When called without input coming from legacy Date output, simply ensure\n // that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (month === undefined) {\n if (monthCode.endsWith('L')) {\n if (monthCode !== 'M05L') {\n throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n }\n month = 6;\n if (!this.inLeapYear({ year })) {\n if (overflow === 'reject') {\n throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n }\n else {\n // constrain to last day of previous month (Av)\n month = 5;\n day = 30;\n monthCode = 'M05';\n }\n }\n }\n else {\n month = monthCodeNumberPart(monthCode);\n // if leap month is before this one, the month index is one more than the month code\n if (this.inLeapYear({ year }) && month >= 6)\n month++;\n const largestMonth = this.monthsInYear({ year });\n if (month < 1 || month > largestMonth)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n }\n else {\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n else {\n month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n if (monthCode === undefined) {\n monthCode = this.getMonthCode(year, month);\n }\n else {\n const calculatedMonthCode = this.getMonthCode(year, month);\n if (calculatedMonthCode !== monthCode) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n }\n }\n }\n return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear };\n }\n }\n}\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nclass IslamicBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunar';\n this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n this.DAYS_PER_ISO_YEAR = 365.2425;\n this.constantEra = 'ah';\n }\n inLeapYear(calendarDate, cache) {\n // In leap years, the 12th month has 30 days. In non-leap years: 29.\n const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n return days === 30;\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n }\n}\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic';\n }\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-umalqura';\n }\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-tbla';\n }\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-civil';\n }\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-rgsa';\n }\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamicc';\n }\n}\nclass PersianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'persian';\n this.calendarType = 'solar';\n this.constantEra = 'ap';\n }\n inLeapYear(calendarDate, cache) {\n // Same logic (count days in the last month) for Persian as for Islamic,\n // even though Persian is solar and Islamic is lunar.\n return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 29;\n return month <= 6 ? 31 : 30;\n }\n maximumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 30;\n return month <= 6 ? 31 : 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: year + 621, month: 1, day: 1 };\n }\n}\nclass IndianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'indian';\n this.calendarType = 'solar';\n this.constantEra = 'saka';\n // Indian months always start at the same well-known Gregorian month and\n // day. So this conversion is easy and fast. See\n // https://en.wikipedia.org/wiki/Indian_national_calendar\n this.months = {\n 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n 2: { length: 31, month: 4, day: 21 },\n 3: { length: 31, month: 5, day: 22 },\n 4: { length: 31, month: 6, day: 22 },\n 5: { length: 31, month: 7, day: 23 },\n 6: { length: 31, month: 8, day: 23 },\n 7: { length: 30, month: 9, day: 23 },\n 8: { length: 30, month: 10, day: 23 },\n 9: { length: 30, month: 11, day: 22 },\n 10: { length: 30, month: 12, day: 22 },\n 11: { length: 30, month: 1, nextYear: true, day: 21 },\n 12: { length: 30, month: 2, nextYear: true, day: 20 }\n };\n // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n // calendar output to fail for all dates before 0001-01-01 ISO. For example,\n // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n // expected.\n this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n }\n inLeapYear(calendarDate) {\n // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n // Years are counted in the Saka era, which starts its year 0 in the year 78\n // of the Common Era. To determine leap years, add 78 to the Saka year – if\n // the result is a leap year in the Gregorian calendar, then the Saka year\n // is a leap year as well.\n return isGregorianLeapYear(calendarDate.year + 78);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n maximumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n getMonthInfo(calendarDate) {\n const { month } = calendarDate;\n let monthInfo = this.months[month];\n if (monthInfo === undefined)\n throw new RangeError(`Invalid month: ${month}`);\n if (this.inLeapYear(calendarDate) && monthInfo.leap)\n monthInfo = monthInfo.leap;\n return monthInfo;\n }\n estimateIsoDate(calendarDateParam) {\n // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n // calendar fast!\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const monthInfo = this.getMonthInfo(calendarDate);\n const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n const isoMonth = monthInfo.month;\n const isoDay = monthInfo.day;\n const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n return isoDate;\n }\n checkIcuBugs(isoDate) {\n if (this.vulnerableToBceBug && isoDate.year < 1) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n }\n}\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam) {\n let eras = erasParam;\n if (eras.length === 0) {\n throw new RangeError('Invalid era data: eras are required');\n }\n if (eras.length === 1 && eras[0].reverseOf) {\n throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n }\n if (eras.length === 1 && !eras[0].name) {\n throw new RangeError('Invalid era data: at least one named era is required');\n }\n if (eras.filter((e) => e.reverseOf != null).length > 1) {\n throw new RangeError('Invalid era data: only one era can count years backwards');\n }\n // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n // eras can never be anchors. The era without an `anchorEpoch` property is the\n // anchor.\n let anchorEra;\n eras.forEach((e) => {\n if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n if (anchorEra)\n throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n anchorEra = e;\n e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n }\n else if (!e.name) {\n throw new RangeError('If era name is blank, it must be the anchor era');\n }\n });\n // If the era name is undefined, then it's an anchor that doesn't interact\n // with eras at all. For example, Japanese `year` is always the same as ISO\n // `year`. So this \"era\" is the anchor era but isn't used for era matching.\n // Strip it from the list that's returned.\n eras = eras.filter((e) => e.name);\n eras.forEach((e) => {\n // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n // Replace the string-valued \"reverseOf\" property with the actual era object\n // that's reversed.\n const { reverseOf } = e;\n if (reverseOf) {\n const reversedEra = eras.find((era) => era.name === reverseOf);\n if (reversedEra === undefined)\n throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n e.reverseOf = reversedEra;\n e.anchorEpoch = reversedEra.anchorEpoch;\n e.isoEpoch = reversedEra.isoEpoch;\n }\n if (e.anchorEpoch.month === undefined)\n e.anchorEpoch.month = 1;\n if (e.anchorEpoch.day === undefined)\n e.anchorEpoch.day = 1;\n });\n // Ensure that the latest epoch is first in the array. This lets us try to\n // match eras in index order, with the last era getting the remaining older\n // years. Any reverse-signed era must be at the end.\n ArraySort.call(eras, (e1, e2) => {\n if (e1.reverseOf)\n return 1;\n if (e2.reverseOf)\n return -1;\n if (!e1.isoEpoch || !e2.isoEpoch)\n throw new RangeError('Invalid era data: missing ISO epoch');\n return e2.isoEpoch.year - e1.isoEpoch.year;\n });\n // If there's a reversed era, then the one before it must be the era that's\n // being reversed.\n const lastEraReversed = eras[eras.length - 1].reverseOf;\n if (lastEraReversed) {\n if (lastEraReversed !== eras[eras.length - 2])\n throw new RangeError('Invalid era data: invalid reverse-sign era');\n }\n // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n // zero-based index, with the oldest era being zero. This format is used by\n // older versions of ICU data.\n eras.forEach((e, i) => {\n e.genericName = `era${eras.length - 1 - i}`;\n });\n return { eras: eras, anchorEra: (anchorEra || eras[0]) };\n}\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n/** Base for all Gregorian-like calendars. */\nclass GregorianBaseHelper extends HelperBase {\n constructor(id, originalEras) {\n super();\n this.calendarType = 'solar';\n // Several calendars based on the Gregorian calendar use Julian dates (not\n // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n .startsWith('12');\n this.calendarIsVulnerableToJulianBug = false;\n this.id = id;\n const { eras, anchorEra } = adjustEras(originalEras);\n this.anchorEra = anchorEra;\n this.eras = eras;\n }\n inLeapYear(calendarDate) {\n // Calendars that don't override this method use the same months and leap\n // years as Gregorian. Once we know the ISO year corresponding to the\n // calendar year, we'll know if it's a leap year or not.\n const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n return isGregorianLeapYear(year);\n }\n monthsInYear( /* calendarDate */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 2)\n return this.inLeapYear(calendarDate) ? 29 : 28;\n return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n /** Fill in missing parts of the (year, era, eraYear) tuple */\n completeEraYear(calendarDate) {\n const checkField = (name, value) => {\n const currentValue = calendarDate[name];\n if (currentValue != null && currentValue != value) {\n throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n }\n };\n const eraFromYear = (year) => {\n let eraYear;\n const adjustedCalendarDate = { ...calendarDate, year };\n const matchingEra = this.eras.find((e, i) => {\n if (i === this.eras.length - 1) {\n if (e.reverseOf) {\n // This is a reverse-sign era (like BCE) which must be the oldest\n // era. Count years backwards.\n if (year > 0)\n throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n eraYear = e.anchorEpoch.year - year;\n return true;\n }\n // last era always gets all \"leftover\" (older than epoch) years,\n // so no need for a comparison like below.\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n if (comparison >= 0) {\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n return false;\n });\n if (!matchingEra)\n throw new RangeError(`Year ${year} was not matched by any era`);\n return { eraYear: eraYear, era: matchingEra.name };\n };\n let { year, eraYear, era } = calendarDate;\n if (year != null) {\n ({ eraYear, era } = eraFromYear(year));\n checkField('era', era);\n checkField('eraYear', eraYear);\n }\n else if (eraYear != null) {\n const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n if (!matchingEra)\n throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n if (eraYear < 1 && matchingEra.reverseOf) {\n throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n }\n if (matchingEra.reverseOf) {\n year = matchingEra.anchorEpoch.year - eraYear;\n }\n else {\n year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n }\n checkField('year', year);\n // We'll accept dates where the month/day is earlier than the start of\n // the era or after its end as long as it's in the same year. If that\n // happens, we'll adjust the era/eraYear pair to be the correct era for\n // the `year`.\n ({ eraYear, era } = eraFromYear(year));\n }\n else {\n throw new RangeError('Either `year` or `eraYear` and `era` are required');\n }\n return { ...calendarDate, year, eraYear, era };\n }\n adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') {\n let calendarDate = calendarDateParam;\n // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n const { month, monthCode } = calendarDate;\n if (month === undefined)\n calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) };\n this.validateCalendarDate(calendarDate);\n calendarDate = this.completeEraYear(calendarDate);\n return super.adjustCalendarDate(calendarDate, cache, overflow);\n }\n estimateIsoDate(calendarDateParam) {\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const { year, month, day } = calendarDate;\n const { anchorEra } = this;\n const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n }\n checkIcuBugs(isoDate) {\n if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n if (beforeJulianSwitch) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)');\n }\n }\n }\n}\nclass OrthodoxBaseHelper extends GregorianBaseHelper {\n constructor(id, originalEras) {\n super(id, originalEras);\n }\n inLeapYear(calendarDate) {\n // Leap years happen one year before the Julian leap year. Note that this\n // calendar is based on the Julian calendar which has a leap year every 4\n // years, unlike the Gregorian calendar which doesn't have leap years on\n // years divisible by 100 except years divisible by 400.\n //\n // Note that we're assuming that leap years in before-epoch times match\n // how leap years are defined now. This is probably not accurate but I'm\n // not sure how better to do it.\n const { year } = calendarDate;\n return (year + 1) % 4 === 0;\n }\n monthsInYear( /* calendarDate */) {\n return 13;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n if (month === 13)\n return this.inLeapYear(calendarDate) ? 6 : 5;\n return 30;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n}\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n// two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n// zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n constructor() {\n super('coptic', [\n { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n { name: 'era0', reverseOf: 'era1' }\n ]);\n }\n}\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethiopic', [\n { name: 'aa', isoEpoch: { year: -5492, month: 7, day: 17 } },\n { name: 'am', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n ]);\n }\n}\nclass RocHelper extends GregorianBaseHelper {\n constructor() {\n super('roc', [\n { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n { name: 'before-roc', reverseOf: 'minguo' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass BuddhistHelper extends GregorianBaseHelper {\n constructor() {\n super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass GregoryHelper extends GregorianBaseHelper {\n constructor() {\n super('gregory', [\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n }\n reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) {\n let { era, eraYear } = calendarDate;\n // Firefox 96 introduced a bug where the `'short'` format of the era\n // option mistakenly returns the one-letter (narrow) format instead. The\n // code below handles either the correct or Firefox-buggy format. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n if (era === 'bc' || era === 'b')\n era = 'bce';\n if (era === 'ad' || era === 'a')\n era = 'ce';\n return { era, eraYear };\n }\n}\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n// challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n// dates are modified, leading to considerable churn which is not good for\n// Temporal use.\n// - The earliest era (in 645 CE) may not end up being the earliest depending\n// on future historical scholarship\n// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n// that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n constructor() {\n super('japanese', [\n // The Japanese calendar `year` is just the ISO year, because (unlike other\n // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n // The last 3 Japanese eras confusingly return only one character in the\n // default \"short\" era, so need to use the long format.\n this.eraLength = 'long';\n }\n reviseIntlEra(calendarDate, isoDate) {\n const { era, eraYear } = calendarDate;\n const { year: isoYear } = isoDate;\n if (this.eras.find((e) => e.name === era))\n return { era, eraYear };\n return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear });\n }\n}\nclass ChineseBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunisolar';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate, cache) {\n const months = this.getMonthList(calendarDate.year, cache);\n return ObjectEntries(months).length === 13;\n }\n monthsInYear(calendarDate, cache) {\n return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n getMonthList(calendarYear, cache) {\n if (calendarYear === undefined) {\n throw new TypeError('Missing year');\n }\n const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n const getCalendarDate = (isoYear, daysPastFeb1) => {\n const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n const legacyDate = new Date(isoStringFeb1);\n // Now add the requested number of days, which may wrap to the next month.\n legacyDate.setUTCDate(daysPastFeb1 + 1);\n const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value;\n const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value;\n let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear');\n if (calendarYearToVerify !== undefined) {\n calendarYearToVerify = +calendarYearToVerify.value;\n }\n else {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n return { calendarMonthString, calendarDay, calendarYearToVerify };\n };\n // First, find a date close to Chinese New Year. Feb 17 will either be in\n // the first month or near the end of the last month of the previous year.\n let isoDaysDelta = 17;\n let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n // If we didn't guess the first month correctly, add (almost in some months)\n // a lunar month\n if (calendarMonthString !== '1') {\n isoDaysDelta += 29;\n ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n }\n // Now back up to near the start of the first month, but not too near that\n // off-by-one issues matter.\n isoDaysDelta -= calendarDay - 5;\n const result = {};\n let monthIndex = 1;\n let oldCalendarDay;\n let oldMonthString;\n let done = false;\n do {\n ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n if (oldCalendarDay) {\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n }\n if (calendarYearToVerify !== calendarYear) {\n done = true;\n }\n else {\n result[calendarMonthString] = { monthIndex: monthIndex++ };\n // Move to the next month. Because months are sometimes 29 days, the day of the\n // calendar month will move forward slowly but not enough to flip over to a new\n // month before the loop ends at 12-13 months.\n isoDaysDelta += 30;\n }\n oldCalendarDay = calendarDay;\n oldMonthString = calendarMonthString;\n } while (!done);\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n cache.set(key, result);\n return result;\n }\n estimateIsoDate(calendarDate) {\n const { year, month } = calendarDate;\n return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n if (fromLegacyDate) {\n // Legacy Date output returns a string that's an integer with an optional\n // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n // month. Below we'll normalize the output.\n year = eraYear;\n if (monthExtra && monthExtra !== 'bis')\n throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n const monthCode = buildMonthCode(month, monthExtra !== undefined);\n const monthString = `${month}${monthExtra || ''}`;\n const months = this.getMonthList(year, cache);\n const monthInfo = months[monthString];\n if (monthInfo === undefined)\n throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n month = monthInfo.monthIndex;\n return { year: year, month, day: day, era: undefined, eraYear, monthCode };\n }\n else {\n // When called without input coming from legacy Date output,\n // simply ensure that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (year === undefined)\n year = eraYear;\n if (eraYear === undefined)\n eraYear = year;\n if (month === undefined) {\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n let monthInfo = months[numberPart];\n month = monthInfo && monthInfo.monthIndex;\n // If this leap month isn't present in this year, constrain down to the last day of the previous month.\n if (month === undefined &&\n monthCode.endsWith('L') &&\n !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) &&\n overflow === 'constrain') {\n let withoutML = monthCode.slice(1, -1);\n if (withoutML[0] === '0')\n withoutML = withoutML.slice(1);\n monthInfo = months[withoutML];\n if (monthInfo) {\n ({ daysInMonth: day, monthIndex: month } = monthInfo);\n monthCode = buildMonthCode(withoutML);\n }\n }\n if (month === undefined) {\n throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n }\n }\n else if (monthCode === undefined) {\n const months = this.getMonthList(year, cache);\n const monthEntries = ObjectEntries(months);\n const largestMonth = monthEntries.length;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength());\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n }\n const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n if (matchingMonthEntry === undefined) {\n throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n }\n monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1);\n }\n else {\n // Both month and monthCode are present. Make sure they don't conflict.\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n const monthInfo = months[numberPart];\n if (!monthInfo)\n throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n if (month !== monthInfo.monthIndex) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n }\n }\n return {\n ...calendarDate,\n year: year,\n eraYear,\n month,\n monthCode: monthCode,\n day: day\n };\n }\n }\n}\nclass ChineseHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'chinese';\n }\n}\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'dangi';\n }\n}\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nconst nonIsoImpl = {\n // `helper` is added when this object is spread into each calendar's\n // implementation\n helper: undefined,\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n const result = ES.CreateTemporalDate(year, month, day, calendar);\n cache.setObject(result);\n return result;\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []);\n const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n const result = ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day);\n cache.setObject(result);\n return result;\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n // All built-in calendars require `day`, but some allow other fields to be\n // substituted for `month`. And for lunisolar calendars, either `monthCode`\n // or `year` must be provided because `month` is ambiguous without a year or\n // a code.\n const cache = new OneObjectCache();\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n // `year` is a reference year where this month/day exists in this calendar\n const result = ES.CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year);\n cache.setObject(result);\n return result;\n },\n fields(fieldsParam) {\n let fields = fieldsParam;\n if (ArrayIncludes.call(fields, 'year'))\n fields = [...fields, 'era', 'eraYear'];\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const fieldsCopy = { ...fields };\n const additionalFieldsCopy = { ...additionalFields };\n // era and eraYear are intentionally unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy;\n const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy;\n if (newMonth === undefined && newMonthCode === undefined) {\n original.month = month;\n original.monthCode = monthCode;\n }\n if (newYear === undefined && newEra === undefined && newEraYear === undefined) {\n // Only `year` is needed. We don't set era and eraYear because it's\n // possible to create a conflict for eras that start or end mid-year. See\n // https://github.com/tc39/proposal-temporal/issues/1784.\n original.year = year;\n }\n return { ...original, ...additionalFieldsCopy };\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n const { year, month, day } = isoAdded;\n const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendar);\n // The new object's cache starts with the cache of the old object\n const newCache = new OneObjectCache(cache);\n newCache.setObject(newTemporalObject);\n return newTemporalObject;\n },\n dateUntil(one, two, largestUnit) {\n const cacheOne = OneObjectCache.getCacheForObject(one);\n const cacheTwo = OneObjectCache.getCacheForObject(two);\n const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n return result;\n },\n year(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.year;\n },\n month(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.month;\n },\n day(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.day;\n },\n era(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.era;\n },\n eraYear(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.eraYear;\n },\n monthCode(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.monthCode;\n },\n dayOfWeek(date) {\n return impl['iso8601'].dayOfWeek(date);\n },\n dayOfYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.isoToCalendarDate(date, cache);\n const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n return diffDays + 1;\n },\n weekOfYear(date) {\n return impl['iso8601'].weekOfYear(date);\n },\n daysInWeek(date) {\n return impl['iso8601'].daysInWeek(date);\n },\n daysInMonth(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n // Easy case: if the helper knows the length without any heavy calculation.\n const max = this.helper.maximumMonthLength(calendarDate);\n const min = this.helper.minimumMonthLength(calendarDate);\n if (max === min)\n return max;\n // The harder case is where months vary every year, e.g. islamic calendars.\n // Find the answer by calculating the difference in days between the first\n // day of the current month and the first day of the next month.\n const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n return result;\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n return result;\n },\n monthsInYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.monthsInYear(calendarDate, cache);\n return result;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.inLeapYear(calendarDate, cache);\n return result;\n }\n};\nfor (const Helper of [\n HebrewHelper,\n PersianHelper,\n EthiopicHelper,\n EthioaaHelper,\n CopticHelper,\n ChineseHelper,\n DangiHelper,\n RocHelper,\n IndianHelper,\n BuddhistHelper,\n GregoryHelper,\n JapaneseHelper,\n IslamicHelper,\n IslamicUmalquraHelper,\n IslamicTblaHelper,\n IslamicCivilHelper,\n IslamicRgsaHelper,\n IslamicCcHelper\n]) {\n const helper = new Helper();\n // Clone the singleton non-ISO implementation that's the same for all\n // calendars. The `helper` property contains per-calendar logic.\n impl[helper.id] = { ...nonIsoImpl, helper };\n}\n//# sourceMappingURL=calendar.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDate {\n constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalDateSlots. This check\n // exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get year() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateFromFields(calendar, fields, options);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n }\n add(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.ToTemporalDuration(temporalDurationLike);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n subtract(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDate(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalDateToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n }\n toPlainDateTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n let timeZone, temporalTime;\n if (ES.IsObject(item)) {\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n // The cast below is needed because it's possible here for\n // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`,\n // not a TimeZoneProtocol.\n // TODO: should we check for that shape to improve on the (bad) error\n // message that the caller will get from ToTemporalTimeZone?\n timeZone = ES.ToTemporalTimeZone(item);\n }\n else {\n timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n temporalTime = item.plainTime;\n }\n }\n else {\n timeZone = ES.ToTemporalTimeZone(item);\n }\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0;\n if (temporalTime !== undefined) {\n temporalTime = ES.ToTemporalTime(temporalTime);\n hour = GetSlot(temporalTime, ISO_HOUR);\n minute = GetSlot(temporalTime, ISO_MINUTE);\n second = GetSlot(temporalTime, ISO_SECOND);\n millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n }\n const dt = ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDate(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDate(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n//# sourceMappingURL=plaindate.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDateTime {\n constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const hour = ES.ToIntegerThrowOnInfinity(hourParam);\n const minute = ES.ToIntegerThrowOnInfinity(minuteParam);\n const second = ES.ToIntegerThrowOnInfinity(secondParam);\n const millisecond = ES.ToIntegerThrowOnInfinity(millisecondParam);\n const microsecond = ES.ToIntegerThrowOnInfinity(microsecondParam);\n const nanosecond = ES.ToIntegerThrowOnInfinity(nanosecondParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get year() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get hour() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike);\n const options = ES.GetOptionsObject(optionsParam);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const props = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-time-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n let year = GetSlot(this, ISO_YEAR);\n let month = GetSlot(this, ISO_MONTH);\n let day = GetSlot(this, ISO_DAY);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDateTime(otherParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const showCalendar = ES.ToShowCalendarOption(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n }\n toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation);\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n toPlainDate() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n toPlainTime() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(this);\n }\n getISOFields() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDateTime(oneParam);\n const two = ES.ToTemporalDateTime(twoParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n//# sourceMappingURL=plaindatetime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class Duration {\n constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) {\n const years = ES.ToIntegerWithoutRounding(yearsParam);\n const months = ES.ToIntegerWithoutRounding(monthsParam);\n const weeks = ES.ToIntegerWithoutRounding(weeksParam);\n const days = ES.ToIntegerWithoutRounding(daysParam);\n const hours = ES.ToIntegerWithoutRounding(hoursParam);\n const minutes = ES.ToIntegerWithoutRounding(minutesParam);\n const seconds = ES.ToIntegerWithoutRounding(secondsParam);\n const milliseconds = ES.ToIntegerWithoutRounding(millisecondsParam);\n const microseconds = ES.ToIntegerWithoutRounding(microsecondsParam);\n const nanoseconds = ES.ToIntegerWithoutRounding(nanosecondsParam);\n ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n CreateSlots(this);\n SetSlot(this, YEARS, years);\n SetSlot(this, MONTHS, months);\n SetSlot(this, WEEKS, weeks);\n SetSlot(this, DAYS, days);\n SetSlot(this, HOURS, hours);\n SetSlot(this, MINUTES, minutes);\n SetSlot(this, SECONDS, seconds);\n SetSlot(this, MILLISECONDS, milliseconds);\n SetSlot(this, MICROSECONDS, microseconds);\n SetSlot(this, NANOSECONDS, nanoseconds);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get years() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, YEARS);\n }\n get months() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MONTHS);\n }\n get weeks() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, WEEKS);\n }\n get days() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, DAYS);\n }\n get hours() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, HOURS);\n }\n get minutes() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MINUTES);\n }\n get seconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, SECONDS);\n }\n get milliseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MILLISECONDS);\n }\n get microseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MICROSECONDS);\n }\n get nanoseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, NANOSECONDS);\n }\n get sign() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS));\n }\n get blank() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return (ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0);\n }\n with(durationLike) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const props = ES.PrepareTemporalFields(durationLike, \n // NOTE: Field order here is important.\n [\n 'days',\n 'hours',\n 'microseconds',\n 'milliseconds',\n 'minutes',\n 'months',\n 'nanoseconds',\n 'seconds',\n 'weeks',\n 'years'\n ], 'partial');\n if (!props) {\n throw new TypeError('invalid duration-like');\n }\n const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props;\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n negated() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.CreateNegatedTemporalDuration(this);\n }\n abs() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS)));\n }\n add(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n }\n subtract(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n let defaultLargestUnit = ES.DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n let smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined);\n let smallestUnitPresent = true;\n if (!smallestUnit) {\n smallestUnitPresent = false;\n smallestUnit = 'nanosecond';\n }\n defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']);\n let largestUnitPresent = true;\n if (!largestUnit) {\n largestUnitPresent = false;\n largestUnit = defaultLargestUnit;\n }\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (!smallestUnitPresent && !largestUnitPresent) {\n throw new RangeError('at least one of smallestUnit or largestUnit is required');\n }\n if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const roundingIncrement = ES.ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let relativeTo = ES.ToRelativeTemporalObject(options);\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n relativeTo = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo));\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n total(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n if (optionsParam === undefined)\n throw new TypeError('options argument is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('unit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n // Convert larger units down to days\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n let intermediate;\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate));\n // Finally, truncate to the correct unit and calculate remainder\n const { total } = ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo);\n return total;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n if (precision === 'minute')\n throw new RangeError('smallestUnit must not be \"minute\"');\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDurationToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') {\n return new Intl.DurationFormat(locales, options).format(this);\n }\n console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n return ES.TemporalDurationToString(this);\n }\n valueOf() {\n throw new TypeError('use compare() to compare Temporal.Duration');\n }\n static from(item) {\n if (ES.IsTemporalDuration(item)) {\n return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS));\n }\n return ES.ToTemporalDuration(item);\n }\n static compare(oneParam, twoParam, optionsParam = undefined) {\n const one = ES.ToTemporalDuration(oneParam);\n const two = ES.ToTemporalDuration(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n const y1 = GetSlot(one, YEARS);\n const mon1 = GetSlot(one, MONTHS);\n const w1 = GetSlot(one, WEEKS);\n let d1 = GetSlot(one, DAYS);\n const h1 = GetSlot(one, HOURS);\n const min1 = GetSlot(one, MINUTES);\n const s1 = GetSlot(one, SECONDS);\n const ms1 = GetSlot(one, MILLISECONDS);\n const µs1 = GetSlot(one, MICROSECONDS);\n let ns1 = GetSlot(one, NANOSECONDS);\n const y2 = GetSlot(two, YEARS);\n const mon2 = GetSlot(two, MONTHS);\n const w2 = GetSlot(two, WEEKS);\n let d2 = GetSlot(two, DAYS);\n const h2 = GetSlot(two, HOURS);\n const min2 = GetSlot(two, MINUTES);\n const s2 = GetSlot(two, SECONDS);\n const ms2 = GetSlot(two, MILLISECONDS);\n const µs2 = GetSlot(two, MICROSECONDS);\n let ns2 = GetSlot(two, NANOSECONDS);\n const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n }\n const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n//# sourceMappingURL=duration.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainMonthDay {\n constructor(isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar(), referenceISOYearParam = 1972) {\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISOYear = ES.ToIntegerThrowOnInfinity(referenceISOYearParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoMonth and isoDay are required');\n }\n ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n }\n get monthCode() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n with(temporalMonthDayLike, optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalMonthDayLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid month-day-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarMonthDayFromFields(calendar, fields, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalMonthDay(otherParam);\n for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalMonthDayToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalMonthDayToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['year']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalMonthDay(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR));\n }\n return ES.ToTemporalMonthDay(item, options);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n//# sourceMappingURL=plainmonthday.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nconst instant = () => {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.GetISO8601Calendar();\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return zonedDateTime(ES.GetISO8601Calendar(), temporalTimeZoneLike);\n};\nconst plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZone = () => {\n return ES.SystemTimeZone();\n};\nexport const Now = {\n instant,\n plainDateTime,\n plainDateTimeISO,\n plainDate,\n plainDateISO,\n plainTimeISO,\n timeZone,\n zonedDateTime,\n zonedDateTimeISO,\n [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n value: 'Temporal.Now',\n writable: false,\n enumerable: false,\n configurable: true\n});\n//# sourceMappingURL=now.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectAssign = Object.assign;\nfunction TemporalTimeToString(time, precision, options = undefined) {\n let hour = GetSlot(time, ISO_HOUR);\n let minute = GetSlot(time, ISO_MINUTE);\n let second = GetSlot(time, ISO_SECOND);\n let millisecond = GetSlot(time, ISO_MILLISECOND);\n let microsecond = GetSlot(time, ISO_MICROSECOND);\n let nanosecond = GetSlot(time, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const hourString = ES.ISODateTimePartString(hour);\n const minuteString = ES.ISODateTimePartString(minute);\n const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n return `${hourString}:${minuteString}${seconds}`;\n}\nexport class PlainTime {\n constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) {\n const isoHour = ES.ToIntegerThrowOnInfinity(isoHourParam);\n const isoMinute = ES.ToIntegerThrowOnInfinity(isoMinuteParam);\n const isoSecond = ES.ToIntegerThrowOnInfinity(isoSecondParam);\n const isoMillisecond = ES.ToIntegerThrowOnInfinity(isoMillisecondParam);\n const isoMicrosecond = ES.ToIntegerThrowOnInfinity(isoMicrosecondParam);\n const isoNanosecond = ES.ToIntegerThrowOnInfinity(isoNanosecondParam);\n ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n CreateSlots(this);\n SetSlot(this, ISO_HOUR, isoHour);\n SetSlot(this, ISO_MINUTE, isoMinute);\n SetSlot(this, ISO_SECOND, isoSecond);\n SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n SetSlot(this, CALENDAR, ES.GetISO8601Calendar());\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get calendar() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n // PlainTime's calendar isn't settable, so can't be a userland calendar\n return GetSlot(this, CALENDAR);\n }\n get hour() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n with(temporalTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalTimeLike);\n const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const fields = ES.ToTemporalTimeRecord(this);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n equals(otherParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalTime(otherParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return true;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return TemporalTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n }\n toPlainDateTime(temporalDateParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument');\n }\n const dateLike = item.plainDate;\n if (dateLike === undefined) {\n throw new TypeError('missing date property');\n }\n const temporalDate = ES.ToTemporalDate(dateLike);\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n throw new TypeError('missing timeZone property');\n }\n const timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n getISOFields() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n if (ES.IsTemporalTime(item)) {\n return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n return ES.ToTemporalTime(item, overflow);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalTime(oneParam);\n const two = ES.ToTemporalTime(twoParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n//# sourceMappingURL=plaintime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { TIMEZONE_ID, EPOCHNANOSECONDS, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class TimeZone {\n constructor(timeZoneIdentifierParam) {\n // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n // This check exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: identifier is required');\n }\n const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n CreateSlots(this);\n SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n getOffsetNanosecondsFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n return ES.ParseTimeZoneOffsetString(id);\n }\n return ES.GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id);\n }\n getOffsetStringFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n return ES.BuiltinTimeZoneGetOffsetStringFor(this, instant);\n }\n getPlainDateTimeFor(instantParam, calendarParam = ES.GetISO8601Calendar()) {\n const instant = ES.ToTemporalInstant(instantParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar);\n }\n getInstantFor(dateTimeParam, optionsParam = undefined) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n return ES.BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation);\n }\n getPossibleInstantsFor(dateTimeParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n const epochNs = ES.GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n const offsetNs = ES.ParseTimeZoneOffsetString(id);\n return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n }\n const possibleEpochNs = ES.GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n return possibleEpochNs.map((ns) => new Instant(ns));\n }\n getNextTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZoneNextTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n getPreviousTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZonePreviousTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n toString() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(GetSlot(this, TIMEZONE_ID));\n }\n toJSON() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalTimeZone(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\n//# sourceMappingURL=timezone.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainYearMonth {\n constructor(isoYearParam, isoMonthParam, calendarParam = ES.GetISO8601Calendar(), referenceISODayParam = 1) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISODay = ES.ToIntegerThrowOnInfinity(referenceISODayParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoYear and isoMonth are required');\n }\n ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n }\n get year() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalYearMonthLike, optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalYearMonthLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid year-month-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarYearMonthFromFields(calendar, fields, options);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalYearMonth(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalYearMonthToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalYearMonthToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['day']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalYearMonth(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY));\n }\n return ES.ToTemporalYearMonth(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalYearMonth(oneParam);\n const two = ES.ToTemporalYearMonth(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n//# sourceMappingURL=plainyearmonth.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { CALENDAR, EPOCHNANOSECONDS, ISO_HOUR, INSTANT, ISO_DAY, ISO_MONTH, ISO_YEAR, ISO_MICROSECOND, ISO_MILLISECOND, ISO_MINUTE, ISO_NANOSECOND, ISO_SECOND, TIME_ZONE, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO } from './ecmascript';\nexport class ZonedDateTime {\n constructor(epochNanosecondsParam, timeZoneParam, calendarParam = ES.GetISO8601Calendar()) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n // ToTemporalTimeZone(undefined) will end up calling TimeZone.from(\"undefined\"), which\n // could succeed.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get timeZone() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, TIME_ZONE);\n }\n get year() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get month() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthCode() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n }\n get day() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hour() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n }\n get eraYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get epochSeconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n }\n get dayOfWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get dayOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get weekOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hoursInDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const year = GetSlot(dt, ISO_YEAR);\n const month = GetSlot(dt, ISO_MONTH);\n const day = GetSlot(dt, ISO_DAY);\n const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n const timeZone = GetSlot(this, TIME_ZONE);\n const todayNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n const tomorrowNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12;\n }\n get daysInWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthsInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get inLeapYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get offset() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n get offsetNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n with(temporalZonedDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalZonedDateTimeLike)) {\n throw new TypeError('invalid zoned-date-time-like');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike);\n // TODO: Reorder according to spec.\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const offset = ES.ToTemporalOffset(options, 'prefer');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldsWithOffset = ES.ArrayPush(fieldNames, 'offset');\n const props = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial');\n const fieldsWithTimeZoneAndOffset = ES.ArrayPush(fieldsWithOffset, 'timeZone');\n let fields = ES.PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const thisDt = dateTime(this);\n const hour = GetSlot(thisDt, ISO_HOUR);\n const minute = GetSlot(thisDt, ISO_MINUTE);\n const second = GetSlot(thisDt, ISO_SECOND);\n const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n const thisDt = dateTime(this);\n const year = GetSlot(thisDt, ISO_YEAR);\n const month = GetSlot(thisDt, ISO_MONTH);\n const day = GetSlot(thisDt, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withTimeZone(timeZoneParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n // first, round the underlying DateTime fields\n const dt = dateTime(this);\n let year = GetSlot(dt, ISO_YEAR);\n let month = GetSlot(dt, ISO_MONTH);\n let day = GetSlot(dt, ISO_DAY);\n let hour = GetSlot(dt, ISO_HOUR);\n let minute = GetSlot(dt, ISO_MINUTE);\n let second = GetSlot(dt, ISO_SECOND);\n let millisecond = GetSlot(dt, ISO_MILLISECOND);\n let microsecond = GetSlot(dt, ISO_MICROSECOND);\n let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n const instantStart = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n if (JSBI.equal(dayLengthNs, ZERO)) {\n throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days');\n }\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, \n // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n // (which can hold up to 104 days in nanoseconds)\n JSBI.toNumber(dayLengthNs)));\n // Now reset all DateTime fields but leave the TimeZone. The offset will\n // also be retained if the new date/time values are still OK with the old\n // offset. Otherwise the offset will be changed to be compatible with the\n // new date/time values. If DST disambiguation is required, the `compatible`\n // disambiguation algorithm will be used.\n const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalZonedDateTime(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)))\n return false;\n if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE)))\n return false;\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const showCalendar = ES.ToShowCalendarOption(options);\n const showTimeZone = ES.ToShowTimeZoneNameOption(options);\n const showOffset = ES.ToShowOffsetOption(options);\n return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n unit,\n increment,\n roundingMode\n });\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n toJSON() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalZonedDateTimeToString(this, 'auto');\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n }\n startOfDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toInstant() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n }\n toPlainDate() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(dateTime(this));\n }\n toPlainTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(dateTime(this));\n }\n toPlainDateTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return dateTime(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const tz = GetSlot(this, TIME_ZONE);\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(dt, ISO_DAY),\n isoHour: GetSlot(dt, ISO_HOUR),\n isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n isoMinute: GetSlot(dt, ISO_MINUTE),\n isoMonth: GetSlot(dt, ISO_MONTH),\n isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n isoSecond: GetSlot(dt, ISO_SECOND),\n isoYear: GetSlot(dt, ISO_YEAR),\n offset: ES.BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n timeZone: tz\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalZonedDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n ES.ToTemporalDisambiguation(options);\n ES.ToTemporalOffset(options, 'reject');\n return ES.CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalZonedDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalZonedDateTime(oneParam);\n const two = ES.ToTemporalZonedDateTime(twoParam);\n const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return -1;\n if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\nfunction dateTime(zdt) {\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n//# sourceMappingURL=zoneddatetime.js.map","import { Instant } from './instant';\nimport JSBI from 'jsbi';\nimport * as ES from './ecmascript';\nimport { MILLION } from './ecmascript';\nexport function toTemporalInstant() {\n // Observable access to valueOf is not correct here, but unavoidable\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n return new Instant(ES.ToBigInt(epochNanoseconds));\n}\n//# sourceMappingURL=legacydate.js.map","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n Temporal.Instant,\n Temporal.Calendar,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.Duration,\n Temporal.PlainMonthDay,\n // Temporal.Now, // plain object (not a constructor), so no `prototype`\n Temporal.PlainTime,\n Temporal.TimeZone,\n Temporal.PlainYearMonth,\n Temporal.ZonedDateTime\n];\nfor (const type of types) {\n const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype');\n if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n descriptor.configurable = false;\n descriptor.enumerable = false;\n descriptor.writable = false;\n Object.defineProperty(type, 'prototype', descriptor);\n }\n}\nexport { Temporal, Intl, toTemporalInstant };\n//# sourceMappingURL=index.js.map"],"names":["ArrayIncludes","ArrayPrototypePush","IntlDateTimeFormat","MathAbs","MathFloor","ObjectAssign","ObjectCreate","ReflectApply","PARSE.zoneddatetime","PARSE.time","PARSE.yearmonth","PARSE.monthday","PARSE.duration","PARSE.offset","ES.ToTemporalTimeZone","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","ES.BuiltinTimeZoneGetInstantFor","ES.ToString","ES.ToBigInt","ES.ValidateEpochNanoseconds","ES.TemporalInstantToString","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","ES.DifferenceTemporalInstant","ES.CreateOnePropObject","ES.GetOptionsObject","ES.GetTemporalUnit","ES.REQUIRED","ES.ToTemporalRoundingMode","ES.ToTemporalRoundingIncrement","ES.RoundInstant","ES.ToTemporalInstant","ES.ToSecondsStringPrecision","ES.IsObject","ES.ToTemporalCalendar","ES.CreateTemporalZonedDateTime","ES.GetISO8601Calendar","ES.ToNumber","ES.IsBuiltinCalendar","ES.IsTemporalCalendar","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","ES.CreateTemporalMonthDay","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","ES.RejectToRange","ES.ConstrainToRange","ES.ISOYearString","ES.ISODateTimePartString","ES.ComparisonResult","ES.CompareISODate","ES.ToIntegerThrowOnInfinity","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","ES.RejectObjectWithCalendarOrTimeZone","ES.CalendarFields","ES.CalendarMergeFields","ES.CalendarDateFromFields","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","ES.CalendarEquals","ES.ToShowCalendarOption","ES.TemporalDateToString","ES.CreateTemporalDateTime","ES.ToTemporalTime","ES.CalendarYearMonthFromFields","ES.CalendarMonthDayFromFields","ES.CreateTemporalDateTimeSlots","ES.InterpretTemporalDateTimeFields","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","ES.TemporalDateTimeToDate","ES.TemporalDateTimeToTime","ES.ToIntegerWithoutRounding","ES.RejectDuration","ES.TemporalDurationToString","ES.IsTemporalDuration","ES.DurationSign","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","ES.LargerOfTwoTemporalUnits","ES.ToTemporalDateTimeRoundingIncrement","ES.ToRelativeTemporalObject","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.CalculateOffsetShift","ES.TotalDurationNanoseconds","ES.CreateTemporalMonthDaySlots","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","ES.SystemUTCEpochNanoSeconds","ES.BuiltinTimeZoneGetPlainDateTimeFor","ES.SystemTimeZone","ES.RoundTime","ES.FormatSecondsStringPart","ES.RejectTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","ES.GetCanonicalTimeZoneIdentifier","ES.IsTemporalTimeZone","ES.TestTimeZoneOffsetString","ES.ParseTimeZoneOffsetString","ES.GetIANATimeZoneOffsetNanoseconds","ES.BuiltinTimeZoneGetOffsetStringFor","ES.GetEpochFromISOParts","ES.GetIANATimeZoneEpochValue","ES.GetIANATimeZoneNextTransition","ES.GetIANATimeZonePreviousTransition","ES.CreateTemporalYearMonthSlots","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ES.CreateTemporalZonedDateTimeSlots","ES.GetOffsetNanosecondsFor","ES.ToTemporalOffset","ES.ArrayPush","ES.InterpretISODateTimeOffset","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.ToShowTimeZoneNameOption","ES.ToShowOffsetOption","ES.TemporalZonedDateTimeToString","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.PlainTime","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@js-temporal/polyfill/dist/index.umd.js b/node_modules/@js-temporal/polyfill/dist/index.umd.js +index 554478f..7497d4c 100644 +--- a/node_modules/@js-temporal/polyfill/dist/index.umd.js ++++ b/node_modules/@js-temporal/polyfill/dist/index.umd.js +@@ -1,2 +1,15028 @@ +-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).temporal={})}(this,(function(e){"use strict";function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _objectSpread2(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _possibleConstructorReturn(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(e)}function _createSuper(e){var t=_isNativeReflectConstruct();return function _createSuperInternal(){var r,n=_getPrototypeOf(e);if(t){var o=_getPrototypeOf(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return _possibleConstructorReturn(this,r)}}function _superPropBase(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=_getPrototypeOf(e)););return e}function _get(){return(_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(e,t,r){var n=_superPropBase(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(arguments.length<3?e:r):o.value}}).apply(this,arguments)}function _slicedToArray(e,t){return function _arrayWithHoles(e){if(Array.isArray(e))return e}(e)||function _iterableToArrayLimit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,a=[],i=!0,l=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(l)throw o}}return a}(e,t)||_unsupportedIterableToArray(e,t)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _toConsumableArray(e){return function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}(e)||function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||_unsupportedIterableToArray(e)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==r.return||r.return()}finally{if(i)throw o}}}}var t=function(e){_inherits(JSBI,e);var t=_createSuper(JSBI);function JSBI(e,r){var n;if(_classCallCheck(this,JSBI),(n=t.call(this,e)).sign=r,Object.setPrototypeOf(_assertThisInitialized(n),JSBI.prototype),e>JSBI.__kMaxLength)throw new RangeError("Maximum BigInt size exceeded");return _possibleConstructorReturn(n)}return _createClass(JSBI,[{key:"toDebugString",value:function toDebugString(){var e,t=["BigInt["],r=_createForOfIteratorHelper(this);try{for(r.s();!(e=r.n()).done;){var n=e.value;t.push((n?(n>>>0).toString(16):n)+", ")}}catch(e){r.e(e)}finally{r.f()}return t.push("]"),t.join("")}},{key:"toString",value:function toString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;if(2>e||36this.length&&(r=this.length);for(var n=32767&e,o=e>>>15,a=0,i=t,l=0;l>>15,d=JSBI.__imul(u,n),m=JSBI.__imul(u,o),h=JSBI.__imul(c,n),f=i+d+a;a=f>>>30,f&=1073741823,a+=(f+=((32767&m)<<15)+((32767&h)<<15))>>>30,i=JSBI.__imul(c,o)+(m>>>15)+(h>>>15),this.__setDigit(l,1073741823&f)}if(0!=a||0!==i)throw new Error("implementation bug")}},{key:"__inplaceAdd",value:function __inplaceAdd(e,t,r){for(var n=0,o=0;o>>15,this.__setHalfDigit(t+o,32767&a)}return n}},{key:"__inplaceSub",value:function __inplaceSub(e,t,r){var n=0;if(1&t){t>>=1;for(var o=this.__digit(t),a=32767&o,i=0;i>>1;i++){var l=e.__digit(i),s=(o>>>15)-(32767&l)-n;n=1&s>>>15,this.__setDigit(t+i,(32767&s)<<15|32767&a),n=1&(a=(32767&(o=this.__digit(t+i+1)))-(l>>>15)-n)>>>15}var u=e.__digit(i),c=(o>>>15)-(32767&u)-n;if(n=1&c>>>15,this.__setDigit(t+i,(32767&c)<<15|32767&a),t+i+1>=this.length)throw new RangeError("out of bounds");0==(1&r)&&(n=1&(a=(32767&(o=this.__digit(t+i+1)))-(u>>>15)-n)>>>15,this.__setDigit(t+e.length,1073709056&o|32767&a))}else{t>>=1;for(var d=0;d>>15)-(h>>>15)-(n=1&f>>>15);n=1&v>>>15,this.__setDigit(t+d,(32767&v)<<15|32767&f)}var T=this.__digit(t+d),p=e.__digit(d),y=(32767&T)-(32767&p)-n;n=1&y>>>15;var g=0;0==(1&r)&&(n=1&(g=(T>>>15)-(p>>>15)-n)>>>15),this.__setDigit(t+d,(32767&g)<<15|32767&y)}return n}},{key:"__inplaceRightShift",value:function __inplaceRightShift(e){if(0!==e){for(var t=this.__digit(0)>>>e,r=this.length-1,n=0;n>>e}this.__setDigit(r,t)}}},{key:"__digit",value:function __digit(e){return this[e]}},{key:"__unsignedDigit",value:function __unsignedDigit(e){return this[e]>>>0}},{key:"__setDigit",value:function __setDigit(e,t){this[e]=0|t}},{key:"__setDigitGrow",value:function __setDigitGrow(e,t){this[e]=0|t}},{key:"__halfDigitLength",value:function __halfDigitLength(){var e=this.length;return 32767>=this.__unsignedDigit(e-1)?2*e-1:2*e}},{key:"__halfDigit",value:function __halfDigit(e){return 32767&this[e>>>1]>>>15*(1&e)}},{key:"__setHalfDigit",value:function __setHalfDigit(e,t){var r=e>>>1,n=this.__digit(r),o=1&e?32767&n|t<<15:1073709056&n|32767&t;this.__setDigit(r,o)}}],[{key:"BigInt",value:function BigInt(e){var t=Math.floor,r=Number.isFinite;if("number"==typeof e){if(0===e)return JSBI.__zero();if(JSBI.__isOneDigitInt(e))return 0>e?JSBI.__oneDigit(-e,!0):JSBI.__oneDigit(e,!1);if(!r(e)||t(e)!==e)throw new RangeError("The number "+e+" cannot be converted to BigInt because it is not an integer");return JSBI.__fromDouble(e)}if("string"==typeof e){var n=JSBI.__fromString(e);if(null===n)throw new SyntaxError("Cannot convert "+e+" to a BigInt");return n}if("boolean"==typeof e)return!0===e?JSBI.__oneDigit(1,!1):JSBI.__zero();if("object"==_typeof(e)){if(e.constructor===JSBI)return e;var o=JSBI.__toPrimitive(e);return JSBI.BigInt(o)}throw new TypeError("Cannot convert "+e+" to a BigInt")}},{key:"toNumber",value:function toNumber(e){var t=e.length;if(0===t)return 0;if(1===t){var r=e.__unsignedDigit(0);return e.sign?-r:r}var n=e.__digit(t-1),o=JSBI.__clz30(n),a=30*t-o;if(1024>>=12;var d=u-12,m=12<=u?0:l<<20+u,h=20+u;for(0>>30-d,m=l<>>30-h,h-=30;var f=JSBI.__decideRounding(e,h,s,l);if((1===f||0===f&&1==(1&m))&&(0===(m=m+1>>>0)&&(0!=++c>>>20&&(c=0,1023<++i))))return e.sign?-1/0:1/0;var v=e.sign?-2147483648:0;return i=i+1023<<20,JSBI.__kBitConversionInts[1]=v|i|c,JSBI.__kBitConversionInts[0]=m,JSBI.__kBitConversionDouble[0]}},{key:"unaryMinus",value:function unaryMinus(e){if(0===e.length)return e;var t=e.__copy();return t.sign=!e.sign,t}},{key:"bitwiseNot",value:function bitwiseNot(e){return e.sign?JSBI.__absoluteSubOne(e).__trim():JSBI.__absoluteAddOne(e,!0)}},{key:"exponentiate",value:function exponentiate(e,t){if(t.sign)throw new RangeError("Exponent must be positive");if(0===t.length)return JSBI.__oneDigit(1,!1);if(0===e.length)return e;if(1===e.length&&1===e.__digit(0))return e.sign&&0==(1&t.__digit(0))?JSBI.unaryMinus(e):e;if(1=JSBI.__kMaxLengthBits)throw new RangeError("BigInt too big");if(1===e.length&&2===e.__digit(0)){var n=1+(0|r/30),o=new JSBI(n,e.sign&&0!=(1&r));o.__initializeDigits();var a=1<>=1;0!==r;r>>=1)l=JSBI.multiply(l,l),0!=(1&r)&&(i=null===i?l:JSBI.multiply(i,l));return i}},{key:"multiply",value:function multiply(e,t){if(0===e.length)return e;if(0===t.length)return t;var r=e.length+t.length;30<=e.__clzmsd()+t.__clzmsd()&&r--;var n=new JSBI(r,e.sign!==t.sign);n.__initializeDigits();for(var o=0;oJSBI.__absoluteCompare(e,t))return JSBI.__zero();var r,n=e.sign!==t.sign,o=t.__unsignedDigit(0);if(1===t.length&&32767>=o){if(1===o)return n===e.sign?e:JSBI.unaryMinus(e);r=JSBI.__absoluteDivSmall(e,o,null)}else r=JSBI.__absoluteDivLarge(e,t,!0,!1);return r.sign=n,r.__trim()}},{key:"remainder",value:function remainder(e,t){if(0===t.length)throw new RangeError("Division by zero");if(0>JSBI.__absoluteCompare(e,t))return e;var r=t.__unsignedDigit(0);if(1===t.length&&32767>=r){if(1===r)return JSBI.__zero();var n=JSBI.__absoluteModSmall(e,r);return 0===n?JSBI.__zero():JSBI.__oneDigit(n,e.sign)}var o=JSBI.__absoluteDivLarge(e,t,!1,!0);return o.sign=e.sign,o.__trim()}},{key:"add",value:function add(e,t){var r=e.sign;return r===t.sign?JSBI.__absoluteAdd(e,t,r):0<=JSBI.__absoluteCompare(e,t)?JSBI.__absoluteSub(e,t,r):JSBI.__absoluteSub(t,e,!r)}},{key:"subtract",value:function subtract(e,t){var r=e.sign;return r===t.sign?0<=JSBI.__absoluteCompare(e,t)?JSBI.__absoluteSub(e,t,r):JSBI.__absoluteSub(t,e,!r):JSBI.__absoluteAdd(e,t,r)}},{key:"leftShift",value:function leftShift(e,t){return 0===t.length||0===e.length?e:t.sign?JSBI.__rightShiftByAbsolute(e,t):JSBI.__leftShiftByAbsolute(e,t)}},{key:"signedRightShift",value:function signedRightShift(e,t){return 0===t.length||0===e.length?e:t.sign?JSBI.__leftShiftByAbsolute(e,t):JSBI.__rightShiftByAbsolute(e,t)}},{key:"unsignedRightShift",value:function unsignedRightShift(){throw new TypeError("BigInts have no unsigned right shift; use >> instead")}},{key:"lessThan",value:function lessThan(e,t){return 0>JSBI.__compareToBigInt(e,t)}},{key:"lessThanOrEqual",value:function lessThanOrEqual(e,t){return 0>=JSBI.__compareToBigInt(e,t)}},{key:"greaterThan",value:function greaterThan(e,t){return 0(e=r(e)))throw new RangeError("Invalid value: not (convertible to) a safe integer");if(0===e)return JSBI.__zero();if(e>=JSBI.__kMaxLengthBits)return t;var n=0|(e+29)/30;if(t.length(e=r(e)))throw new RangeError("Invalid value: not (convertible to) a safe integer");if(0===e)return JSBI.__zero();if(t.sign){if(e>JSBI.__kMaxLengthBits)throw new RangeError("BigInt too big");return JSBI.__truncateAndSubFromPowerOfTwo(e,t,!1)}if(e>=JSBI.__kMaxLengthBits)return t;var n=0|(e+29)/30;if(t.length>>o)return t}return JSBI.__truncateToNBits(e,t)}},{key:"ADD",value:function ADD(e,t){if(e=JSBI.__toPrimitive(e),t=JSBI.__toPrimitive(t),"string"==typeof e)return"string"!=typeof t&&(t=t.toString()),e+t;if("string"==typeof t)return e.toString()+t;if(e=JSBI.__toNumeric(e),t=JSBI.__toNumeric(t),JSBI.__isBigInt(e)&&JSBI.__isBigInt(t))return JSBI.add(e,t);if("number"==typeof e&&"number"==typeof t)return e+t;throw new TypeError("Cannot mix BigInt and other types, use explicit conversions")}},{key:"LT",value:function LT(e,t){return JSBI.__compare(e,t,0)}},{key:"LE",value:function LE(e,t){return JSBI.__compare(e,t,1)}},{key:"GT",value:function GT(e,t){return JSBI.__compare(e,t,2)}},{key:"GE",value:function GE(e,t){return JSBI.__compare(e,t,3)}},{key:"EQ",value:function EQ(e,t){for(;;){if(JSBI.__isBigInt(e))return JSBI.__isBigInt(t)?JSBI.equal(e,t):JSBI.EQ(t,e);if("number"==typeof e){if(JSBI.__isBigInt(t))return JSBI.__equalToNumber(t,e);if("object"!=_typeof(t))return e==t;t=JSBI.__toPrimitive(t)}else if("string"==typeof e){if(JSBI.__isBigInt(t))return null!==(e=JSBI.__fromString(e))&&JSBI.equal(e,t);if("object"!=_typeof(t))return e==t;t=JSBI.__toPrimitive(t)}else if("boolean"==typeof e){if(JSBI.__isBigInt(t))return JSBI.__equalToNumber(t,+e);if("object"!=_typeof(t))return e==t;t=JSBI.__toPrimitive(t)}else if("symbol"==_typeof(e)){if(JSBI.__isBigInt(t))return!1;if("object"!=_typeof(t))return e==t;t=JSBI.__toPrimitive(t)}else{if("object"!=_typeof(e))return e==t;if("object"==_typeof(t)&&t.constructor!==JSBI)return e==t;e=JSBI.__toPrimitive(e)}}}},{key:"NE",value:function NE(e,t){return!JSBI.EQ(e,t)}},{key:"__zero",value:function __zero(){return new JSBI(0,!1)}},{key:"__oneDigit",value:function __oneDigit(e,t){var r=new JSBI(1,t);return r.__setDigit(0,e),r}},{key:"__decideRounding",value:function __decideRounding(e,t,r,n){if(0t)o=-t-1;else{if(0===r)return-1;r--,n=e.__digit(r),o=29}var a=1<>>20)-1023,n=1+(0|r/30),o=new JSBI(n,0>e),a=1048575&JSBI.__kBitConversionInts[1]|1048576,i=JSBI.__kBitConversionInts[0],l=r%30,s=0;if(l<20){var u=20-l;s=u+32,t=a>>>u,a=a<<32-u|i>>>u,i<<=32-u}else if(20===l)s=32,t=a,a=i,i=0;else{var c=l-20;s=32-c,t=a<>>32-c,a=i<>>2,a=a<<30|i>>>2,i<<=30):t=0,o.__setDigit(d,t);return o.__trim()}},{key:"__isWhitespace",value:function __isWhitespace(e){return!!(13>=e&&9<=e)||(159>=e?32==e:131071>=e?160==e||5760==e:196607>=e?10>=(e&=131071)||40==e||41==e||47==e||95==e||4096==e:65279==e)}},{key:"__fromString",value:function __fromString(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=0,n=e.length,o=0;if(o===n)return JSBI.__zero();for(var a=e.charCodeAt(o);JSBI.__isWhitespace(a);){if(++o===n)return JSBI.__zero();a=e.charCodeAt(o)}if(43===a){if(++o===n)return null;a=e.charCodeAt(o),r=1}else if(45===a){if(++o===n)return null;a=e.charCodeAt(o),r=-1}if(0===t){if(t=10,48===a){if(++o===n)return JSBI.__zero();if(88===(a=e.charCodeAt(o))||120===a){if(t=16,++o===n)return null;a=e.charCodeAt(o)}else if(79===a||111===a){if(t=8,++o===n)return null;a=e.charCodeAt(o)}else if(66===a||98===a){if(t=2,++o===n)return null;a=e.charCodeAt(o)}}}else if(16===t&&48===a){if(++o===n)return JSBI.__zero();if(88===(a=e.charCodeAt(o))||120===a){if(++o===n)return null;a=e.charCodeAt(o)}}if(0!=r&&10!==t)return null;for(;48===a;){if(++o===n)return JSBI.__zero();a=e.charCodeAt(o)}var i=n-o,l=JSBI.__kMaxBitsPerChar[t],s=JSBI.__kBitsPerCharTableMultiplier-1;if(i>1073741824/l)return null;var u=l*i+s>>>JSBI.__kBitsPerCharTableShift,c=new JSBI(0|(u+29)/30,!1),d=10>t?t:10,m=10>=JSBI.__kBitsPerCharTableShift;var h=[],f=[],v=!1;do{for(var T=0,p=0;;){var y=void 0;if(a-48>>>0>>0>>0>>0>>JSBI.__kBitsPerCharTableShift)/30;c.__inplaceMultiplyAdd(I,S,C)}while(!g)}if(o!==n){if(!JSBI.__isWhitespace(a))return null;for(o++;o>>s-(a-=30))}if(0!==o){if(n>=e.length)throw new Error("implementation bug");e.__setDigit(n++,o)}for(;n>>1)+(85&n))>>>2)+(51&n))>>>4)+(15&n),a=t-1,i=e.__digit(r-1),l=0|(30*r-JSBI.__clz30(i)+o-1)/o;if(e.sign&&l++,268435456>>v,d=30-v;d>=o;)s[u--]=JSBI.__kConversionChars[c&a],c>>>=o,d-=o}var T=(c|i<>>o-d;0!==c;)s[u--]=JSBI.__kConversionChars[c&a],c>>>=o;if(e.sign&&(s[u--]="-"),-1!=u)throw new Error("implementation bug");return s.join("")}},{key:"__toStringGeneric",value:function __toStringGeneric(e,t,r){var n=e.length;if(0===n)return"";if(1===n){var o=e.__unsignedDigit(0).toString(t);return!1===r&&e.sign&&(o="-"+o),o}var a,i,l=30*n-JSBI.__clz30(e.__digit(n-1)),s=JSBI.__kMaxBitsPerChar[t]-1,u=l*JSBI.__kBitsPerCharTableMultiplier,c=(u=0|(u+=s-1)/s)+1>>1,d=JSBI.exponentiate(JSBI.__oneDigit(t,!1),JSBI.__oneDigit(c,!1)),m=d.__unsignedDigit(0);if(1===d.length&&32767>=m){(a=new JSBI(e.length,!1)).__initializeDigits();for(var h=0,f=2*e.length-1;0<=f;f--){var v=h<<15|e.__halfDigit(f);a.__setHalfDigit(f,0|v/m),h=0|v%m}i=h.toString(t)}else{var T=JSBI.__absoluteDivLarge(e,d,!0,!0);a=T.quotient;var p=T.remainder.__trim();i=JSBI.__toStringGeneric(p,t,!0)}a.__trim();for(var y=JSBI.__toStringGeneric(a,t,!0);i.lengthn?JSBI.__absoluteLess(r):0}},{key:"__compareToNumber",value:function __compareToNumber(e,t){if(JSBI.__isOneDigitInt(t)){var r=e.sign,n=0>t;if(r!==n)return JSBI.__unequalSign(r);if(0===e.length){if(n)throw new Error("implementation bug");return 0===t?0:-1}if(1o?JSBI.__absoluteGreater(r):at)return JSBI.__unequalSign(r);if(0===t)throw new Error("implementation bug: should be handled elsewhere");if(0===e.length)return-1;JSBI.__kBitConversionDouble[0]=t;var n=2047&JSBI.__kBitConversionInts[1]>>>20;if(2047==n)throw new Error("implementation bug: handled elsewhere");var o=n-1023;if(0>o)return JSBI.__absoluteGreater(r);var a=e.length,i=e.__digit(a-1),l=JSBI.__clz30(i),s=30*a-l,u=o+1;if(su)return JSBI.__absoluteGreater(r);var c=1048576|1048575&JSBI.__kBitConversionInts[1],d=JSBI.__kBitConversionInts[0],m=29-l;if(m!==(0|(s-1)%30))throw new Error("implementation bug");var h,f=0;if(20>m){var v=20-m;f=v+32,h=c>>>v,c=c<<32-v|d>>>v,d<<=32-v}else if(20===m)f=32,h=c,c=d,d=0;else{var T=m-20;f=32-T,h=c<>>32-T,c=d<>>=0)>(h>>>=0))return JSBI.__absoluteGreater(r);if(i>>2,c=c<<30|d>>>2,d<<=30):h=0;var y=e.__unsignedDigit(p);if(y>h)return JSBI.__absoluteGreater(r);if(yt&&e.__unsignedDigit(0)===r(t):0===JSBI.__compareToDouble(e,t)}},{key:"__comparisonResultToBool",value:function __comparisonResultToBool(e,t){return 0===t?0>e:1===t?0>=e:2===t?0t;case 3:return e>=t}if(JSBI.__isBigInt(e)&&"string"==typeof t)return null!==(t=JSBI.__fromString(t))&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(e,t),r);if("string"==typeof e&&JSBI.__isBigInt(t))return null!==(e=JSBI.__fromString(e))&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(e,t),r);if(e=JSBI.__toNumeric(e),t=JSBI.__toNumeric(t),JSBI.__isBigInt(e)){if(JSBI.__isBigInt(t))return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(e,t),r);if("number"!=typeof t)throw new Error("implementation bug");return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(e,t),r)}if("number"!=typeof e)throw new Error("implementation bug");if(JSBI.__isBigInt(t))return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(t,e),2^r);if("number"!=typeof t)throw new Error("implementation bug");return 0===r?et:3===r?e>=t:void 0}},{key:"__absoluteAdd",value:function __absoluteAdd(e,t,r){if(e.length>>30,o.__setDigit(i,1073741823&l)}for(;i>>30,o.__setDigit(i,1073741823&s)}return i>>30,n.__setDigit(a,1073741823&i)}for(;a>>30,n.__setDigit(a,1073741823&l)}return n.__trim()}},{key:"__absoluteAddOne",value:function __absoluteAddOne(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e.length;null===r?r=new JSBI(n,t):r.sign=t;for(var o=1,a=0;a>>30,r.__setDigit(a,1073741823&i)}return 0!=o&&r.__setDigitGrow(n,1),r}},{key:"__absoluteSubOne",value:function __absoluteSubOne(e,t){for(var r=e.length,n=new JSBI(t=t||r,!1),o=1,a=0;a>>30,n.__setDigit(a,1073741823&i)}if(0!=o)throw new Error("implementation bug");for(var l=r;l2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,o=t.length,a=o;if(n2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,o=t.length,a=o;n2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,o=t.length,a=o;if(n2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,o=t.length,a=o;if(nn?0:e.__unsignedDigit(n)>t.__unsignedDigit(n)?1:-1}},{key:"__multiplyAccumulate",value:function __multiplyAccumulate(e,t,r,n){if(0!==t){for(var o,a=32767&t,i=t>>>15,l=0,s=0,u=0;u>>15,h=JSBI.__imul(d,a),f=JSBI.__imul(d,i),v=JSBI.__imul(m,a);l=(o+=s+h+l)>>>30,o&=1073741823,l+=(o+=((32767&f)<<15)+((32767&v)<<15))>>>30,s=JSBI.__imul(m,i)+(f>>>15)+(v>>>15),r.__setDigit(n,1073741823&o)}for(;0!=l||0!==s;n++){var T=r.__digit(n);T+=l+s,s=0,l=T>>>30,r.__setDigit(n,1073741823&T)}}}},{key:"__internalMultiplyAdd",value:function __internalMultiplyAdd(e,t,r,n,o){for(var a=r,i=0,l=0;l>>15,t),d=u+((32767&c)<<15)+i+a;a=d>>>30,i=c>>>15,o.__setDigit(l,1073741823&d)}if(o.length>n)for(o.__setDigit(n++,a+i);n2&&void 0!==arguments[2]?arguments[2]:null;null===r&&(r=new JSBI(e.length,!1));for(var n,o=0,a=2*e.length-1;0<=a;a-=2){var i=0|(n=(o<<15|e.__halfDigit(a))>>>0)/t,l=0|(n=((o=0|n%t)<<15|e.__halfDigit(a-1))>>>0)/t;o=0|n%t,r.__setDigit(a>>>1,i<<15|l)}return r}},{key:"__absoluteModSmall",value:function __absoluteModSmall(e,t){for(var r=0,n=2*e.length-1;0<=n;n--){r=0|((r<<15|e.__halfDigit(n))>>>0)%t}return r}},{key:"__absoluteDivLarge",value:function __absoluteDivLarge(e,t,r,n){var o=t.__halfDigitLength(),a=t.length,i=e.__halfDigitLength()-o,l=null;r&&(l=new JSBI(i+2>>>1,!1)).__initializeDigits();var s=new JSBI(o+2>>>1,!1);s.__initializeDigits();var u=JSBI.__clz15(t.__halfDigit(o-1));0>>0;c=0|T/m;for(var p=0|T%m,y=t.__halfDigit(o-2),g=d.__halfDigit(f+o-2);JSBI.__imul(c,y)>>>0>(p<<16|g)>>>0&&(c--,!(32767<(p+=m))););}JSBI.__internalMultiplyAdd(t,c,0,a,s);var D=d.__inplaceSub(s,f,o+1);0!==D&&(D=d.__inplaceAdd(t,f,o),d.__setHalfDigit(f+o,32767&d.__halfDigit(f+o)+D),c--),r&&(1&f?h=c<<15:l.__setDigit(f>>>1,h|c))}if(n)return d.__inplaceRightShift(u),r?{quotient:l,remainder:d}:d;if(r)return l;throw new Error("unreachable")}},{key:"__clz15",value:function __clz15(e){return JSBI.__clz30(e)-15}},{key:"__specialLeftShift",value:function __specialLeftShift(e,t,r){var n=e.length,o=new JSBI(n+r,!1);if(0===t){for(var a=0;a>>30-t}return 0r)throw new RangeError("BigInt too big");var n=0|r/30,o=r%30,a=e.length,i=0!==o&&0!=e.__digit(a-1)>>>30-o,l=a+n+(i?1:0),s=new JSBI(l,e.sign);if(0===o){for(var u=0;u>>30-o}if(i)s.__setDigit(a+n,c);else if(0!==c)throw new Error("implementation bug")}return s.__trim()}},{key:"__rightShiftByAbsolute",value:function __rightShiftByAbsolute(e,t){var r=e.length,n=e.sign,o=JSBI.__toShiftAmount(t);if(0>o)return JSBI.__rightShiftByMaximum(n);var a=0|o/30,i=o%30,l=r-a;if(0>=l)return JSBI.__rightShiftByMaximum(n);var s=!1;if(n)if(0!=(e.__digit(a)&(1<>>i,h=r-a-1,f=0;f>>i}c.__setDigit(h,m)}return s&&(c=JSBI.__absoluteAddOne(c,!0,c)),c.__trim()}},{key:"__rightShiftByMaximum",value:function __rightShiftByMaximum(e){return e?JSBI.__oneDigit(1,!0):JSBI.__zero()}},{key:"__toShiftAmount",value:function __toShiftAmount(e){if(1JSBI.__kMaxLengthBits?-1:t}},{key:"__toPrimitive",value:function __toPrimitive(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";if("object"!=_typeof(e))return e;if(e.constructor===JSBI)return e;if("undefined"!=typeof Symbol&&"symbol"==_typeof(Symbol.toPrimitive)){var r=e[Symbol.toPrimitive];if(r){var n=r(t);if("object"!=_typeof(n))return n;throw new TypeError("Cannot convert object to primitive value")}}var o=e.valueOf;if(o){var a=o.call(e);if("object"!=_typeof(a))return a}var i=e.toString;if(i){var l=i.call(e);if("object"!=_typeof(l))return l}throw new TypeError("Cannot convert object to primitive value")}},{key:"__toNumeric",value:function __toNumeric(e){return JSBI.__isBigInt(e)?e:+e}},{key:"__isBigInt",value:function __isBigInt(e){return"object"==_typeof(e)&&null!==e&&e.constructor===JSBI}},{key:"__truncateToNBits",value:function __truncateToNBits(e,t){for(var r=0|(e+29)/30,n=new JSBI(r,t.sign),o=r-1,a=0;a>>l}return n.__setDigit(o,i),n.__trim()}},{key:"__truncateAndSubFromPowerOfTwo",value:function __truncateAndSubFromPowerOfTwo(e,t,r){for(var n=Math.min,o=0|(e+29)/30,a=new JSBI(o,r),i=0,l=o-1,s=0,u=n(l,t.length);i>>30,a.__setDigit(i,1073741823&c)}for(;i>>f)-s,d&=v-1}return a.__setDigit(l,d),a.__trim()}},{key:"__digitPow",value:function __digitPow(e,t){for(var r=1;0>>=1,e*=e;return r}},{key:"__isOneDigitInt",value:function __isOneDigitInt(e){return(1073741823&e)===e}}]),JSBI}(_wrapNativeSuper(Array));t.__kMaxLength=33554432,t.__kMaxLengthBits=t.__kMaxLength<<5,t.__kMaxBitsPerChar=[0,0,32,51,64,75,83,90,96,102,107,111,115,119,122,126,128,131,134,136,139,141,143,145,147,149,151,153,154,156,158,159,160,162,163,165,166],t.__kBitsPerCharTableShift=5,t.__kBitsPerCharTableMultiplier=1<>>0)/Math.LN2)},t.__imul=Math.imul||function(e,t){return 0|e*t};var r={};function MakeIntrinsicClass(e,t){Object.defineProperty(e.prototype,Symbol.toStringTag,{value:t,writable:!1,enumerable:!1,configurable:!0});var r,n=_createForOfIteratorHelper(Object.getOwnPropertyNames(e));try{for(n.s();!(r=n.n()).done;){var o=r.value,a=Object.getOwnPropertyDescriptor(e,o);a.configurable&&a.enumerable&&(a.enumerable=!1,Object.defineProperty(e,o,a))}}catch(e){n.e(e)}finally{n.f()}var i,l=_createForOfIteratorHelper(Object.getOwnPropertyNames(e.prototype));try{for(l.s();!(i=l.n()).done;){var s=i.value,u=Object.getOwnPropertyDescriptor(e.prototype,s);u.configurable&&u.enumerable&&(u.enumerable=!1,Object.defineProperty(e.prototype,s,u))}}catch(e){l.e(e)}finally{l.f()}DefineIntrinsic(t,e),DefineIntrinsic("".concat(t,".prototype"),e.prototype)}function DefineIntrinsic(e,t){var n="%".concat(e,"%");if(void 0!==r[n])throw new Error("intrinsic ".concat(e," already exists"));r[n]=t}function GetIntrinsic(e){return r[e]}_defineProperty({},"Temporal.Duration",(function TemporalDuration(e,t){var r=t.stylize("".concat(this[Symbol.toStringTag]," <").concat(this,">"),"special");if(e<1)return r;for(var n=[],o=0,a=["years","months","weeks","days","hours","minutes","seconds","milliseconds","microseconds","nanoseconds"];o1?r-1:0),o=1;o1?t-1:0),n=1;n1?t-1:1);var o=function GetNumberOption(e,t,r,n,o){var a=e[t];if(void 0===a)return o;var i=ToNumber(a);if(le(i)||in)throw new RangeError("".concat(String(t)," must be between ").concat(r," and ").concat(n,", not ").concat(i));return oe(i)}(e,"roundingIncrement",1,n,1);if(void 0!==t&&t%o!=0)throw new RangeError("Rounding increment must divide evenly into ".concat(t));return o}function ToTemporalDateTimeRoundingIncrement(e,t){return ToTemporalRoundingIncrement(e,{year:void 0,month:void 0,week:void 0,day:void 0,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[t],!1)}function ToSecondsStringPrecision(e){var t=GetTemporalUnit(e,"smallestUnit","time",void 0);if("hour"===t){var r=Pe.reduce((function(e,t){var r=_slicedToArray(t,3),n=r[0],o=r[1];return"time"===r[2]&&"hour"!==o&&e.push(o,n),e}),[]);throw new RangeError("smallestUnit must be one of ".concat(r.join(", "),", not ").concat(t))}switch(t){case"minute":return{precision:"minute",unit:"minute",increment:1};case"second":return{precision:0,unit:"second",increment:1};case"millisecond":return{precision:3,unit:"millisecond",increment:1};case"microsecond":return{precision:6,unit:"microsecond",increment:1};case"nanosecond":return{precision:9,unit:"nanosecond",increment:1}}var n=e.fractionalSecondDigits;if(void 0===n&&(n="auto"),"number"!=typeof n){var o=ToString(n);if("auto"===o)return{precision:"auto",unit:"nanosecond",increment:1};throw new RangeError("fractionalSecondDigits must be 'auto' or 0 through 9, not ".concat(o))}if(le(n)||n<0||n>9)throw new RangeError("fractionalSecondDigits must be 'auto' or 0 through 9, not ".concat(n));var a=oe(n);switch(a){case 0:return{precision:a,unit:"second",increment:1};case 1:case 2:case 3:return{precision:a,unit:"millisecond",increment:Math.pow(10,3-a)};case 4:case 5:case 6:return{precision:a,unit:"microsecond",increment:Math.pow(10,6-a)};case 7:case 8:case 9:return{precision:a,unit:"nanosecond",increment:Math.pow(10,9-a)};default:throw new RangeError("fractionalSecondDigits must be 'auto' or 0 through 9, not ".concat(n))}}var Le=Symbol("~required~");function GetTemporalUnit(e,t,r,n){var o,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],i=[],l=_createForOfIteratorHelper(Pe);try{for(l.s();!(o=l.n()).done;){var s=_slicedToArray(o.value,3),u=s[1],c=s[2];"datetime"!==r&&r!==c||i.push(u)}}catch(e){l.e(e)}finally{l.f()}i.push.apply(i,_toConsumableArray(a));var d=n;d===Le?d=void 0:void 0!==d&&i.push(d);for(var m=[].concat(i),h=0,f=i;hYe.indexOf(t)?t:e}function MergeLargestUnitOption(e,t){var r=e;return void 0===r&&(r=he(null)),me(he(null),r,{largestUnit:t})}function PrepareTemporalFields(e,t,r){var n,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{emptySourceErrorMessage:"no supported properties found"},a=o.emptySourceErrorMessage,i=he(null),l=!1,s=_createForOfIteratorHelper(t);try{for(s.s();!(n=s.n()).done;){var u=n.value,c=e[u];if(void 0!==c)l=!0,Me.has(u)&&(c=Me.get(u)(c)),i[u]=c;else if("partial"!==r){if(K.call(r,u))throw new TypeError("required property '".concat(u,"' missing or undefined"));c=Re.get(u),i[u]=c}}}catch(e){s.e(e)}finally{s.f()}if("partial"===r&&!l)throw new TypeError(a);if(void 0===i.era!=(void 0===i.eraYear))throw new RangeError("properties 'era' and 'eraYear' must be provided together");return i}function ToTemporalTimeRecord(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"complete",r=["hour","microsecond","millisecond","minute","nanosecond","second"],n=PrepareTemporalFields(e,r,"partial",{emptySourceErrorMessage:"invalid time-like"}),o={},a=0,i=r;a1&&void 0!==arguments[1]?arguments[1]:"constrain",T=e;if(IsObject(T)){if(IsTemporalTime(T))return T;if(IsTemporalZonedDateTime(T)&&(T=BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(T,g),GetSlot(T,y),GetSlot(T,f))),IsTemporalDateTime(T)){var p=GetIntrinsic("%Temporal.PlainTime%");return new p(GetSlot(T,s),GetSlot(T,u),GetSlot(T,c),GetSlot(T,d),GetSlot(T,m),GetSlot(T,h))}if("iso8601"!==ToString(l=GetTemporalCalendarWithISODefault(T)))throw new RangeError("PlainTime can only have iso8601 calendar");var D=ToTemporalTimeRecord(T),S=RegulateTime(t=D.hour,r=D.minute,n=D.second,o=D.millisecond,a=D.microsecond,i=D.nanosecond,v);t=S.hour,r=S.minute,n=S.second,o=S.millisecond,a=S.microsecond,i=S.nanosecond}else{var I=ParseTemporalTimeString(ToString(T));if(t=I.hour,r=I.minute,n=I.second,o=I.millisecond,a=I.microsecond,i=I.nanosecond,l=I.calendar,RejectTime(t,r,n,o,a,i),void 0!==l&&"iso8601"!==l)throw new RangeError("PlainTime can only have iso8601 calendar")}var w=GetIntrinsic("%Temporal.PlainTime%");return new w(t,r,n,o,a,i)}function ToTemporalYearMonth(e,t){if(IsObject(e)){if(IsTemporalYearMonth(e))return e;var r=GetTemporalCalendarWithISODefault(e);return CalendarYearMonthFromFields(r,PrepareTemporalFields(e,CalendarFields(r,["month","monthCode","year"]),[]),t)}ToTemporalOverflow(t);var n=ParseTemporalYearMonthString(ToString(e)),o=n.year,a=n.month,i=n.referenceISODay,l=n.calendar;return void 0===l&&(l=GetISO8601Calendar()),l=ToTemporalCalendar(l),void 0===i?(RejectISODate(o,a,1),CreateTemporalYearMonth(o,a,l)):CalendarYearMonthFromFields(l,CreateTemporalYearMonth(o,a,l,i))}function InterpretISODateTimeOffset(e,r,a,i,l,s,u,c,d,m,h,f,v,T,p){var y=new(GetIntrinsic("%Temporal.PlainDateTime%"))(e,r,a,i,l,s,u,c,d);if("wall"===m||"ignore"===T)return GetSlot(BuiltinTimeZoneGetInstantFor(f,y,v),n);if("exact"===m||"use"===T){var g=GetEpochFromISOParts(e,r,a,i,l,s,u,c,d);if(null===g)throw new RangeError("ZonedDateTime outside of supported range");return t.subtract(g,t.BigInt(h))}var D,S=GetPossibleInstantsFor(f,y),I=_createForOfIteratorHelper(S);try{for(I.s();!(D=I.n()).done;){var w=D.value,_=GetOffsetNanosecondsFor(f,w),C=t.toNumber(RoundNumberToIncrement(t.BigInt(_),6e10,"halfExpand"));if(_===h||p&&C===h)return GetSlot(w,n)}}catch(e){I.e(e)}finally{I.f()}if("reject"===T){var G=FormatTimeZoneOffsetString(h),b=IsTemporalTimeZone(f)?GetSlot(f,o):"time zone";throw new RangeError("Offset ".concat(G," is invalid for ").concat(y.toString()," in ").concat(b))}return GetSlot(DisambiguatePossibleInstants(S,f,y,v),n)}function ToTemporalZonedDateTime(e,t){var r,n,o,a,i,l,s,u,c,d,m,h,f=!1,v="option";if(IsObject(e)){if(IsTemporalZonedDateTime(e))return e;var T=PrepareTemporalFields(e,ArrayPush(CalendarFields(h=GetTemporalCalendarWithISODefault(e),["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),"timeZone","offset"),["timeZone"]),p=InterpretTemporalDateTimeFields(h,T,t);r=p.year,n=p.month,o=p.day,a=p.hour,i=p.minute,l=p.second,s=p.millisecond,u=p.microsecond,c=p.nanosecond,d=ToTemporalTimeZone(T.timeZone),void 0===(m=T.offset)?v="wall":m=ToString(m)}else{var y,g;ToTemporalOverflow(t);var D=function ParseTemporalZonedDateTimeString(e){var t=ParseISODateTime(e);if(!t.ianaName)throw new RangeError("Temporal.ZonedDateTime requires a time zone ID in brackets");return t}(ToString(e));if(r=D.year,n=D.month,o=D.day,a=D.hour,i=D.minute,l=D.second,s=D.millisecond,u=D.microsecond,c=D.nanosecond,y=D.ianaName,m=D.offset,g=D.z,h=D.calendar,!y)throw new RangeError("time zone ID required in brackets");g?v="exact":m||(v="wall"),d=new(GetIntrinsic("%Temporal.TimeZone%"))(y),h||(h=GetISO8601Calendar()),h=ToTemporalCalendar(h),f=!0}var S=0;return"option"===v&&(S=ParseTimeZoneOffsetString(m)),CreateTemporalZonedDateTime(InterpretISODateTimeOffset(r,n,o,a,i,l,s,u,c,v,S,d,ToTemporalDisambiguation(t),ToTemporalOffset(t,"reject"),f),d,h)}function CreateTemporalDateSlots(e,t,r,n,o){RejectISODate(t,r,n),RejectDateRange(t,r,n),CreateSlots(e),SetSlot(e,a,t),SetSlot(e,i,r),SetSlot(e,l,n),SetSlot(e,f,o),SetSlot(e,v,!0)}function CreateTemporalDate(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:GetISO8601Calendar(),o=GetIntrinsic("%Temporal.PlainDate%"),a=he(o.prototype);return CreateTemporalDateSlots(a,e,t,r,n),a}function CreateTemporalDateTimeSlots(e,t,r,n,o,v,T,p,y,g,D){RejectDateTime(t,r,n,o,v,T,p,y,g),RejectDateTimeRange(t,r,n,o,v,T,p,y,g),CreateSlots(e),SetSlot(e,a,t),SetSlot(e,i,r),SetSlot(e,l,n),SetSlot(e,s,o),SetSlot(e,u,v),SetSlot(e,c,T),SetSlot(e,d,p),SetSlot(e,m,y),SetSlot(e,h,g),SetSlot(e,f,D)}function CreateTemporalDateTime(e,t,r,n,o,a,i,l,s){var u=arguments.length>9&&void 0!==arguments[9]?arguments[9]:GetISO8601Calendar(),c=GetIntrinsic("%Temporal.PlainDateTime%"),d=he(c.prototype);return CreateTemporalDateTimeSlots(d,e,t,r,n,o,a,i,l,s,u),d}function CreateTemporalMonthDaySlots(e,t,r,n,o){RejectISODate(o,t,r),RejectDateRange(o,t,r),CreateSlots(e),SetSlot(e,i,t),SetSlot(e,l,r),SetSlot(e,a,o),SetSlot(e,f,n),SetSlot(e,p,!0)}function CreateTemporalMonthDay(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:GetISO8601Calendar(),n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1972,o=GetIntrinsic("%Temporal.PlainMonthDay%"),a=he(o.prototype);return CreateTemporalMonthDaySlots(a,e,t,r,n),a}function CreateTemporalYearMonthSlots(e,t,r,n,o){RejectISODate(t,r,o),function RejectYearMonthRange(e,t){RejectToRange(e,be,Ee),e===be?RejectToRange(t,4,12):e===Ee&&RejectToRange(t,1,9)}(t,r),CreateSlots(e),SetSlot(e,a,t),SetSlot(e,i,r),SetSlot(e,l,o),SetSlot(e,f,n),SetSlot(e,T,!0)}function CreateTemporalYearMonth(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:GetISO8601Calendar(),n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,o=GetIntrinsic("%Temporal.PlainYearMonth%"),a=he(o.prototype);return CreateTemporalYearMonthSlots(a,e,t,r,n),a}function CreateTemporalZonedDateTimeSlots(e,t,r,o){ValidateEpochNanoseconds(t),CreateSlots(e),SetSlot(e,n,t),SetSlot(e,g,r),SetSlot(e,f,o);var a=new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(e,n));SetSlot(e,y,a)}function CreateTemporalZonedDateTime(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:GetISO8601Calendar(),n=GetIntrinsic("%Temporal.ZonedDateTime%"),o=he(n.prototype);return CreateTemporalZonedDateTimeSlots(o,e,t,r),o}function GetISO8601Calendar(){return new(GetIntrinsic("%Temporal.Calendar%"))("iso8601")}function CalendarFields(e,t){var r=t;e.fields&&(r=e.fields(r));var n,o=[],a=_createForOfIteratorHelper(r);try{for(a.s();!(n=a.n()).done;){var i=n.value;if("string"!=typeof i)throw new TypeError("bad return from calendar.fields()");Q.call(o,i)}}catch(e){a.e(e)}finally{a.f()}return o}function CalendarMergeFields(e,t,r){var n=e.mergeFields;if(!n)return _objectSpread2(_objectSpread2({},t),r);var o=Reflect.apply(n,e,[t,r]);if(!IsObject(o))throw new TypeError("bad return from calendar.mergeFields()");return o}function CalendarDateAdd(e,t,r,n,o){var a=o;void 0===a&&(a=e.dateAdd);var i=Te(a,e,[t,r,n]);if(!IsTemporalDate(i))throw new TypeError("invalid result");return i}function CalendarDateUntil(e,t,r,n,o){var a=o;void 0===a&&(a=e.dateUntil);var i=Te(a,e,[t,r,n]);if(!IsTemporalDuration(i))throw new TypeError("invalid result");return i}function CalendarYear(e,t){var r=e.year(t);if(void 0===r)throw new RangeError("calendar year result must be an integer");return ToIntegerThrowOnInfinity(r)}function CalendarMonth(e,t){var r=e.month(t);if(void 0===r)throw new RangeError("calendar month result must be a positive integer");return ToPositiveInteger(r)}function CalendarMonthCode(e,t){var r=e.monthCode(t);if(void 0===r)throw new RangeError("calendar monthCode result must be a string");return ToString(r)}function CalendarDay(e,t){var r=e.day(t);if(void 0===r)throw new RangeError("calendar day result must be a positive integer");return ToPositiveInteger(r)}function CalendarEra(e,t){var r=e.era(t);return void 0!==r&&(r=ToString(r)),r}function CalendarEraYear(e,t){var r=e.eraYear(t);return void 0!==r&&(r=ToIntegerThrowOnInfinity(r)),r}function CalendarDayOfWeek(e,t){return e.dayOfWeek(t)}function CalendarDayOfYear(e,t){return e.dayOfYear(t)}function CalendarWeekOfYear(e,t){return e.weekOfYear(t)}function CalendarDaysInWeek(e,t){return e.daysInWeek(t)}function CalendarDaysInMonth(e,t){return e.daysInMonth(t)}function CalendarDaysInYear(e,t){return e.daysInYear(t)}function CalendarMonthsInYear(e,t){return e.monthsInYear(t)}function CalendarInLeapYear(e,t){return e.inLeapYear(t)}function ToTemporalCalendar(e){var t=e;if(IsObject(t)){if(HasSlot(t,f))return GetSlot(t,f);if(!("calendar"in t))return t;if(IsObject(t=t.calendar)&&!("calendar"in t))return t}var r,n=ToString(t),o=GetIntrinsic("%Temporal.Calendar%");if(IsBuiltinCalendar(n))return new o(n);try{r=ParseISODateTime(n).calendar}catch(e){throw new RangeError("Invalid calendar: ".concat(n))}return r||(r="iso8601"),new o(r)}function GetTemporalCalendarWithISODefault(e){if(HasSlot(e,f))return GetSlot(e,f);var t=e.calendar;return void 0===t?GetISO8601Calendar():ToTemporalCalendar(t)}function CalendarEquals(e,t){return e===t||ToString(e)===ToString(t)}function ConsolidateCalendars(e,t){if(e===t)return t;var r=ToString(e),n=ToString(t);if(r===n||"iso8601"===r)return t;if("iso8601"===n)return e;throw new RangeError("irreconcilable calendars")}function CalendarDateFromFields(e,t,r){var n=e.dateFromFields(t,r);if(!IsTemporalDate(n))throw new TypeError("invalid result");return n}function CalendarYearMonthFromFields(e,t,r){var n=e.yearMonthFromFields(t,r);if(!IsTemporalYearMonth(n))throw new TypeError("invalid result");return n}function CalendarMonthDayFromFields(e,t,r){var n=e.monthDayFromFields(t,r);if(!IsTemporalMonthDay(n))throw new TypeError("invalid result");return n}function ToTemporalTimeZone(e){var t=e;if(IsObject(t)){if(IsTemporalZonedDateTime(t))return GetSlot(t,g);if(!("timeZone"in t))return t;if(IsObject(t=t.timeZone)&&!("timeZone"in t))return t}var r=ParseTemporalTimeZone(ToString(t));return new(GetIntrinsic("%Temporal.TimeZone%"))(r)}function TimeZoneEquals(e,t){return e===t||ToString(e)===ToString(t)}function TemporalDateTimeToDate(e){return CreateTemporalDate(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l),GetSlot(e,f))}function TemporalDateTimeToTime(e){return new(GetIntrinsic("%Temporal.PlainTime%"))(GetSlot(e,s),GetSlot(e,u),GetSlot(e,c),GetSlot(e,d),GetSlot(e,m),GetSlot(e,h))}function GetOffsetNanosecondsFor(e,t){var r=e.getOffsetNanosecondsFor;if("function"!=typeof r)throw new TypeError("getOffsetNanosecondsFor not callable");var n=Reflect.apply(r,e,[t]);if("number"!=typeof n)throw new TypeError("bad return from getOffsetNanosecondsFor");if(!IsInteger(n)||ne(n)>864e11)throw new RangeError("out-of-range return from getOffsetNanosecondsFor");return n}function BuiltinTimeZoneGetOffsetStringFor(e,t){return FormatTimeZoneOffsetString(GetOffsetNanosecondsFor(e,t))}function BuiltinTimeZoneGetPlainDateTimeFor(e,t,r){var o=GetSlot(t,n),a=GetOffsetNanosecondsFor(e,t),i=GetISOPartsFromEpoch(o),l=i.year,s=i.month,u=i.day,c=i.hour,d=i.minute,m=i.second,h=i.millisecond,f=i.microsecond,v=i.nanosecond,T=BalanceISODateTime(l,s,u,c,d,m,h,f,v+a);return CreateTemporalDateTime(l=T.year,s=T.month,u=T.day,c=T.hour,d=T.minute,m=T.second,h=T.millisecond,f=T.microsecond,v=T.nanosecond,r)}function BuiltinTimeZoneGetInstantFor(e,t,r){return DisambiguatePossibleInstants(GetPossibleInstantsFor(e,t),e,t,r)}function DisambiguatePossibleInstants(e,r,n,o){var v=GetIntrinsic("%Temporal.Instant%"),T=e.length;if(1===T)return e[0];if(T)switch(o){case"compatible":case"earlier":return e[0];case"later":return e[T-1];case"reject":throw new RangeError("multiple instants found")}var p=GetSlot(n,a),y=GetSlot(n,i),g=GetSlot(n,l),D=GetSlot(n,s),S=GetSlot(n,u),I=GetSlot(n,c),w=GetSlot(n,d),_=GetSlot(n,m),C=GetSlot(n,h),G=GetEpochFromISOParts(p,y,g,D,S,I,w,_,C);if(null===G)throw new RangeError("DateTime outside of supported range");var b=new v(t.subtract(G,_e)),E=new v(t.add(G,_e)),O=GetOffsetNanosecondsFor(r,b),B=GetOffsetNanosecondsFor(r,E)-O;switch(o){case"earlier":var k=GetSlot(n,f),A=GetIntrinsic("%Temporal.PlainDateTime%"),M=AddDateTime(p,y,g,D,S,I,w,_,C,k,0,0,0,0,0,0,0,0,0,-B,void 0);return GetPossibleInstantsFor(r,new A(M.year,M.month,M.day,M.hour,M.minute,M.second,M.millisecond,M.microsecond,M.nanosecond,k))[0];case"compatible":case"later":var R=GetSlot(n,f),P=GetIntrinsic("%Temporal.PlainDateTime%"),j=AddDateTime(p,y,g,D,S,I,w,_,C,R,0,0,0,0,0,0,0,0,0,B,void 0),Z=GetPossibleInstantsFor(r,new P(j.year,j.month,j.day,j.hour,j.minute,j.second,j.millisecond,j.microsecond,j.nanosecond,R));return Z[Z.length-1];case"reject":throw new RangeError("no such instant found")}}function GetPossibleInstantsFor(e,t){var r,n=[],o=_createForOfIteratorHelper(e.getPossibleInstantsFor(t));try{for(o.s();!(r=o.n()).done;){var a=r.value;if(!IsTemporalInstant(a))throw new TypeError("bad return from getPossibleInstantsFor");Q.call(n,a)}}catch(e){o.e(e)}finally{o.f()}return n}function ISOYearString(e){var t;if(e<0||e>9999){var r=e<0?"-":"+",n=ne(e);t=r+"000000".concat(n).slice(-6)}else t="0000".concat(e).slice(-4);return t}function ISODateTimePartString(e){return"00".concat(e).slice(-2)}function FormatSecondsStringPart(e,t,r,n,o){if("minute"===o)return"";var a,i=":".concat(ISODateTimePartString(e)),l=1e6*t+1e3*r+n;if("auto"===o){if(0===l)return i;for(a="".concat(l).padStart(9,"0");"0"===a[a.length-1];)a=a.slice(0,-1)}else{if(0===o)return i;a="".concat(l).padStart(9,"0").slice(0,o)}return"".concat(i,".").concat(a)}function TemporalInstantToString(e,t,r){var n=t;void 0===n&&(n=new(GetIntrinsic("%Temporal.TimeZone%"))("UTC"));var o=BuiltinTimeZoneGetPlainDateTimeFor(n,e,GetISO8601Calendar()),f=ISOYearString(GetSlot(o,a)),v=ISODateTimePartString(GetSlot(o,i)),T=ISODateTimePartString(GetSlot(o,l)),p=ISODateTimePartString(GetSlot(o,s)),y=ISODateTimePartString(GetSlot(o,u)),g=FormatSecondsStringPart(GetSlot(o,c),GetSlot(o,d),GetSlot(o,m),GetSlot(o,h),r),D="Z";void 0!==t&&(D=FormatISOTimeZoneOffsetString(GetOffsetNanosecondsFor(n,e)));return"".concat(f,"-").concat(v,"-").concat(T,"T").concat(p,":").concat(y).concat(g).concat(D)}function TemporalDurationToString(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;function formatNumber(e){return e<=de?e.toString(10):t.BigInt(e).toString(10)}var o=GetSlot(e,D),a=GetSlot(e,S),i=GetSlot(e,I),l=GetSlot(e,w),s=GetSlot(e,_),u=GetSlot(e,C),c=GetSlot(e,G),d=GetSlot(e,b),m=GetSlot(e,E),h=GetSlot(e,O),f=DurationSign(o,a,i,l,s,u,c,d,m,h);if(n){var v=n.unit,T=n.increment,p=n.roundingMode,y=RoundDuration(0,0,0,0,0,0,c,d,m,h,T,v,p);c=y.seconds,d=y.milliseconds,m=y.microseconds,h=y.nanoseconds}var g=[];o&&g.push("".concat(formatNumber(ne(o)),"Y")),a&&g.push("".concat(formatNumber(ne(a)),"M")),i&&g.push("".concat(formatNumber(ne(i)),"W")),l&&g.push("".concat(formatNumber(ne(l)),"D"));var B=[];s&&B.push("".concat(formatNumber(ne(s)),"H")),u&&B.push("".concat(formatNumber(ne(u)),"M"));var k,A,M,R,P=[],j=TotalDurationNanoseconds(0,0,0,c,d,m,h,0),Z=divmod(j,De);j=Z.quotient,k=Z.remainder;var Y=divmod(j,De);j=Y.quotient,A=Y.remainder;var N=divmod(j,De);R=N.quotient,M=N.remainder;var J,L=1e6*ne(t.toNumber(M))+1e3*ne(t.toNumber(A))+ne(t.toNumber(k));if("auto"===r){if(0!==L)for(J="".concat(L).padStart(9,"0");"0"===J[J.length-1];)J=J.slice(0,-1)}else 0!==r&&(J="".concat(L).padStart(9,"0").slice(0,r));return J&&P.unshift(".",J),t.equal(R,pe)&&!P.length&&"auto"===r||P.unshift(abs(R).toString()),P.length&&B.push("".concat(P.join(""),"S")),B.length&&B.unshift("T"),g.length||B.length?"".concat(f<0?"-":"","P").concat(g.join("")).concat(B.join("")):"PT0S"}function TemporalDateToString(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",r=ISOYearString(GetSlot(e,a)),n=ISODateTimePartString(GetSlot(e,i)),o=ISODateTimePartString(GetSlot(e,l)),s=ToString(GetSlot(e,f)),u=FormatCalendarAnnotation(s,t);return"".concat(r,"-").concat(n,"-").concat(o).concat(u)}function TemporalDateTimeToString(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"auto",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,o=GetSlot(e,a),v=GetSlot(e,i),T=GetSlot(e,l),p=GetSlot(e,s),y=GetSlot(e,u),g=GetSlot(e,c),D=GetSlot(e,d),S=GetSlot(e,m),I=GetSlot(e,h);if(n){var w=n.unit,_=n.increment,C=n.roundingMode,G=RoundISODateTime(o,v,T,p,y,g,D,S,I,_,w,C);o=G.year,v=G.month,T=G.day,p=G.hour,y=G.minute,g=G.second,D=G.millisecond,S=G.microsecond,I=G.nanosecond}var b=ISOYearString(o),E=ISODateTimePartString(v),O=ISODateTimePartString(T),B=ISODateTimePartString(p),k=ISODateTimePartString(y),A=FormatSecondsStringPart(g,D,S,I,t),M=ToString(GetSlot(e,f)),R=FormatCalendarAnnotation(M,r);return"".concat(b,"-").concat(E,"-").concat(O,"T").concat(B,":").concat(k).concat(A).concat(R)}function TemporalMonthDayToString(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",r=ISODateTimePartString(GetSlot(e,i)),n=ISODateTimePartString(GetSlot(e,l)),o="".concat(r,"-").concat(n),s=GetSlot(e,f),u=ToString(s);if("always"===t||"iso8601"!==u){var c=ISOYearString(GetSlot(e,a));o="".concat(c,"-").concat(o)}var d=FormatCalendarAnnotation(u,t);return d&&(o+=d),o}function TemporalYearMonthToString(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",r=ISOYearString(GetSlot(e,a)),n=ISODateTimePartString(GetSlot(e,i)),o="".concat(r,"-").concat(n),s=GetSlot(e,f),u=ToString(s);if("always"===t||"iso8601"!==u){var c=ISODateTimePartString(GetSlot(e,l));o+="-".concat(c)}var d=FormatCalendarAnnotation(u,t);return d&&(o+=d),o}function TemporalZonedDateTimeToString(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"auto",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"auto",v=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"auto",T=arguments.length>5&&void 0!==arguments[5]?arguments[5]:void 0,p=GetSlot(e,y);if(T){var D=T.unit,S=T.increment,I=T.roundingMode,w=RoundInstant(GetSlot(e,n),S,D,I),_=GetIntrinsic("%Temporal.Instant%");p=new _(w)}var C=GetSlot(e,g),G=GetISO8601Calendar(),b=BuiltinTimeZoneGetPlainDateTimeFor(C,p,G),E=ISOYearString(GetSlot(b,a)),O=ISODateTimePartString(GetSlot(b,i)),B=ISODateTimePartString(GetSlot(b,l)),k=ISODateTimePartString(GetSlot(b,s)),A=ISODateTimePartString(GetSlot(b,u)),M=FormatSecondsStringPart(GetSlot(b,c),GetSlot(b,d),GetSlot(b,m),GetSlot(b,h),t),R="".concat(E,"-").concat(O,"-").concat(B,"T").concat(k,":").concat(A).concat(M);if("never"!==v){var P=GetOffsetNanosecondsFor(C,p);R+=FormatISOTimeZoneOffsetString(P)}"never"!==o&&(R+="[".concat(C,"]"));var j=ToString(GetSlot(e,f));return R+=FormatCalendarAnnotation(j,r)}function TestTimeZoneOffsetString(e){return xe.test(ce(e))}function ParseTimeZoneOffsetString(e){var t=xe.exec(ce(e));if(!t)throw new RangeError("invalid time zone offset: ".concat(e));return("-"===t[1]||"−"===t[1]?-1:1)*(1e9*(60*(60*+t[2]+ +(t[3]||0))+ +(t[4]||0))+ +((t[5]||0)+"000000000").slice(0,9))}function GetCanonicalTimeZoneIdentifier(e){return TestTimeZoneOffsetString(e)?FormatTimeZoneOffsetString(ParseTimeZoneOffsetString(e)):getIntlDateTimeFormatEnUsForTimeZone(ce(e)).resolvedOptions().timeZone}function GetIANATimeZoneOffsetNanoseconds(e,r){var n=GetIANATimeZoneDateTimeParts(e,r),o=GetEpochFromISOParts(n.year,n.month,n.day,n.hour,n.minute,n.second,n.millisecond,n.microsecond,n.nanosecond);if(null===o)throw new RangeError("Date outside of supported range");return t.toNumber(t.subtract(o,e))}function FormatTimeZoneOffsetString(e){var t=e<0?"-":"+",r=ne(e),n=r%1e9,o=oe(r/1e9)%60,a=oe(r/6e10)%60,i=ISODateTimePartString(oe(r/36e11)),l=ISODateTimePartString(a),s=ISODateTimePartString(o),u="";if(n){for(var c="".concat(n).padStart(9,"0");"0"===c[c.length-1];)c=c.slice(0,-1);u=":".concat(s,".").concat(c)}else o&&(u=":".concat(s));return"".concat(t).concat(i,":").concat(l).concat(u)}function FormatISOTimeZoneOffsetString(e){var r=t.toNumber(RoundNumberToIncrement(t.BigInt(e),6e10,"halfExpand")),n=r<0?"-":"+",o=(r=ne(r))/6e10%60,a=ISODateTimePartString(oe(r/36e11)),i=ISODateTimePartString(o);return"".concat(n).concat(a,":").concat(i)}function GetEpochFromISOParts(e,r,n,o,a,i,l,s,u){var c=new Date;c.setUTCHours(o,a,i,l),c.setUTCFullYear(e,r-1,n);var d=c.getTime();if(le(d))return null;var m=t.multiply(t.BigInt(d),Se);return m=t.add(m,t.multiply(t.BigInt(s),De)),m=t.add(m,t.BigInt(u)),t.lessThan(m,Ce)||t.greaterThan(m,Ge)?null:m}function GetISOPartsFromEpoch(e){var r=divmod(e,Se),n=r.quotient,o=r.remainder,a=t.toNumber(n),i=t.toNumber(o);i<0&&(i+=1e6,a-=1);var l=oe(i/1e3)%1e3,s=i%1e3,u=new Date(a);return{epochMilliseconds:a,year:u.getUTCFullYear(),month:u.getUTCMonth()+1,day:u.getUTCDate(),hour:u.getUTCHours(),minute:u.getUTCMinutes(),second:u.getUTCSeconds(),millisecond:u.getUTCMilliseconds(),microsecond:l,nanosecond:s}}function GetIANATimeZoneDateTimeParts(e,t){var r=GetISOPartsFromEpoch(e),n=r.epochMilliseconds,o=r.millisecond,a=r.microsecond,i=r.nanosecond,l=function GetFormatterParts(e,t){return function parseFromEnUsFormat(e){var t=e.split(/[^\w]+/);if(7!==t.length)throw new RangeError('expected 7 parts in "'.concat(e));var r=+t[0],n=+t[1],o=+t[2],a=t[3].toUpperCase();if("B"===a||"BC"===a)o=1-o;else if("A"!==a&&"AD"!==a)throw new RangeError("Unknown era ".concat(a,' in "').concat(e));var i=+t[4];24===i&&(i=0);var l=+t[5],s=+t[6];if(!(se(o)&&se(r)&&se(n)&&se(i)&&se(l)&&se(s)))throw new RangeError('Invalid number in "'.concat(e));return{year:o,month:r,day:n,hour:i,minute:l,second:s}}(getIntlDateTimeFormatEnUsForTimeZone(e).format(new Date(t)))}(t,n);return BalanceISODateTime(l.year,l.month,l.day,l.hour,l.minute,l.second,o,a,i)}function maxJSBI(e,r){return t.lessThan(e,r)?r:e}function afterLatestPossibleTzdbRuleChange(){return t.add(Ue(),Be)}function GetIANATimeZonePreviousTransition(e,r){for(var n=afterLatestPossibleTzdbRuleChange(),o=t.greaterThan(e,n),a=o?t.subtract(e,Fe):Oe,i=t.subtract(e,ye),l=GetIANATimeZoneOffsetNanoseconds(i,r),s=i,u=l;l===u&&t.greaterThan(i,a);)l===(u=GetIANATimeZoneOffsetNanoseconds(s=t.subtract(i,ke),r))&&(i=s);return l===u?o?GetIANATimeZonePreviousTransition(t.subtract(n,_e),r):null:bisect((function(e){return GetIANATimeZoneOffsetNanoseconds(e,r)}),s,i,u,l)}function LeapYear(e){return void 0!==e&&(e%4==0&&(!(e%100==0)||e%400==0))}function ISODaysInMonth(e,t){return{standard:[31,28,31,30,31,30,31,31,30,31,30,31],leapyear:[31,29,31,30,31,30,31,31,30,31,30,31]}[LeapYear(e)?"leapyear":"standard"][t-1]}function DayOfWeek(e,t,r){var n=t+(t<3?10:-2),o=e-(t<3?1:0),a=oe(o/100),i=o-100*a,l=(r+oe(2.6*n-.2)+(i+oe(i/4))+(oe(a/4)-2*a))%7;return l+(l<=0?7:0)}function DayOfYear(e,t,r){for(var n=r,o=t-1;o>0;o--)n+=ISODaysInMonth(e,o);return n}function DurationSign(e,t,r,n,o,a,i,l,s,u){for(var c=0,d=[e,t,r,n,o,a,i,l,s,u];c2?n:n-1;a<-(l=LeapYear(s)?366:365);)n-=1,s-=1,a+=l;for(s+=1;a>(l=LeapYear(s)?366:365);)n+=1,s+=1,a-=l;for(;a<1;){var u=BalanceISOYearMonth(n,o-1);a+=ISODaysInMonth(n=u.year,o=u.month)}for(;a>ISODaysInMonth(n,o);){a-=ISODaysInMonth(n,o);var c=BalanceISOYearMonth(n,o+1);n=c.year,o=c.month}return{year:n,month:o,day:a}}function BalanceISODateTime(e,t,r,n,o,a,i,l,s){var u=BalanceTime(n,o,a,i,l,s),c=u.deltaDays,d=u.hour,m=u.minute,h=u.second,f=u.millisecond,v=u.microsecond,T=u.nanosecond,p=BalanceISODate(e,t,r+c);return{year:p.year,month:p.month,day:p.day,hour:d,minute:m,second:h,millisecond:f,microsecond:v,nanosecond:T}}function BalanceTime(e,t,r,n,o,a){var i=e,l=t,s=r,u=n,c=o,d=a;if(!(se(i)&&se(l)&&se(s)&&se(u)&&se(c)&&se(d)))throw new RangeError("infinity is out of range");return c+=oe(d/1e3),d=NonNegativeModulo(d,1e3),u+=oe(c/1e3),c=NonNegativeModulo(c,1e3),s+=oe(u/1e3),u=NonNegativeModulo(u,1e3),l+=oe(s/60),s=NonNegativeModulo(s,60),i+=oe(l/60),l=NonNegativeModulo(l,60),{deltaDays:oe(i/24),hour:i=NonNegativeModulo(i,24),minute:l,second:s,millisecond:u,microsecond:c,nanosecond:d}}function TotalDurationNanoseconds(e,r,n,o,a,i,l,s){var u=t.BigInt(e),c=t.BigInt(l);0!==e&&(c=t.subtract(t.BigInt(l),t.BigInt(s)));var d=t.add(t.BigInt(r),t.multiply(u,t.BigInt(24))),m=t.add(t.BigInt(n),t.multiply(d,ge)),h=t.add(t.BigInt(o),t.multiply(m,ge)),f=t.add(t.BigInt(a),t.multiply(h,De)),v=t.add(t.BigInt(i),t.multiply(f,De));return t.add(t.BigInt(c),t.multiply(v,De))}function NanosecondsToDays(e,r){var o=GetIntrinsic("%Temporal.Instant%"),v=ae(t.toNumber(e)),T=t.BigInt(e),p=864e11;if(0===v)return{days:0,nanoseconds:pe,dayLengthNs:p};if(!IsTemporalZonedDateTime(r)){var D,S=divmod(T,t.BigInt(p));return D=S.quotient,T=S.remainder,{days:t.toNumber(D),nanoseconds:T,dayLengthNs:p}}var I=GetSlot(r,n),w=GetSlot(r,y),_=t.add(I,T),C=new o(_),G=GetSlot(r,g),b=GetSlot(r,f),E=BuiltinTimeZoneGetPlainDateTimeFor(G,w,b),O=BuiltinTimeZoneGetPlainDateTimeFor(G,C,b),B=DifferenceISODateTime(GetSlot(E,a),GetSlot(E,i),GetSlot(E,l),GetSlot(E,s),GetSlot(E,u),GetSlot(E,c),GetSlot(E,d),GetSlot(E,m),GetSlot(E,h),GetSlot(O,a),GetSlot(O,i),GetSlot(O,l),GetSlot(O,s),GetSlot(O,u),GetSlot(O,c),GetSlot(O,d),GetSlot(O,m),GetSlot(O,h),b,"day",he(null)).days,k=AddZonedDateTime(w,G,b,0,0,0,B,0,0,0,0,0,0);if(1===v)for(;B>0&&t.greaterThan(k,_);)k=AddZonedDateTime(w,G,b,0,0,0,--B,0,0,0,0,0,0);T=t.subtract(_,k);var A=!1,M=new o(k);do{var R=AddZonedDateTime(M,G,b,0,0,0,v,0,0,0,0,0,0),P=GetSlot(M,n);p=t.toNumber(t.subtract(R,P)),(A=t.greaterThan(t.multiply(t.subtract(T,t.BigInt(p)),t.BigInt(v)),pe))&&(T=t.subtract(T,t.BigInt(p)),M=new o(R),B+=v)}while(A);return{days:B,nanoseconds:T,dayLengthNs:ne(p)}}function BalanceDuration(e,r,o,a,i,l,s,u){var c,d,m,h,v,T,p=arguments.length>8&&void 0!==arguments[8]?arguments[8]:void 0,D=e;if(IsTemporalZonedDateTime(p)){var S=AddZonedDateTime(GetSlot(p,y),GetSlot(p,g),GetSlot(p,f),0,0,0,D,r,o,a,i,l,s),I=GetSlot(p,n);c=t.subtract(S,I)}else c=TotalDurationNanoseconds(D,r,o,a,i,l,s,0);if("year"===u||"month"===u||"week"===u||"day"===u){var w=NanosecondsToDays(c,p);D=w.days,c=w.nanoseconds}else D=0;var _=t.lessThan(c,pe)?-1:1;switch(c=abs(c),d=m=h=v=T=pe,u){case"year":case"month":case"week":case"day":case"hour":var C=divmod(c,De);d=C.quotient,c=C.remainder;var G=divmod(d,De);m=G.quotient,d=G.remainder;var b=divmod(m,De);h=b.quotient,m=b.remainder;var E=divmod(h,ge);v=E.quotient,h=E.remainder;var O=divmod(v,ge);T=O.quotient,v=O.remainder;break;case"minute":var B=divmod(c,De);d=B.quotient,c=B.remainder;var k=divmod(d,De);m=k.quotient,d=k.remainder;var A=divmod(m,De);h=A.quotient,m=A.remainder;var M=divmod(h,ge);v=M.quotient,h=M.remainder;break;case"second":var R=divmod(c,De);d=R.quotient,c=R.remainder;var P=divmod(d,De);m=P.quotient,d=P.remainder;var j=divmod(m,De);h=j.quotient,m=j.remainder;break;case"millisecond":var Z=divmod(c,De);d=Z.quotient,c=Z.remainder;var Y=divmod(d,De);m=Y.quotient,d=Y.remainder;break;case"microsecond":var N=divmod(c,De);d=N.quotient,c=N.remainder;break;case"nanosecond":break;default:throw new Error("assert not reached")}var J=t.toNumber(T)*_,L=t.toNumber(v)*_,H=t.toNumber(h)*_,U=t.toNumber(m)*_,x=t.toNumber(d)*_,q=t.toNumber(c)*_;return{days:D,hours:J,minutes:L,seconds:H,milliseconds:U,microseconds:x,nanoseconds:q}}function UnbalanceDurationRelative(e,t,r,n,o,a){var i,l,s=e,u=t,c=r,d=n,m=GetIntrinsic("%Temporal.Duration%"),h=DurationSign(s,u,c,d,0,0,0,0,0,0);a&&(i=GetSlot(l=ToTemporalDate(a),f));var v=new m(h),T=new m(0,h),p=new m(0,0,h);switch(o){case"year":break;case"month":if(!i)throw new RangeError("a starting point is required for months balancing");for(var y=i.dateAdd,g=i.dateUntil,D=l;ne(s)>0;){var I=CalendarDateAdd(i,D,v,void 0,y),w=he(null);w.largestUnit="month";var _=CalendarDateUntil(i,D,I,w,g);D=I,u+=GetSlot(_,S),s-=h}break;case"week":if(!i)throw new RangeError("a starting point is required for weeks balancing");for(;ne(s)>0;){var C=MoveRelativeDate(i,l,v);l=C.relativeTo,d+=C.days,s-=h}for(;ne(u)>0;){var G=MoveRelativeDate(i,l,T);l=G.relativeTo,d+=G.days,u-=h}break;default:for(;ne(s)>0;){if(!i)throw new RangeError("a starting point is required for balancing calendar units");var b=MoveRelativeDate(i,l,v);l=b.relativeTo,d+=b.days,s-=h}for(;ne(u)>0;){if(!i)throw new RangeError("a starting point is required for balancing calendar units");var E=MoveRelativeDate(i,l,T);l=E.relativeTo,d+=E.days,u-=h}for(;ne(c)>0;){if(!i)throw new RangeError("a starting point is required for balancing calendar units");var O=MoveRelativeDate(i,l,p);l=O.relativeTo,d+=O.days,c-=h}}return{years:s,months:u,weeks:c,days:d}}function CalculateOffsetShift(e,t,r,n,o){if(IsTemporalZonedDateTime(e)){var a=GetSlot(e,y),i=GetSlot(e,g),l=GetSlot(e,f),s=GetOffsetNanosecondsFor(i,a),u=AddZonedDateTime(a,i,l,t,r,n,o,0,0,0,0,0,0);return GetOffsetNanosecondsFor(i,new(GetIntrinsic("%Temporal.Instant%"))(u))-s}return 0}function CreateNegatedTemporalDuration(e){return new(GetIntrinsic("%Temporal.Duration%"))(-GetSlot(e,D),-GetSlot(e,S),-GetSlot(e,I),-GetSlot(e,w),-GetSlot(e,_),-GetSlot(e,C),-GetSlot(e,G),-GetSlot(e,b),-GetSlot(e,E),-GetSlot(e,O))}function ConstrainToRange(e,t,r){return te(r,re(t,e))}function ConstrainISODate(e,t,r){var n=ConstrainToRange(t,1,12);return{year:e,month:n,day:ConstrainToRange(r,1,ISODaysInMonth(e,n))}}function RejectToRange(e,t,r){if(er)throw new RangeError("value out of range: ".concat(t," <= ").concat(e," <= ").concat(r))}function RejectISODate(e,t,r){RejectToRange(t,1,12),RejectToRange(r,1,ISODaysInMonth(e,t))}function RejectDateRange(e,t,r){RejectDateTimeRange(e,t,r,12,0,0,0,0,0)}function RejectTime(e,t,r,n,o,a){RejectToRange(e,0,23),RejectToRange(t,0,59),RejectToRange(r,0,59),RejectToRange(n,0,999),RejectToRange(o,0,999),RejectToRange(a,0,999)}function RejectDateTime(e,t,r,n,o,a,i,l,s){RejectISODate(e,t,r),RejectTime(n,o,a,i,l,s)}function RejectDateTimeRange(e,t,r,n,o,a,i,l,s){if(RejectToRange(e,be,Ee),e===be&&null==GetEpochFromISOParts(e,t,r+1,n,o,a,i,l,s-1)||e===Ee&&null==GetEpochFromISOParts(e,t,r-1,n,o,a,i,l,s+1))throw new RangeError("DateTime outside of supported range")}function ValidateEpochNanoseconds(e){if(t.lessThan(e,Ce)||t.greaterThan(e,Ge))throw new RangeError("Instant outside of supported range")}function RejectDuration(e,t,r,n,o,a,i,l,s,u){for(var c=DurationSign(e,t,r,n,o,a,i,l,s,u),d=0,m=[e,t,r,n,o,a,i,l,s,u];d0&&(a=t.add(a,t.BigInt(l)));break;case"floor":l<0&&(a=t.add(a,t.BigInt(l)));break;case"trunc":break;case"halfExpand":t.toNumber(abs(t.multiply(i,t.BigInt(2))))>=r&&(a=t.add(a,t.BigInt(l)))}return t.multiply(a,t.BigInt(r))}function RoundInstant(e,r,n,o){var a=t.remainder(e,t.BigInt(864e11));t.lessThan(a,pe)&&(a=t.add(a,t.BigInt(864e11)));var i=t.subtract(e,a),l=RoundNumberToIncrement(a,qe[n]*r,o);return t.add(i,l)}function RoundISODateTime(e,t,r,n,o,a,i,l,s,u,c,d){var m=arguments.length>12&&void 0!==arguments[12]?arguments[12]:864e11,h=RoundTime(n,o,a,i,l,s,u,c,d,m),f=h.deltaDays,v=h.hour,T=h.minute,p=h.second,y=h.millisecond,g=h.microsecond,D=h.nanosecond,S=BalanceISODate(e,t,r+f),I=S.year,w=S.month,_=S.day;return{year:I,month:w,day:_,hour:v,minute:T,second:p,millisecond:y,microsecond:g,nanosecond:D}}function RoundTime(e,r,n,o,a,i,l,s,u){var c=arguments.length>9&&void 0!==arguments[9]?arguments[9]:864e11,d=pe;switch(s){case"day":case"hour":d=t.BigInt(e);case"minute":d=t.add(t.multiply(d,ge),t.BigInt(r));case"second":d=t.add(t.multiply(d,ge),t.BigInt(n));case"millisecond":d=t.add(t.multiply(d,De),t.BigInt(o));case"microsecond":d=t.add(t.multiply(d,De),t.BigInt(a));case"nanosecond":d=t.add(t.multiply(d,De),t.BigInt(i))}var m="day"===s?c:qe[s],h=RoundNumberToIncrement(d,m*l,u),f=t.toNumber(t.divide(h,t.BigInt(m)));switch(s){case"day":return{deltaDays:f,hour:0,minute:0,second:0,millisecond:0,microsecond:0,nanosecond:0};case"hour":return BalanceTime(f,0,0,0,0,0);case"minute":return BalanceTime(e,f,0,0,0,0);case"second":return BalanceTime(e,r,f,0,0,0);case"millisecond":return BalanceTime(e,r,n,f,0,0);case"microsecond":return BalanceTime(e,r,n,o,f,0);case"nanosecond":return BalanceTime(e,r,n,o,a,f);default:throw new Error("Invalid unit ".concat(s))}}function DaysUntil(e,t){return DifferenceISODate(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l),GetSlot(t,a),GetSlot(t,i),GetSlot(t,l),"day").days}function MoveRelativeDate(e,t,r){var n=CalendarDateAdd(e,t,r,void 0);return{relativeTo:n,days:DaysUntil(t,n)}}function MoveRelativeZonedDateTime(e,t,r,n,o){var a=GetSlot(e,g),i=GetSlot(e,f);return CreateTemporalZonedDateTime(AddZonedDateTime(GetSlot(e,y),a,i,t,r,n,o,0,0,0,0,0,0),a,i)}function AdjustRoundedDurationDays(e,r,n,o,a,i,l,s,u,c,d,m,h,v){var T=e,p=r,D=n,S=o,I=a,w=i,_=l,C=s,G=u,b=c;if(!IsTemporalZonedDateTime(v)||"year"===m||"month"===m||"week"===m||"day"===m||"nanosecond"===m&&1===d)return{years:T,months:p,weeks:D,days:S,hours:I,minutes:w,seconds:_,milliseconds:C,microseconds:G,nanoseconds:b};var E=TotalDurationNanoseconds(0,I,w,_,C,G,b,0),O=ae(t.toNumber(E)),B=GetSlot(v,g),k=GetSlot(v,f),A=AddZonedDateTime(GetSlot(v,y),B,k,T,p,D,S,0,0,0,0,0,0),M=AddZonedDateTime(new(GetIntrinsic("%Temporal.Instant%"))(A),B,k,0,0,0,O,0,0,0,0,0,0),R=t.subtract(M,A);if(t.greaterThanOrEqual(t.multiply(t.subtract(E,R),t.BigInt(O)),pe)){var P=AddDuration(T,p,D,S,0,0,0,0,0,0,0,0,0,O,0,0,0,0,0,0,v);T=P.years,p=P.months,D=P.weeks,S=P.days,E=RoundInstant(t.subtract(E,R),d,m,h);var j=BalanceDuration(0,0,0,0,0,0,t.toNumber(E),"hour");I=j.hours,w=j.minutes,_=j.seconds,C=j.milliseconds,G=j.microseconds,b=j.nanoseconds}return{years:T,months:p,weeks:D,days:S,hours:I,minutes:w,seconds:_,milliseconds:C,microseconds:G,nanoseconds:b}}function RoundDuration(e,r,n,o,a,i,l,s,u,c,d,m,h){var v,T,p,y,g=arguments.length>13&&void 0!==arguments[13]?arguments[13]:void 0,D=e,S=r,I=n,w=o,_=a,C=i,G=l,b=s,E=u,O=t.BigInt(c),B=GetIntrinsic("%Temporal.Duration%"),k=g;if(k){if(IsTemporalZonedDateTime(k))T=k,k=ToTemporalDate(k);else if(!IsTemporalDate(k))throw new TypeError("starting point must be PlainDate or ZonedDateTime");v=GetSlot(k,f)}if("year"===m||"month"===m||"week"===m||"day"===m){var A,M,R;O=TotalDurationNanoseconds(0,_,C,G,b,E,c,0),T&&(A=MoveRelativeZonedDateTime(T,D,S,I,w));var P=NanosecondsToDays(O,A);M=P.days,O=P.nanoseconds,R=P.dayLengthNs,p=t.BigInt(R),w+=M,_=C=G=b=E=0}switch(m){case"year":if(!v)throw new RangeError("A starting point is required for years rounding");var j=new B(D),Z=v.dateAdd,Y=CalendarDateAdd(v,k,j,void 0,Z),N=new B(D,S,I),J=CalendarDateAdd(v,k,N,void 0,Z),L=DaysUntil(Y,J),H=CalendarDateAdd(v,k=Y,{days:w+=L},void 0,Z),U=he(null);U.largestUnit="year";var x=CalendarDateUntil(v,k,H,U).years;D+=x;var q=k,z=DaysUntil(q,k=CalendarDateAdd(v,k,{years:x},void 0,Z)),W=new B((w-=z)<0?-1:1),V=MoveRelativeDate(v,k,W),$=V.days;$=ne($);var X=t.multiply(t.BigInt($),p),K=RoundNumberToIncrement(O=t.add(t.add(t.multiply(X,t.BigInt(D)),t.multiply(t.BigInt(w),p)),O),t.toNumber(t.multiply(X,t.BigInt(d))),h);y=t.toNumber(O)/t.toNumber(X),D=t.toNumber(t.divide(K,X)),O=pe,S=I=w=0;break;case"month":if(!v)throw new RangeError("A starting point is required for months rounding");var Q=new B(D,S),ee=v.dateAdd,te=CalendarDateAdd(v,k,Q,void 0,ee),re=new B(D,S,I),oe=CalendarDateAdd(v,k,re,void 0,ee),ie=DaysUntil(te,oe);k=te;var le,se=ae(w+=ie),ue=new B(0,w<0?-1:1),ce=MoveRelativeDate(v,k,ue);for(k=ce.relativeTo,le=ce.days;ne(w)>=ne(le);){S+=se,w-=le;var de=MoveRelativeDate(v,k,ue);k=de.relativeTo,le=de.days}le=ne(le);var me=t.multiply(t.BigInt(le),p),fe=RoundNumberToIncrement(O=t.add(t.add(t.multiply(me,t.BigInt(S)),t.multiply(t.BigInt(w),p)),O),t.toNumber(t.multiply(me,t.BigInt(d))),h);y=t.toNumber(O)/t.toNumber(me),S=t.toNumber(t.divide(fe,me)),O=pe,I=w=0;break;case"week":if(!v)throw new RangeError("A starting point is required for weeks rounding");var ve,Te=ae(w),ye=new B(0,0,w<0?-1:1),ge=MoveRelativeDate(v,k,ye);for(k=ge.relativeTo,ve=ge.days;ne(w)>=ne(ve);){I+=Te,w-=ve;var we=MoveRelativeDate(v,k,ye);k=we.relativeTo,ve=we.days}ve=ne(ve);var _e=t.multiply(t.BigInt(ve),p),Ce=RoundNumberToIncrement(O=t.add(t.add(t.multiply(_e,t.BigInt(I)),t.multiply(t.BigInt(w),p)),O),t.toNumber(t.multiply(_e,t.BigInt(d))),h);y=t.toNumber(O)/t.toNumber(_e),I=t.toNumber(t.divide(Ce,_e)),O=pe,w=0;break;case"day":var Ge=p,be=RoundNumberToIncrement(O=t.add(t.multiply(Ge,t.BigInt(w)),O),t.toNumber(t.multiply(Ge,t.BigInt(d))),h);y=t.toNumber(O)/t.toNumber(Ge),w=t.toNumber(t.divide(be,Ge)),O=pe;break;case"hour":var Ee=36e11,Oe=t.multiply(t.BigInt(_),t.BigInt(36e11));Oe=t.add(Oe,t.multiply(t.BigInt(C),t.BigInt(6e10))),Oe=t.add(Oe,t.multiply(t.BigInt(G),Ie)),Oe=t.add(Oe,t.multiply(t.BigInt(b),Se)),Oe=t.add(Oe,t.multiply(t.BigInt(E),De)),Oe=t.add(Oe,O),y=t.toNumber(Oe)/Ee;var Be=RoundNumberToIncrement(Oe,Ee*d,h);_=t.toNumber(t.divide(Be,t.BigInt(Ee))),O=pe,C=G=b=E=0;break;case"minute":var Fe=6e10,ke=t.multiply(t.BigInt(C),t.BigInt(6e10));ke=t.add(ke,t.multiply(t.BigInt(G),Ie)),ke=t.add(ke,t.multiply(t.BigInt(b),Se)),ke=t.add(ke,t.multiply(t.BigInt(E),De)),ke=t.add(ke,O),y=t.toNumber(ke)/Fe;var Ae=RoundNumberToIncrement(ke,Fe*d,h);C=t.toNumber(t.divide(Ae,t.BigInt(Fe))),O=pe,G=b=E=0;break;case"second":var Me=1e9,Re=t.multiply(t.BigInt(G),Ie);Re=t.add(Re,t.multiply(t.BigInt(b),Se)),Re=t.add(Re,t.multiply(t.BigInt(E),De)),Re=t.add(Re,O),y=t.toNumber(Re)/Me;var Pe=RoundNumberToIncrement(Re,Me*d,h);G=t.toNumber(t.divide(Pe,t.BigInt(Me))),O=pe,b=E=0;break;case"millisecond":var je=1e6,Ze=t.multiply(t.BigInt(b),Se);Ze=t.add(Ze,t.multiply(t.BigInt(E),De)),Ze=t.add(Ze,O),y=t.toNumber(Ze)/je;var Ye=RoundNumberToIncrement(Ze,je*d,h);b=t.toNumber(t.divide(Ye,t.BigInt(je))),O=pe,E=0;break;case"microsecond":var Ne=1e3,Je=t.multiply(t.BigInt(E),De);Je=t.add(Je,O),y=t.toNumber(Je)/Ne;var Le=RoundNumberToIncrement(Je,Ne*d,h);E=t.toNumber(t.divide(Le,t.BigInt(Ne))),O=pe;break;case"nanosecond":y=t.toNumber(O),O=RoundNumberToIncrement(O,d,h)}return{years:D,months:S,weeks:I,days:w,hours:_,minutes:C,seconds:G,milliseconds:b,microseconds:E,nanoseconds:t.toNumber(O),total:y}}function CompareISODate(e,t,r,n,o,a){for(var i=0,l=[[e,n],[t,o],[r,a]];i0?1:e}function GetOptionsObject(e){if(void 0===e)return he(null);if(IsObject(e)&&null!==e)return e;throw new TypeError("Options parameter must be an object, not ".concat(null===e?"null":"".concat(_typeof(e))))}function CreateOnePropObject(e,t){var r=he(null);return r[e]=t,r}function GetOption(e,t,r,n){var o=e[t];if(void 0!==o){if(o=ToString(o),!r.includes(o))throw new RangeError("".concat(t," must be one of ").concat(r.join(", "),", not ").concat(o));return o}return n}function IsBuiltinCalendar(e){return K.call(Ae,e)}var xe=new RegExp("^".concat(L.source,"$"));function bisect(e,r,n){for(var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e(r),a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:e(n),i=t.BigInt(r),l=t.BigInt(n),s=o,u=a;t.greaterThan(t.subtract(l,i),ye);){var c=t.divide(t.add(i,l),t.BigInt(2)),d=e(c);if(d===s)i=c,s=d;else{if(d!==u)throw new Error("invalid state in bisection ".concat(s," - ").concat(d," - ").concat(u));l=c,u=d}}return l}var qe={hour:36e11,minute:6e10,second:1e9,millisecond:1e6,microsecond:1e3,nanosecond:1},ze=Symbol("date"),We=Symbol("ym"),Ve=Symbol("md"),$e=Symbol("time"),Xe=Symbol("datetime"),Ke=Symbol("zoneddatetime"),Qe=Symbol("instant"),et=Symbol("original"),tt=Symbol("timezone"),rt=Symbol("timezone-id-given"),nt=Symbol("calendar-id"),ot=Symbol("locale"),at=Symbol("options"),it=function descriptor(e){return{value:e,enumerable:!0,writable:!1,configurable:!0}},lt=globalThis.Intl.DateTimeFormat,st=Object.assign,ut=Object.prototype.hasOwnProperty,ct=Reflect.apply;function getPropLazy(e,t){var r=e[t];return"function"==typeof r&&(r=new lt(e[ot],r(e[at])),e[t]=r),r}function getResolvedTimeZoneLazy(e){var t=e[tt];return"string"==typeof t&&(t=ToTemporalTimeZone(t),e[tt]=t),t}function DateTimeFormatImpl(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(this instanceof DateTimeFormatImpl))return new DateTimeFormatImpl(e,t);var r=void 0!==t,n=r?st({},t):{},o=new lt(e,n),a=o.resolvedOptions();if(r){var i=st({},a);for(var l in i)ct(ut,n,[l])||delete i[l];this[at]=i}else this[at]=n;this[rt]=n.timeZone?n.timeZone:null,this[ot]=a.locale,this[et]=o,this[tt]=a.timeZone,this[nt]=a.calendar,this[ze]=dateAmend,this[We]=yearMonthAmend,this[Ve]=monthDayAmend,this[$e]=timeAmend,this[Xe]=datetimeAmend,this[Ke]=zonedDateTimeAmend,this[Qe]=instantAmend}Object.defineProperty(DateTimeFormatImpl,"name",{writable:!0,value:"DateTimeFormat"}),DateTimeFormatImpl.supportedLocalesOf=function(e,t){return lt.supportedLocalesOf(e,t)};var dt={resolvedOptions:it((function resolvedOptions(){return this[et].resolvedOptions()})),format:it((function format(e){var t,r=extractOverrides(e,this),n=r.instant,o=r.formatter,a=r.timeZone;if(n&&o)return(o=adjustFormatterTimeZone(o,a)).format(n.epochMilliseconds);for(var i=arguments.length,l=new Array(i>1?i-1:0),s=1;s1?i-1:0),s=1;s0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=st({},e),n=0,o=["year","month","day","hour","minute","second","weekday","dayPeriod","timeZoneName","dateStyle","timeStyle"];n1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return DifferenceTemporalInstant("until",this,e,t)}},{key:"since",value:function since(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return DifferenceTemporalInstant("since",this,e,t)}},{key:"round",value:function round(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");var t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",Le),o=ToTemporalRoundingMode(t,"halfExpand"),a=ToTemporalRoundingIncrement(t,{hour:24,minute:1440,second:86400,millisecond:864e5,microsecond:864e8,nanosecond:864e11}[r],!0);return new Instant(RoundInstant(GetSlot(this,n),a,r,o))}},{key:"equals",value:function equals(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");var r=ToTemporalInstant(e),o=GetSlot(this,n),a=GetSlot(r,n);return t.equal(t.BigInt(o),t.BigInt(a))}},{key:"toString",value:function toString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=t.timeZone;void 0!==r&&(r=ToTemporalTimeZone(r));var o=ToSecondsStringPrecision(t),a=o.precision,i=o.unit,l=o.increment,s=ToTemporalRoundingMode(t,"trunc"),u=GetSlot(this,n),c=RoundInstant(u,l,i,s),d=new Instant(c);return TemporalInstantToString(d,r,a)}},{key:"toJSON",value:function toJSON(){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return TemporalInstantToString(this,void 0,"auto")}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.Instant")}},{key:"toZonedDateTime",value:function toZonedDateTime(e){if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument in toZonedDateTime");var t=e.calendar;if(void 0===t)throw new TypeError("missing calendar property in toZonedDateTime");var r=ToTemporalCalendar(t),o=e.timeZone;if(void 0===o)throw new TypeError("missing timeZone property in toZonedDateTime");var a=ToTemporalTimeZone(o);return CreateTemporalZonedDateTime(GetSlot(this,n),a,r)}},{key:"toZonedDateTimeISO",value:function toZonedDateTimeISO(e){var t=e;if(!IsTemporalInstant(this))throw new TypeError("invalid receiver");if(IsObject(t)){var r=t.timeZone;void 0!==r&&(t=r)}var o=ToTemporalTimeZone(t),a=GetISO8601Calendar();return CreateTemporalZonedDateTime(GetSlot(this,n),o,a)}}],[{key:"fromEpochSeconds",value:function fromEpochSeconds(e){var r=ToNumber(e),n=t.multiply(t.BigInt(r),Ie);return ValidateEpochNanoseconds(n),new Instant(n)}},{key:"fromEpochMilliseconds",value:function fromEpochMilliseconds(e){var r=ToNumber(e),n=t.multiply(t.BigInt(r),Se);return ValidateEpochNanoseconds(n),new Instant(n)}},{key:"fromEpochMicroseconds",value:function fromEpochMicroseconds(e){var r=ToBigInt(e),n=t.multiply(r,De);return ValidateEpochNanoseconds(n),new Instant(n)}},{key:"fromEpochNanoseconds",value:function fromEpochNanoseconds(e){var t=ToBigInt(e);return ValidateEpochNanoseconds(t),new Instant(t)}},{key:"from",value:function from(e){return IsTemporalInstant(e)?new Instant(GetSlot(e,n)):ToTemporalInstant(e)}},{key:"compare",value:function compare(e,r){var o=ToTemporalInstant(e),a=ToTemporalInstant(r),i=GetSlot(o,n),l=GetSlot(a,n);return t.lessThan(i,l)?-1:t.greaterThan(i,l)?1:0}}]),Instant}();MakeIntrinsicClass(ft,"Temporal.Instant");var vt=["month","monthCode","year","era","eraYear"],Tt=Array.prototype.includes,pt=Array.prototype.push,yt=globalThis.Intl.DateTimeFormat,gt=Array.prototype.sort,Dt=Math.abs,St=Math.floor,It=Object.entries,wt=Object.keys,_t={},Ct=function(){function Calendar(e){if(_classCallCheck(this,Calendar),arguments.length<1)throw new RangeError("missing argument: id is required");var t=ToString(e);if(!IsBuiltinCalendar(t))throw new RangeError("invalid calendar identifier ".concat(t));CreateSlots(this),SetSlot(this,B,t)}return _createClass(Calendar,[{key:"id",get:function get(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ToString(this)}},{key:"dateFromFields",value:function dateFromFields(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");var r=GetOptionsObject(t);return _t[GetSlot(this,B)].dateFromFields(e,r,this)}},{key:"yearMonthFromFields",value:function yearMonthFromFields(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");var r=GetOptionsObject(t);return _t[GetSlot(this,B)].yearMonthFromFields(e,r,this)}},{key:"monthDayFromFields",value:function monthDayFromFields(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid fields");var r=GetOptionsObject(t);return _t[GetSlot(this,B)].monthDayFromFields(e,r,this)}},{key:"fields",value:function fields(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var t,r=[],n=new Set(["year","month","monthCode","day","hour","minute","second","millisecond","microsecond","nanosecond"]),o=_createForOfIteratorHelper(e);try{for(o.s();!(t=o.n()).done;){var a=t.value;if("string"!=typeof a)throw new TypeError("invalid fields");if(!n.has(a))throw new RangeError("invalid field name ".concat(a));n.delete(a),pt.call(r,a)}}catch(e){o.e(e)}finally{o.f()}return _t[GetSlot(this,B)].fields(r)}},{key:"mergeFields",value:function mergeFields(e,t){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return _t[GetSlot(this,B)].mergeFields(e,t)}},{key:"dateAdd",value:function dateAdd(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var n=ToTemporalDate(e),o=ToTemporalDuration(t),a=GetOptionsObject(r),i=ToTemporalOverflow(a),l=BalanceDuration(GetSlot(o,w),GetSlot(o,_),GetSlot(o,C),GetSlot(o,G),GetSlot(o,b),GetSlot(o,E),GetSlot(o,O),"day"),s=l.days;return _t[GetSlot(this,B)].dateAdd(n,GetSlot(o,D),GetSlot(o,S),GetSlot(o,I),s,i,this)}},{key:"dateUntil",value:function dateUntil(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var n=ToTemporalDate(e),o=ToTemporalDate(t),a=GetOptionsObject(r),i=GetTemporalUnit(a,"largestUnit","date","auto");"auto"===i&&(i="day");var l=_t[GetSlot(this,B)].dateUntil(n,o,i),s=l.years,u=l.months,c=l.weeks,d=l.days,m=GetIntrinsic("%Temporal.Duration%");return new m(s,u,c,d,0,0,0,0,0,0)}},{key:"year",value:function year(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].year(t)}},{key:"month",value:function month(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");if(IsTemporalMonthDay(t))throw new TypeError("use monthCode on PlainMonthDay instead");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].month(t)}},{key:"monthCode",value:function monthCode(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||IsTemporalMonthDay(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].monthCode(t)}},{key:"day",value:function day(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalMonthDay(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].day(t)}},{key:"era",value:function era(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].era(t)}},{key:"eraYear",value:function eraYear(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].eraYear(t)}},{key:"dayOfWeek",value:function dayOfWeek(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e);return _t[GetSlot(this,B)].dayOfWeek(t)}},{key:"dayOfYear",value:function dayOfYear(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e);return _t[GetSlot(this,B)].dayOfYear(t)}},{key:"weekOfYear",value:function weekOfYear(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e);return _t[GetSlot(this,B)].weekOfYear(t)}},{key:"daysInWeek",value:function daysInWeek(e){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e);return _t[GetSlot(this,B)].daysInWeek(t)}},{key:"daysInMonth",value:function daysInMonth(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].daysInMonth(t)}},{key:"daysInYear",value:function daysInYear(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].daysInYear(t)}},{key:"monthsInYear",value:function monthsInYear(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].monthsInYear(t)}},{key:"inLeapYear",value:function inLeapYear(e){var t=e;if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return IsTemporalYearMonth(t)||(t=ToTemporalDate(t)),_t[GetSlot(this,B)].inLeapYear(t)}},{key:"toString",value:function toString(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return GetSlot(this,B)}},{key:"toJSON",value:function toJSON(){if(!IsTemporalCalendar(this))throw new TypeError("invalid receiver");return ToString(this)}}],[{key:"from",value:function from(e){return ToTemporalCalendar(e)}}]),Calendar}();function monthCodeNumberPart(e){if(!e.startsWith("M"))throw new RangeError("Invalid month code: ".concat(e,". Month codes must start with M."));var t=+e.slice(1);if(isNaN(t))throw new RangeError("Invalid month code: ".concat(e));return t}function buildMonthCode(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"M".concat(e.toString().padStart(2,"0")).concat(t?"L":"")}function resolveNonLunisolarMonth(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:12,n=e.month,o=e.monthCode;if(void 0===o){if(void 0===n)throw new TypeError("Either month or monthCode are required");"reject"===t&&RejectToRange(n,1,r),"constrain"===t&&(n=ConstrainToRange(n,1,r)),o=buildMonthCode(n)}else{var a=monthCodeNumberPart(o);if(void 0!==n&&n!==a)throw new RangeError("monthCode ".concat(o," and month ").concat(n," must match if both are present"));if(o!==buildMonthCode(a))throw new RangeError("Invalid month code: ".concat(o));if((n=a)<1||n>r)throw new RangeError("Invalid monthCode: ".concat(o))}return _objectSpread2(_objectSpread2({},e),{},{month:n,monthCode:o})}MakeIntrinsicClass(Ct,"Temporal.Calendar"),DefineIntrinsic("Temporal.Calendar.from",Ct.from),_t.iso8601={dateFromFields:function dateFromFields(e,t,r){var n=ToTemporalOverflow(t),o=PrepareTemporalFields(e,["day","month","monthCode","year"],["year","day"]),a=o=resolveNonLunisolarMonth(o),i=a.year,l=a.month,s=a.day,u=RegulateISODate(i,l,s,n);return CreateTemporalDate(i=u.year,l=u.month,s=u.day,r)},yearMonthFromFields:function yearMonthFromFields(e,t,r){var n=ToTemporalOverflow(t),o=PrepareTemporalFields(e,["month","monthCode","year"],["year"]),a=o=resolveNonLunisolarMonth(o),i=a.year,l=a.month,s=function RegulateISOYearMonth(e,t,r){var n=e,o=t;switch(r){case"reject":RejectISODate(n,o,1);break;case"constrain":var a=ConstrainISODate(n,o);n=a.year,o=a.month}return{year:n,month:o}}(i,l,n);return CreateTemporalYearMonth(i=s.year,l=s.month,r,1)},monthDayFromFields:function monthDayFromFields(e,t,r){var n=ToTemporalOverflow(t),o=PrepareTemporalFields(e,["day","month","monthCode","year"],["day"]);if(void 0!==o.month&&void 0===o.year&&void 0===o.monthCode)throw new TypeError("either year or monthCode required with month");var a=void 0===o.monthCode,i=o=resolveNonLunisolarMonth(o),l=i.month,s=i.day,u=i.year,c=RegulateISODate(a?u:1972,l,s,n);return CreateTemporalMonthDay(l=c.month,s=c.day,r,1972)},fields:function fields(e){return e},mergeFields:function mergeFields(e,t){var r,n={},o=_createForOfIteratorHelper(wt(e));try{for(o.s();!(r=o.n()).done;){var a=r.value;"month"!==a&&"monthCode"!==a&&(n[a]=e[a])}}catch(e){o.e(e)}finally{o.f()}var i,l=wt(t),s=_createForOfIteratorHelper(l);try{for(s.s();!(i=s.n()).done;){var u=i.value;n[u]=t[u]}}catch(e){s.e(e)}finally{s.f()}if(!Tt.call(l,"month")&&!Tt.call(l,"monthCode")){var c=e.month,d=e.monthCode;void 0!==c&&(n.month=c),void 0!==d&&(n.monthCode=d)}return n},dateAdd:function dateAdd(e,t,r,n,o,s,u){var c=GetSlot(e,a),d=GetSlot(e,i),m=GetSlot(e,l),h=AddISODate(c,d,m,t,r,n,o,s);return CreateTemporalDate(c=h.year,d=h.month,m=h.day,u)},dateUntil:function dateUntil(e,t,r){return DifferenceISODate(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l),GetSlot(t,a),GetSlot(t,i),GetSlot(t,l),r)},year:function year(e){return GetSlot(e,a)},era:function era(){},eraYear:function eraYear(){},month:function month(e){return GetSlot(e,i)},monthCode:function monthCode(e){return buildMonthCode(GetSlot(e,i))},day:function day(e){return GetSlot(e,l)},dayOfWeek:function dayOfWeek(e){return DayOfWeek(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l))},dayOfYear:function dayOfYear(e){return DayOfYear(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l))},weekOfYear:function weekOfYear(e){return function WeekOfYear(e,t,r){var n=DayOfYear(e,t,r),o=DayOfWeek(e,t,r)||7,a=DayOfWeek(e,1,1),i=oe((n-o+10)/7);return i<1?5===a||6===a&&LeapYear(e-1)?53:52:53===i&&(LeapYear(e)?366:365)-n<4-o?1:i}(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l))},daysInWeek:function daysInWeek(){return 7},daysInMonth:function daysInMonth(e){return ISODaysInMonth(GetSlot(e,a),GetSlot(e,i))},daysInYear:function daysInYear(e){var t=e;return HasSlot(t,a)||(t=ToTemporalDate(t)),LeapYear(GetSlot(t,a))?366:365},monthsInYear:function monthsInYear(){return 12},inLeapYear:function inLeapYear(e){var t=e;return HasSlot(t,a)||(t=ToTemporalDate(t)),LeapYear(GetSlot(t,a))}};var Gt=function(){function OneObjectCache(e){if(_classCallCheck(this,OneObjectCache),this.map=new Map,this.calls=0,this.hits=0,this.misses=0,this.now=globalThis.performance?globalThis.performance.now():Date.now(),void 0!==e){var t,r=0,n=_createForOfIteratorHelper(e.map.entries());try{for(n.s();!(t=n.n()).done;){var o,a=t.value;if(++r>OneObjectCache.MAX_CACHE_ENTRIES)break;(o=this.map).set.apply(o,_toConsumableArray(a))}}catch(e){n.e(e)}finally{n.f()}}}return _createClass(OneObjectCache,[{key:"get",value:function get(e){var t=this.map.get(e);return t&&(this.hits++,this.report()),this.calls++,t}},{key:"set",value:function set(e,t){this.map.set(e,t),this.misses++,this.report()}},{key:"report",value:function report(){}},{key:"setObject",value:function setObject(e){if(OneObjectCache.objectMap.get(e))throw new RangeError("object already cached");OneObjectCache.objectMap.set(e,this),this.report()}}],[{key:"getCacheForObject",value:function getCacheForObject(e){var t=OneObjectCache.objectMap.get(e);return t||(t=new OneObjectCache,OneObjectCache.objectMap.set(e,t)),t}}]),OneObjectCache}();function toUtcIsoDateString(e){var t=e.isoYear,r=e.isoMonth,n=e.isoDay,o=ISOYearString(t),a=ISODateTimePartString(r),i=ISODateTimePartString(n);return"".concat(o,"-").concat(a,"-").concat(i,"T00:00Z")}function simpleDateDiff(e,t){return{years:e.year-t.year,months:e.month-t.month,days:e.day-t.day}}Gt.objectMap=new WeakMap,Gt.MAX_CACHE_ENTRIES=1e3;var bt=function(){function HelperBase(){_classCallCheck(this,HelperBase),this.eraLength="short",this.hasEra=!0}return _createClass(HelperBase,[{key:"getFormatter",value:function getFormatter(){return void 0===this.formatter&&(this.formatter=new yt("en-US-u-ca-".concat(this.id),{day:"numeric",month:"numeric",year:"numeric",era:this.eraLength,timeZone:"UTC"})),this.formatter}},{key:"isoToCalendarDate",value:function isoToCalendarDate(e,t){var r=this,n=e.year,o=e.month,a=e.day,i=JSON.stringify({func:"isoToCalendarDate",isoYear:n,isoMonth:o,isoDay:a,id:this.id}),l=t.get(i);if(l)return l;var s,u,c=this.getFormatter();try{u=toUtcIsoDateString({isoYear:n,isoMonth:o,isoDay:a}),s=c.formatToParts(new Date(u))}catch(e){throw new RangeError("Invalid ISO date: ".concat(JSON.stringify({isoYear:n,isoMonth:o,isoDay:a})))}var d,m={},h=_createForOfIteratorHelper(s);try{for(h.s();!(d=h.n()).done;){var f=d.value,v=f.type,T=f.value;if("year"===v&&(m.eraYear=+T),"relatedYear"===v&&(m.eraYear=+T),"month"===v){var p=/^([0-9]*)(.*?)$/.exec(T);if(!p||3!=p.length||!p[1]&&!p[2])throw new RangeError("Unexpected month: ".concat(T));if(m.month=p[1]?+p[1]:1,m.month<1)throw new RangeError("Invalid month ".concat(T," from ").concat(u,"[u-ca-").concat(this.id,"]")+" (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)");if(m.month>13)throw new RangeError("Invalid month ".concat(T," from ").concat(u,"[u-ca-").concat(this.id,"]")+" (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)");p[2]&&(m.monthExtra=p[2])}"day"===v&&(m.day=+T),this.hasEra&&"era"===v&&null!=T&&""!==T&&(T=T.split(" (")[0],m.era=T.normalize("NFD").replace(/(?:(?![ \x2D0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\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\u0AF9\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-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\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-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\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-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\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]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])[\s\S])/g,"").replace(" ","-").toLowerCase())}}catch(e){h.e(e)}finally{h.f()}if(void 0===m.eraYear)throw new RangeError("Intl.DateTimeFormat.formatToParts lacks relatedYear in ".concat(this.id," calendar. Try Node 14+ or modern browsers."));if(this.reviseIntlEra){var y=this.reviseIntlEra(m,e),g=y.era,D=y.eraYear;m.era=g,m.eraYear=D}this.checkIcuBugs&&this.checkIcuBugs(e);var S=this.adjustCalendarDate(m,t,"constrain",!0);if(void 0===S.year)throw new RangeError("Missing year converting ".concat(JSON.stringify(e)));if(void 0===S.month)throw new RangeError("Missing month converting ".concat(JSON.stringify(e)));if(void 0===S.day)throw new RangeError("Missing day converting ".concat(JSON.stringify(e)));return t.set(i,S),["constrain","reject"].forEach((function(n){var o=JSON.stringify({func:"calendarToIsoDate",year:S.year,month:S.month,day:S.day,overflow:n,id:r.id});t.set(o,e)})),S}},{key:"validateCalendarDate",value:function validateCalendarDate(e){var t=e.era,r=e.month,n=e.year,o=e.day,a=e.eraYear,i=e.monthCode;if(void 0!==e.monthExtra)throw new RangeError("Unexpected `monthExtra` value");if(void 0===n&&void 0===a)throw new TypeError("year or eraYear is required");if(void 0===r&&void 0===i)throw new TypeError("month or monthCode is required");if(void 0===o)throw new RangeError("Missing day");if(void 0!==i){if("string"!=typeof i)throw new RangeError("monthCode must be a string, not ".concat(_typeof(i)));if(!/^M([01]?\d)(L?)$/.test(i))throw new RangeError("Invalid monthCode: ".concat(i))}if(this.constantEra){if(void 0!==t&&t!==this.constantEra)throw new RangeError("era must be ".concat(this.constantEra,", not ").concat(t));if(void 0!==a&&void 0!==n&&a!==n)throw new RangeError("eraYear ".concat(a," does not match year ").concat(n))}}},{key:"adjustCalendarDate",value:function adjustCalendarDate(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"constrain";if("lunisolar"===this.calendarType)throw new RangeError("Override required for lunisolar calendars");var n=e;if(this.validateCalendarDate(n),this.constantEra){var o=n,a=o.year,i=o.eraYear;n=_objectSpread2(_objectSpread2({},n),{},{era:this.constantEra,year:void 0!==a?a:i,eraYear:void 0!==i?i:a})}var l=this.monthsInYear(n,t),s=n,u=s.month,c=s.monthCode,d=resolveNonLunisolarMonth(n,r,l);return u=d.month,c=d.monthCode,_objectSpread2(_objectSpread2({},n),{},{month:u,monthCode:c})}},{key:"regulateMonthDayNaive",value:function regulateMonthDayNaive(e,t,r){var n=this.monthsInYear(e,r),o=e.month,a=e.day;return"reject"===t?(RejectToRange(o,1,n),RejectToRange(a,1,this.maximumMonthLength(e))):(o=ConstrainToRange(o,1,n),a=ConstrainToRange(a,1,this.maximumMonthLength(_objectSpread2(_objectSpread2({},e),{},{month:o})))),_objectSpread2(_objectSpread2({},e),{},{month:o,day:a})}},{key:"calendarToIsoDate",value:function calendarToIsoDate(e){var t,r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"constrain",o=arguments.length>2?arguments[2]:void 0,a=e,i=this.adjustCalendarDate(e,o,n,!1),l=i=this.regulateMonthDayNaive(i,n,o),s=l.year,u=l.month,c=l.day,d=JSON.stringify({func:"calendarToIsoDate",year:s,month:u,day:c,overflow:n,id:this.id}),m=o.get(d);if(m)return m;if(void 0!==a.year&&void 0!==a.month&&void 0!==a.day&&(a.year!==i.year||a.month!==i.month||a.day!==i.day)&&(t=JSON.stringify({func:"calendarToIsoDate",year:a.year,month:a.month,day:a.day,overflow:n,id:this.id}),m=o.get(t)))return m;var h=this.estimateIsoDate({year:s,month:u,day:c}),f=function calculateSameMonthResult(e){var t=r.addDaysIso(h,e);if(i.day>r.minimumMonthLength(i))for(var a=r.isoToCalendarDate(t,o);a.month!==u||a.year!==s;){if("reject"===n)throw new RangeError("day ".concat(c," does not exist in month ").concat(u," of year ").concat(s));t=r.addDaysIso(t,-1),a=r.isoToCalendarDate(t,o)}return t},v=0,T=this.isoToCalendarDate(h,o),p=simpleDateDiff(i,T);if(0!==p.years||0!==p.months||0!==p.days){var y=365*p.years+30*p.months+p.days;h=this.addDaysIso(h,y),T=this.isoToCalendarDate(h,o),0===(p=simpleDateDiff(i,T)).years&&0===p.months?h=f(p.days):v=this.compareCalendarDates(i,T)}for(var g=8,D=!1;v;){h=this.addDaysIso(h,v*g);var S=T;T=this.isoToCalendarDate(h,o);var I=v;if(v=this.compareCalendarDates(i,T))if(0===(p=simpleDateDiff(i,T)).years&&0===p.months)h=f(p.days),v=0,D=i.day>this.minimumMonthLength(i);else if(I&&v!==I)if(g>1)g/=2;else{if("reject"===n)throw new RangeError("Can't find ISO date from calendar date: ".concat(JSON.stringify(_objectSpread2({},a))));var w=this.compareCalendarDates(T,S);w>0&&(h=this.addDaysIso(h,-1)),D=!0,v=0}}if(o.set(d,h),t&&o.set(t,h),void 0===i.year||void 0===i.month||void 0===i.day||void 0===i.monthCode||this.hasEra&&(void 0===i.era||void 0===i.eraYear))throw new RangeError("Unexpected missing property");if(!D){var _=JSON.stringify({func:"isoToCalendarDate",isoYear:h.year,isoMonth:h.month,isoDay:h.day,id:this.id});o.set(_,i)}return h}},{key:"temporalToCalendarDate",value:function temporalToCalendarDate(e,t){var r={year:GetSlot(e,a),month:GetSlot(e,i),day:GetSlot(e,l)};return this.isoToCalendarDate(r,t)}},{key:"compareCalendarDates",value:function compareCalendarDates(e,t){var r=PrepareTemporalFields(e,["day","month","year"],["day","month","year"]),n=PrepareTemporalFields(t,["day","month","year"],["day","month","year"]);return r.year!==n.year?ComparisonResult(r.year-n.year):r.month!==n.month?ComparisonResult(r.month-n.month):r.day!==n.day?ComparisonResult(r.day-n.day):0}},{key:"regulateDate",value:function regulateDate(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"constrain",r=arguments.length>2?arguments[2]:void 0,n=this.calendarToIsoDate(e,t,r);return this.isoToCalendarDate(n,r)}},{key:"addDaysIso",value:function addDaysIso(e,t){return AddISODate(e.year,e.month,e.day,0,0,0,t,"constrain")}},{key:"addDaysCalendar",value:function addDaysCalendar(e,t,r){var n=this.calendarToIsoDate(e,"constrain",r),o=this.addDaysIso(n,t);return this.isoToCalendarDate(o,r)}},{key:"addMonthsCalendar",value:function addMonthsCalendar(e,t,r,n){for(var o=e,a=o.day,i=0,l=Dt(t);i0)for(var h=this.monthsInYear(u,n);o.month-1!=s%h;)m=this.addDaysIso(m,-1),o=this.isoToCalendarDate(m,n);o.day!==a&&(o=this.regulateDate(_objectSpread2(_objectSpread2({},o),{},{day:a}),"constrain",n))}if("reject"===r&&o.day!==a)throw new RangeError("Day ".concat(a," does not exist in resulting calendar month"));return o}},{key:"addCalendar",value:function addCalendar(e,t,r,n){var o=t.years,a=void 0===o?0:o,i=t.months,l=void 0===i?0:i,s=t.weeks,u=void 0===s?0:s,c=t.days,d=void 0===c?0:c,m=e.year,h=e.day,f=e.monthCode,v=this.adjustCalendarDate({year:m+a,monthCode:f,day:h},n),T=this.addMonthsCalendar(v,l,r,n),p=d+7*u;return this.addDaysCalendar(T,p,n)}},{key:"untilCalendar",value:function untilCalendar(e,t,r,n){var o=0,a=0,i=0,l=0;switch(r){case"day":o=this.calendarDaysUntil(e,t,n);break;case"week":var s=this.calendarDaysUntil(e,t,n);a=(s-(o=s%7))/7;break;case"month":case"year":var u=t.year-e.year,c=t.month-e.month,d=t.day-e.day,m=this.compareCalendarDates(t,e);if(!m)return{years:0,months:0,weeks:0,days:0};if("year"===r&&u)l=c*m<0||0===c&&d*m<0?u-m:u;var h,f=l?this.addCalendar(e,{years:l},"constrain",n):e;do{i+=m,h=f,(f=this.addMonthsCalendar(h,m,"constrain",n)).day!==e.day&&(f=this.regulateDate(_objectSpread2(_objectSpread2({},f),{},{day:e.day}),"constrain",n))}while(this.compareCalendarDates(t,f)*m>=0);i-=m,o=this.calendarDaysUntil(h,t,n)}return{years:l,months:i,weeks:a,days:o}}},{key:"daysInMonth",value:function daysInMonth(e,t){var r=e.day,n=this.maximumMonthLength(e),o=this.minimumMonthLength(e);if(o===n)return o;var a=r<=n-o?n:o,i=this.calendarToIsoDate(e,"constrain",t),l=this.addDaysIso(i,a),s=this.isoToCalendarDate(l,t),u=this.addDaysIso(l,-s.day);return this.isoToCalendarDate(u,t).day}},{key:"daysInPreviousMonth",value:function daysInPreviousMonth(e,t){var r=e.day,n=e.month,o=e.year,a={year:n>1?o:o-1,month:n,day:1},i=n>1?n-1:this.monthsInYear(a,t);a=_objectSpread2(_objectSpread2({},a),{},{month:i});var l=this.minimumMonthLength(a),s=this.maximumMonthLength(a);if(l===s)return s;var u=this.calendarToIsoDate(e,"constrain",t),c=this.addDaysIso(u,-r);return this.isoToCalendarDate(c,t).day}},{key:"startOfCalendarYear",value:function startOfCalendarYear(e){return{year:e.year,month:1,monthCode:"M01",day:1}}},{key:"startOfCalendarMonth",value:function startOfCalendarMonth(e){return{year:e.year,month:e.month,day:1}}},{key:"calendarDaysUntil",value:function calendarDaysUntil(e,t,r){var n=this.calendarToIsoDate(e,"constrain",r),o=this.calendarToIsoDate(t,"constrain",r);return this.isoDaysUntil(n,o)}},{key:"isoDaysUntil",value:function isoDaysUntil(e,t){return DifferenceISODate(e.year,e.month,e.day,t.year,t.month,t.day,"day").days}},{key:"monthDayFromFields",value:function monthDayFromFields(e,t,r){var n,o,a,i,l,s=e.year,u=e.month,c=e.monthCode,d=e.day,m=e.era,h=e.eraYear;if(void 0===c){if(void 0===s&&(void 0===m||void 0===h))throw new TypeError("`monthCode`, `year`, or `era` and `eraYear` is required");var f=this.adjustCalendarDate({year:s,month:u,monthCode:c,day:d,era:m,eraYear:h},r,t);c=f.monthCode,s=f.year}for(var v=this.isoToCalendarDate({year:1972,month:1,day:1},r).year,T=0;T<100;T++){var p=this.adjustCalendarDate({day:d,monthCode:c,year:v-T},r),y=this.calendarToIsoDate(p,"constrain",r),g=this.isoToCalendarDate(y,r);if(n=y.year,o=y.month,a=y.day,g.monthCode===c&&g.day===d)return{month:o,day:a,year:n};"constrain"===t&&(void 0===i||g.monthCode===i.monthCode&&g.day>i.day)&&(i=g,l=y)}if("constrain"===t&&void 0!==l)return l;throw new RangeError("No recent ".concat(this.id," year with monthCode ").concat(c," and day ").concat(d))}}]),HelperBase}(),Et=function(e){_inherits(HebrewHelper,e);var t=_createSuper(HebrewHelper);function HebrewHelper(){var e;return _classCallCheck(this,HebrewHelper),(e=t.apply(this,arguments)).id="hebrew",e.calendarType="lunisolar",e.months={Tishri:{leap:1,regular:1,monthCode:"M01",days:30},Heshvan:{leap:2,regular:2,monthCode:"M02",days:{min:29,max:30}},Kislev:{leap:3,regular:3,monthCode:"M03",days:{min:29,max:30}},Tevet:{leap:4,regular:4,monthCode:"M04",days:29},Shevat:{leap:5,regular:5,monthCode:"M05",days:30},Adar:{leap:void 0,regular:6,monthCode:"M06",days:29},"Adar I":{leap:6,regular:void 0,monthCode:"M05L",days:30},"Adar II":{leap:7,regular:void 0,monthCode:"M06",days:29},Nisan:{leap:8,regular:7,monthCode:"M07",days:30},Iyar:{leap:9,regular:8,monthCode:"M08",days:29},Sivan:{leap:10,regular:9,monthCode:"M09",days:30},Tamuz:{leap:11,regular:10,monthCode:"M10",days:29},Av:{leap:12,regular:11,monthCode:"M11",days:30},Elul:{leap:13,regular:12,monthCode:"M12",days:29}},e.hasEra=!1,e}return _createClass(HebrewHelper,[{key:"inLeapYear",value:function inLeapYear(e){return(7*e.year+1)%19<7}},{key:"monthsInYear",value:function monthsInYear(e){return this.inLeapYear(e)?13:12}},{key:"minimumMonthLength",value:function minimumMonthLength(e){return this.minMaxMonthLength(e,"min")}},{key:"maximumMonthLength",value:function maximumMonthLength(e){return this.minMaxMonthLength(e,"max")}},{key:"minMaxMonthLength",value:function minMaxMonthLength(e,t){var r=e.month,n=e.year,o=this.getMonthCode(n,r),a=It(this.months).find((function(e){return e[1].monthCode===o}));if(void 0===a)throw new RangeError("unmatched Hebrew month: ".concat(r));var i=a[1].days;return"number"==typeof i?i:i[t]}},{key:"estimateIsoDate",value:function estimateIsoDate(e){return{year:e.year-3760,month:1,day:1}}},{key:"getMonthCode",value:function getMonthCode(e,t){return this.inLeapYear({year:e})?6===t?buildMonthCode(5,!0):buildMonthCode(t<6?t:t-1):buildMonthCode(t)}},{key:"adjustCalendarDate",value:function adjustCalendarDate(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"constrain",n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=e.year,a=e.eraYear,i=e.month,l=e.monthCode,s=e.day,u=e.monthExtra;if(void 0===o&&void 0!==a&&(o=a),void 0===a&&void 0!==o&&(a=o),n){if(u){var c=this.months[u];if(!c)throw new RangeError("Unrecognized month from formatToParts: ".concat(u));i=this.inLeapYear({year:o})?c.leap:c.regular}var d={year:o,month:i,day:s,era:void 0,eraYear:a,monthCode:l=this.getMonthCode(o,i)};return d}if(this.validateCalendarDate(e),void 0===i)if(l.endsWith("L")){if("M05L"!==l)throw new RangeError("Hebrew leap month must have monthCode M05L, not ".concat(l));if(i=6,!this.inLeapYear({year:o})){if("reject"===r)throw new RangeError("Hebrew monthCode M05L is invalid in year ".concat(o," which is not a leap year"));i=5,s=30,l="M05"}}else{i=monthCodeNumberPart(l),this.inLeapYear({year:o})&&i>=6&&i++;var m=this.monthsInYear({year:o});if(i<1||i>m)throw new RangeError("Invalid monthCode: ".concat(l))}else if("reject"===r?(RejectToRange(i,1,this.monthsInYear({year:o})),RejectToRange(s,1,this.maximumMonthLength({year:o,month:i}))):(i=ConstrainToRange(i,1,this.monthsInYear({year:o})),s=ConstrainToRange(s,1,this.maximumMonthLength({year:o,month:i}))),void 0===l)l=this.getMonthCode(o,i);else{var h=this.getMonthCode(o,i);if(h!==l)throw new RangeError("monthCode ".concat(l," doesn't correspond to month ").concat(i," in Hebrew year ").concat(o))}return _objectSpread2(_objectSpread2({},e),{},{day:s,month:i,monthCode:l,year:o,eraYear:a})}}]),HebrewHelper}(bt),Ot=function(e){_inherits(IslamicBaseHelper,e);var t=_createSuper(IslamicBaseHelper);function IslamicBaseHelper(){var e;return _classCallCheck(this,IslamicBaseHelper),(e=t.apply(this,arguments)).calendarType="lunar",e.DAYS_PER_ISLAMIC_YEAR=354+11/30,e.DAYS_PER_ISO_YEAR=365.2425,e.constantEra="ah",e}return _createClass(IslamicBaseHelper,[{key:"inLeapYear",value:function inLeapYear(e,t){return 30===this.daysInMonth({year:e.year,month:12,day:1},t)}},{key:"monthsInYear",value:function monthsInYear(){return 12}},{key:"minimumMonthLength",value:function minimumMonthLength(){return 29}},{key:"maximumMonthLength",value:function maximumMonthLength(){return 30}},{key:"estimateIsoDate",value:function estimateIsoDate(e){var t=this.adjustCalendarDate(e).year;return{year:St(t*this.DAYS_PER_ISLAMIC_YEAR/this.DAYS_PER_ISO_YEAR)+622,month:1,day:1}}}]),IslamicBaseHelper}(bt),Bt=function(e){_inherits(IslamicHelper,e);var t=_createSuper(IslamicHelper);function IslamicHelper(){var e;return _classCallCheck(this,IslamicHelper),(e=t.apply(this,arguments)).id="islamic",e}return _createClass(IslamicHelper)}(Ot),Ft=function(e){_inherits(IslamicUmalquraHelper,e);var t=_createSuper(IslamicUmalquraHelper);function IslamicUmalquraHelper(){var e;return _classCallCheck(this,IslamicUmalquraHelper),(e=t.apply(this,arguments)).id="islamic-umalqura",e}return _createClass(IslamicUmalquraHelper)}(Ot),kt=function(e){_inherits(IslamicTblaHelper,e);var t=_createSuper(IslamicTblaHelper);function IslamicTblaHelper(){var e;return _classCallCheck(this,IslamicTblaHelper),(e=t.apply(this,arguments)).id="islamic-tbla",e}return _createClass(IslamicTblaHelper)}(Ot),At=function(e){_inherits(IslamicCivilHelper,e);var t=_createSuper(IslamicCivilHelper);function IslamicCivilHelper(){var e;return _classCallCheck(this,IslamicCivilHelper),(e=t.apply(this,arguments)).id="islamic-civil",e}return _createClass(IslamicCivilHelper)}(Ot),Mt=function(e){_inherits(IslamicRgsaHelper,e);var t=_createSuper(IslamicRgsaHelper);function IslamicRgsaHelper(){var e;return _classCallCheck(this,IslamicRgsaHelper),(e=t.apply(this,arguments)).id="islamic-rgsa",e}return _createClass(IslamicRgsaHelper)}(Ot),Rt=function(e){_inherits(IslamicCcHelper,e);var t=_createSuper(IslamicCcHelper);function IslamicCcHelper(){var e;return _classCallCheck(this,IslamicCcHelper),(e=t.apply(this,arguments)).id="islamicc",e}return _createClass(IslamicCcHelper)}(Ot),Pt=function(e){_inherits(PersianHelper,e);var t=_createSuper(PersianHelper);function PersianHelper(){var e;return _classCallCheck(this,PersianHelper),(e=t.apply(this,arguments)).id="persian",e.calendarType="solar",e.constantEra="ap",e}return _createClass(PersianHelper,[{key:"inLeapYear",value:function inLeapYear(e,t){return Bt.prototype.inLeapYear.call(this,e,t)}},{key:"monthsInYear",value:function monthsInYear(){return 12}},{key:"minimumMonthLength",value:function minimumMonthLength(e){var t=e.month;return 12===t?29:t<=6?31:30}},{key:"maximumMonthLength",value:function maximumMonthLength(e){var t=e.month;return 12===t?30:t<=6?31:30}},{key:"estimateIsoDate",value:function estimateIsoDate(e){return{year:this.adjustCalendarDate(e).year+621,month:1,day:1}}}]),PersianHelper}(bt),jt=function(e){_inherits(IndianHelper,e);var t=_createSuper(IndianHelper);function IndianHelper(){var e;return _classCallCheck(this,IndianHelper),(e=t.apply(this,arguments)).id="indian",e.calendarType="solar",e.constantEra="saka",e.months={1:{length:30,month:3,day:22,leap:{length:31,month:3,day:21}},2:{length:31,month:4,day:21},3:{length:31,month:5,day:22},4:{length:31,month:6,day:22},5:{length:31,month:7,day:23},6:{length:31,month:8,day:23},7:{length:30,month:9,day:23},8:{length:30,month:10,day:23},9:{length:30,month:11,day:22},10:{length:30,month:12,day:22},11:{length:30,month:1,nextYear:!0,day:21},12:{length:30,month:2,nextYear:!0,day:20}},e.vulnerableToBceBug="10/11/-79 Saka"!==new Date("0000-01-01T00:00Z").toLocaleDateString("en-US-u-ca-indian",{timeZone:"UTC"}),e}return _createClass(IndianHelper,[{key:"inLeapYear",value:function inLeapYear(e){return isGregorianLeapYear(e.year+78)}},{key:"monthsInYear",value:function monthsInYear(){return 12}},{key:"minimumMonthLength",value:function minimumMonthLength(e){return this.getMonthInfo(e).length}},{key:"maximumMonthLength",value:function maximumMonthLength(e){return this.getMonthInfo(e).length}},{key:"getMonthInfo",value:function getMonthInfo(e){var t=e.month,r=this.months[t];if(void 0===r)throw new RangeError("Invalid month: ".concat(t));return this.inLeapYear(e)&&r.leap&&(r=r.leap),r}},{key:"estimateIsoDate",value:function estimateIsoDate(e){var t=this.adjustCalendarDate(e),r=this.getMonthInfo(t);return AddISODate(t.year+78+(r.nextYear?1:0),r.month,r.day,0,0,0,t.day-1,"constrain")}},{key:"checkIcuBugs",value:function checkIcuBugs(e){if(this.vulnerableToBceBug&&e.year<1)throw new RangeError("calendar '".concat(this.id,"' is broken for ISO dates before 0001-01-01")+" (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)")}}]),IndianHelper}(bt);function isGregorianLeapYear(e){return e%4==0&&(e%100!=0||e%400==0)}for(var Zt=function(e){_inherits(GregorianBaseHelper,e);var t=_createSuper(GregorianBaseHelper);function GregorianBaseHelper(e,r){var n;_classCallCheck(this,GregorianBaseHelper),(n=t.call(this)).calendarType="solar",n.v8IsVulnerableToJulianBug=new Date("+001001-01-01T00:00Z").toLocaleDateString("en-US-u-ca-japanese",{timeZone:"UTC"}).startsWith("12"),n.calendarIsVulnerableToJulianBug=!1,n.id=e;var o=function adjustEras(e){var t,r=e;if(0===r.length)throw new RangeError("Invalid era data: eras are required");if(1===r.length&&r[0].reverseOf)throw new RangeError("Invalid era data: anchor era cannot count years backwards");if(1===r.length&&!r[0].name)throw new RangeError("Invalid era data: at least one named era is required");if(r.filter((function(e){return null!=e.reverseOf})).length>1)throw new RangeError("Invalid era data: only one era can count years backwards");r.forEach((function(e){if(e.isAnchor||!e.anchorEpoch&&!e.reverseOf){if(t)throw new RangeError("Invalid era data: cannot have multiple anchor eras");t=e,e.anchorEpoch={year:e.hasYearZero?0:1}}else if(!e.name)throw new RangeError("If era name is blank, it must be the anchor era")})),(r=r.filter((function(e){return e.name}))).forEach((function(e){var t=e.reverseOf;if(t){var n=r.find((function(e){return e.name===t}));if(void 0===n)throw new RangeError("Invalid era data: unmatched reverseOf era: ".concat(t));e.reverseOf=n,e.anchorEpoch=n.anchorEpoch,e.isoEpoch=n.isoEpoch}void 0===e.anchorEpoch.month&&(e.anchorEpoch.month=1),void 0===e.anchorEpoch.day&&(e.anchorEpoch.day=1)})),gt.call(r,(function(e,t){if(e.reverseOf)return 1;if(t.reverseOf)return-1;if(!e.isoEpoch||!t.isoEpoch)throw new RangeError("Invalid era data: missing ISO epoch");return t.isoEpoch.year-e.isoEpoch.year}));var n=r[r.length-1].reverseOf;if(n&&n!==r[r.length-2])throw new RangeError("Invalid era data: invalid reverse-sign era");return r.forEach((function(e,t){e.genericName="era".concat(r.length-1-t)})),{eras:r,anchorEra:t||r[0]}}(r),a=o.eras,i=o.anchorEra;return n.anchorEra=i,n.eras=a,n}return _createClass(GregorianBaseHelper,[{key:"inLeapYear",value:function inLeapYear(e){return isGregorianLeapYear(this.estimateIsoDate({month:1,day:1,year:e.year}).year)}},{key:"monthsInYear",value:function monthsInYear(){return 12}},{key:"minimumMonthLength",value:function minimumMonthLength(e){var t=e.month;return 2===t?this.inLeapYear(e)?29:28:[4,6,9,11].indexOf(t)>=0?30:31}},{key:"maximumMonthLength",value:function maximumMonthLength(e){return this.minimumMonthLength(e)}},{key:"completeEraYear",value:function completeEraYear(e){var t=this,r=function checkField(t,r){var n=e[t];if(null!=n&&n!=r)throw new RangeError("Input ".concat(t," ").concat(n," doesn't match calculated value ").concat(r))},n=function eraFromYear(r){var n,o=_objectSpread2(_objectSpread2({},e),{},{year:r}),a=t.eras.find((function(e,a){if(a===t.eras.length-1){if(e.reverseOf){if(r>0)throw new RangeError("Signed year ".concat(r," is invalid for era ").concat(e.name));return n=e.anchorEpoch.year-r,!0}return n=r-e.anchorEpoch.year+(e.hasYearZero?0:1),!0}return t.compareCalendarDates(o,e.anchorEpoch)>=0&&(n=r-e.anchorEpoch.year+(e.hasYearZero?0:1),!0)}));if(!a)throw new RangeError("Year ".concat(r," was not matched by any era"));return{eraYear:n,era:a.name}},o=e.year,a=e.eraYear,i=e.era;if(null!=o){var l=n(o);a=l.eraYear,r("era",i=l.era),r("eraYear",a)}else{if(null==a)throw new RangeError("Either `year` or `eraYear` and `era` are required");var s=void 0===i?void 0:this.eras.find((function(e){return e.name===i||e.genericName===i}));if(!s)throw new RangeError("Era ".concat(i," (ISO year ").concat(a,") was not matched by any era"));if(a<1&&s.reverseOf)throw new RangeError("Years in ".concat(i," era must be positive, not ").concat(o));r("year",o=s.reverseOf?s.anchorEpoch.year-a:a+s.anchorEpoch.year-(s.hasYearZero?0:1));var u=n(o);a=u.eraYear,i=u.era}return _objectSpread2(_objectSpread2({},e),{},{year:o,eraYear:a,era:i})}},{key:"adjustCalendarDate",value:function adjustCalendarDate(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"constrain",n=e,o=n,a=o.month,i=o.monthCode;return void 0===a&&(n=_objectSpread2(_objectSpread2({},n),{},{month:monthCodeNumberPart(i)})),this.validateCalendarDate(n),n=this.completeEraYear(n),_get(_getPrototypeOf(GregorianBaseHelper.prototype),"adjustCalendarDate",this).call(this,n,t,r)}},{key:"estimateIsoDate",value:function estimateIsoDate(e){var t=this.adjustCalendarDate(e),r=t.year,n=t.month,o=t.day,a=this.anchorEra;return RegulateISODate(r+a.isoEpoch.year-(a.hasYearZero?0:1),n,o,"constrain")}},{key:"checkIcuBugs",value:function checkIcuBugs(e){if(this.calendarIsVulnerableToJulianBug&&this.v8IsVulnerableToJulianBug&&CompareISODate(e.year,e.month,e.day,1582,10,15)<0)throw new RangeError("calendar '".concat(this.id,"' is broken for ISO dates before 1582-10-15")+" (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)")}}]),GregorianBaseHelper}(bt),Yt=function(e){_inherits(OrthodoxBaseHelper,e);var t=_createSuper(OrthodoxBaseHelper);function OrthodoxBaseHelper(e,r){return _classCallCheck(this,OrthodoxBaseHelper),t.call(this,e,r)}return _createClass(OrthodoxBaseHelper,[{key:"inLeapYear",value:function inLeapYear(e){return(e.year+1)%4==0}},{key:"monthsInYear",value:function monthsInYear(){return 13}},{key:"minimumMonthLength",value:function minimumMonthLength(e){return 13===e.month?this.inLeapYear(e)?6:5:30}},{key:"maximumMonthLength",value:function maximumMonthLength(e){return this.minimumMonthLength(e)}}]),OrthodoxBaseHelper}(Zt),Nt=function(e){_inherits(EthioaaHelper,e);var t=_createSuper(EthioaaHelper);function EthioaaHelper(){return _classCallCheck(this,EthioaaHelper),t.call(this,"ethioaa",[{name:"era0",isoEpoch:{year:-5492,month:7,day:17}}])}return _createClass(EthioaaHelper)}(Yt),Jt=function(e){_inherits(CopticHelper,e);var t=_createSuper(CopticHelper);function CopticHelper(){return _classCallCheck(this,CopticHelper),t.call(this,"coptic",[{name:"era1",isoEpoch:{year:284,month:8,day:29}},{name:"era0",reverseOf:"era1"}])}return _createClass(CopticHelper)}(Yt),Lt=function(e){_inherits(EthiopicHelper,e);var t=_createSuper(EthiopicHelper);function EthiopicHelper(){return _classCallCheck(this,EthiopicHelper),t.call(this,"ethiopic",[{name:"era0",isoEpoch:{year:-5492,month:7,day:17}},{name:"era1",isoEpoch:{year:8,month:8,day:27},anchorEpoch:{year:5501}}])}return _createClass(EthiopicHelper)}(Yt),Ht=function(e){_inherits(RocHelper,e);var t=_createSuper(RocHelper);function RocHelper(){var e;return _classCallCheck(this,RocHelper),(e=t.call(this,"roc",[{name:"minguo",isoEpoch:{year:1912,month:1,day:1}},{name:"before-roc",reverseOf:"minguo"}])).calendarIsVulnerableToJulianBug=!0,e}return _createClass(RocHelper)}(Zt),Ut=function(e){_inherits(BuddhistHelper,e);var t=_createSuper(BuddhistHelper);function BuddhistHelper(){var e;return _classCallCheck(this,BuddhistHelper),(e=t.call(this,"buddhist",[{name:"be",hasYearZero:!0,isoEpoch:{year:-543,month:1,day:1}}])).calendarIsVulnerableToJulianBug=!0,e}return _createClass(BuddhistHelper)}(Zt),xt=function(e){_inherits(GregoryHelper,e);var t=_createSuper(GregoryHelper);function GregoryHelper(){return _classCallCheck(this,GregoryHelper),t.call(this,"gregory",[{name:"ce",isoEpoch:{year:1,month:1,day:1}},{name:"bce",reverseOf:"ce"}])}return _createClass(GregoryHelper,[{key:"reviseIntlEra",value:function reviseIntlEra(e){var t=e.era;return"bc"!==t&&"b"!==t||(t="bce"),"ad"!==t&&"a"!==t||(t="ce"),{era:t,eraYear:e.eraYear}}}]),GregoryHelper}(Zt),qt=function(e){_inherits(JapaneseHelper,e);var t=_createSuper(JapaneseHelper);function JapaneseHelper(){var e;return _classCallCheck(this,JapaneseHelper),(e=t.call(this,"japanese",[{name:"reiwa",isoEpoch:{year:2019,month:5,day:1},anchorEpoch:{year:2019,month:5,day:1}},{name:"heisei",isoEpoch:{year:1989,month:1,day:8},anchorEpoch:{year:1989,month:1,day:8}},{name:"showa",isoEpoch:{year:1926,month:12,day:25},anchorEpoch:{year:1926,month:12,day:25}},{name:"taisho",isoEpoch:{year:1912,month:7,day:30},anchorEpoch:{year:1912,month:7,day:30}},{name:"meiji",isoEpoch:{year:1868,month:9,day:8},anchorEpoch:{year:1868,month:9,day:8}},{name:"ce",isoEpoch:{year:1,month:1,day:1}},{name:"bce",reverseOf:"ce"}])).calendarIsVulnerableToJulianBug=!0,e.eraLength="long",e}return _createClass(JapaneseHelper,[{key:"reviseIntlEra",value:function reviseIntlEra(e,t){var r=e.era,n=e.eraYear,o=t.year;return this.eras.find((function(e){return e.name===r}))?{era:r,eraYear:n}:o<1?{era:"bce",eraYear:1-o}:{era:"ce",eraYear:o}}}]),JapaneseHelper}(Zt),zt=function(e){_inherits(ChineseBaseHelper,e);var t=_createSuper(ChineseBaseHelper);function ChineseBaseHelper(){var e;return _classCallCheck(this,ChineseBaseHelper),(e=t.apply(this,arguments)).calendarType="lunisolar",e.hasEra=!1,e}return _createClass(ChineseBaseHelper,[{key:"inLeapYear",value:function inLeapYear(e,t){var r=this.getMonthList(e.year,t);return 13===It(r).length}},{key:"monthsInYear",value:function monthsInYear(e,t){return this.inLeapYear(e,t)?13:12}},{key:"minimumMonthLength",value:function minimumMonthLength(){return 29}},{key:"maximumMonthLength",value:function maximumMonthLength(){return 30}},{key:"getMonthList",value:function getMonthList(e,t){var r=this;if(void 0===e)throw new TypeError("Missing year");var n=JSON.stringify({func:"getMonthList",calendarYear:e,id:this.id}),o=t.get(n);if(o)return o;var a=this.getFormatter(),i=function getCalendarDate(e,t){var n=toUtcIsoDateString({isoYear:e,isoMonth:2,isoDay:1}),o=new Date(n);o.setUTCDate(t+1);var i=a.formatToParts(o),l=i.find((function(e){return"month"===e.type})).value,s=+i.find((function(e){return"day"===e.type})).value,u=i.find((function(e){return"relatedYear"===e.type}));if(void 0===u)throw new RangeError("Intl.DateTimeFormat.formatToParts lacks relatedYear in ".concat(r.id," calendar. Try Node 14+ or modern browsers."));return{calendarMonthString:l,calendarDay:s,calendarYearToVerify:u=+u.value}},l=17,s=i(e,l),u=s.calendarMonthString,c=s.calendarDay,d=s.calendarYearToVerify;if("1"!==u){var m=i(e,l+=29);u=m.calendarMonthString,c=m.calendarDay}l-=c-5;var h,f,v={},T=1,p=!1;do{var y=i(e,l);u=y.calendarMonthString,c=y.calendarDay,d=y.calendarYearToVerify,h&&(v[f].daysInMonth=h+30-c),d!==e?p=!0:(v[u]={monthIndex:T++},l+=30),h=c,f=u}while(!p);return v[f].daysInMonth=h+30-c,t.set(n,v),v}},{key:"estimateIsoDate",value:function estimateIsoDate(e){var t=e.year,r=e.month;return{year:t,month:r>=12?12:r+1,day:1}}},{key:"adjustCalendarDate",value:function adjustCalendarDate(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"constrain",n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=e.year,a=e.month,i=e.monthExtra,l=e.day,s=e.monthCode,u=e.eraYear;if(n){if(o=u,i&&"bis"!==i)throw new RangeError("Unexpected leap month suffix: ".concat(i));var c=buildMonthCode(a,void 0!==i),d="".concat(a).concat(i||""),m=this.getMonthList(o,t),h=m[d];if(void 0===h)throw new RangeError("Unmatched month ".concat(d," in Chinese year ").concat(o));return{year:o,month:a=h.monthIndex,day:l,era:void 0,eraYear:u,monthCode:c}}if(this.validateCalendarDate(e),void 0===o&&(o=u),void 0===u&&(u=o),void 0===a){var f=this.getMonthList(o,t),v=s.replace("L","bis").slice(1);"0"===v[0]&&(v=v.slice(1));var T=f[v];if(void 0===(a=T&&T.monthIndex)&&s.endsWith("L")&&!Tt.call(["M01L","M12L","M13L"],s)&&"constrain"===r){var p=s.slice(1,-1);if("0"===p[0]&&(p=p.slice(1)),T=f[p]){var y=T;l=y.daysInMonth,a=y.monthIndex,s=buildMonthCode(p)}}if(void 0===a)throw new RangeError("Unmatched month ".concat(s," in Chinese year ").concat(o))}else if(void 0===s){var g=this.getMonthList(o,t),D=It(g),S=D.length;"reject"===r?(RejectToRange(a,1,S),RejectToRange(l,1,this.maximumMonthLength())):(a=ConstrainToRange(a,1,S),l=ConstrainToRange(l,1,this.maximumMonthLength()));var I=D.find((function(e){return _slicedToArray(e,2)[1].monthIndex===a}));if(void 0===I)throw new RangeError("Invalid month ".concat(a," in Chinese year ").concat(o));s=buildMonthCode(I[0].replace("bis",""),-1!==I[0].indexOf("bis"))}else{var w=this.getMonthList(o,t),_=s.replace("L","bis").slice(1);"0"===_[0]&&(_=_.slice(1));var C=w[_];if(!C)throw new RangeError("Unmatched monthCode ".concat(s," in Chinese year ").concat(o));if(a!==C.monthIndex)throw new RangeError("monthCode ".concat(s," doesn't correspond to month ").concat(a," in Chinese year ").concat(o))}return _objectSpread2(_objectSpread2({},e),{},{year:o,eraYear:u,month:a,monthCode:s,day:l})}}]),ChineseBaseHelper}(bt),Wt={helper:void 0,dateFromFields:function dateFromFields(e,t,r){var n=ToTemporalOverflow(t),o=new Gt,a=PrepareTemporalFields(e,["day","era","eraYear","month","monthCode","year"],["day"]),i=this.helper.calendarToIsoDate(a,n,o),l=CreateTemporalDate(i.year,i.month,i.day,r);return o.setObject(l),l},yearMonthFromFields:function yearMonthFromFields(e,t,r){var n=ToTemporalOverflow(t),o=new Gt,a=PrepareTemporalFields(e,["era","eraYear","month","monthCode","year"],[]),i=this.helper.calendarToIsoDate(_objectSpread2(_objectSpread2({},a),{},{day:1}),n,o),l=CreateTemporalYearMonth(i.year,i.month,r,i.day);return o.setObject(l),l},monthDayFromFields:function monthDayFromFields(e,t,r){var n=ToTemporalOverflow(t),o=new Gt,a=PrepareTemporalFields(e,["day","era","eraYear","month","monthCode","year"],["day"]),i=this.helper.monthDayFromFields(a,n,o),l=i.year,s=CreateTemporalMonthDay(i.month,i.day,r,l);return o.setObject(s),s},fields:function fields(e){var fields=e;return Tt.call(fields,"year")&&(fields=[].concat(_toConsumableArray(fields),["era","eraYear"])),fields},mergeFields:function mergeFields(e,t){var r=_objectSpread2({},e),n=_objectSpread2({},t),o=r.month,a=r.monthCode,i=r.year;r.era,r.eraYear;var l=_objectWithoutProperties(r,vt),s=n.month,u=n.monthCode,c=n.year,d=n.era,m=n.eraYear;return void 0===s&&void 0===u&&(l.month=o,l.monthCode=a),void 0===c&&void 0===d&&void 0===m&&(l.year=i),_objectSpread2(_objectSpread2({},l),n)},dateAdd:function dateAdd(e,t,r,n,o,a,i){var l=Gt.getCacheForObject(e),s=this.helper.temporalToCalendarDate(e,l),u=this.helper.addCalendar(s,{years:t,months:r,weeks:n,days:o},a,l),c=this.helper.calendarToIsoDate(u,"constrain",l),d=CreateTemporalDate(c.year,c.month,c.day,i);return new Gt(l).setObject(d),d},dateUntil:function dateUntil(e,t,r){var n=Gt.getCacheForObject(e),o=Gt.getCacheForObject(t),a=this.helper.temporalToCalendarDate(e,n),i=this.helper.temporalToCalendarDate(t,o);return this.helper.untilCalendar(a,i,r,n)},year:function year(e){var t=Gt.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).year},month:function month(e){var t=Gt.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).month},day:function day(e){var t=Gt.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).day},era:function era(e){if(this.helper.hasEra){var t=Gt.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).era}},eraYear:function eraYear(e){if(this.helper.hasEra){var t=Gt.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).eraYear}},monthCode:function monthCode(e){var t=Gt.getCacheForObject(e);return this.helper.temporalToCalendarDate(e,t).monthCode},dayOfWeek:function dayOfWeek(e){return _t.iso8601.dayOfWeek(e)},dayOfYear:function dayOfYear(e){var t=Gt.getCacheForObject(e),r=this.helper.isoToCalendarDate(e,t),n=this.helper.startOfCalendarYear(r);return this.helper.calendarDaysUntil(n,r,t)+1},weekOfYear:function weekOfYear(e){return _t.iso8601.weekOfYear(e)},daysInWeek:function daysInWeek(e){return _t.iso8601.daysInWeek(e)},daysInMonth:function daysInMonth(e){var t=Gt.getCacheForObject(e),r=this.helper.temporalToCalendarDate(e,t),n=this.helper.maximumMonthLength(r);if(n===this.helper.minimumMonthLength(r))return n;var o=this.helper.startOfCalendarMonth(r),a=this.helper.addMonthsCalendar(o,1,"constrain",t);return this.helper.calendarDaysUntil(o,a,t)},daysInYear:function daysInYear(e){var t=e;HasSlot(t,a)||(t=ToTemporalDate(t));var r=Gt.getCacheForObject(t),n=this.helper.temporalToCalendarDate(t,r),o=this.helper.startOfCalendarYear(n),i=this.helper.addCalendar(o,{years:1},"constrain",r);return this.helper.calendarDaysUntil(o,i,r)},monthsInYear:function monthsInYear(e){var t=Gt.getCacheForObject(e),r=this.helper.temporalToCalendarDate(e,t);return this.helper.monthsInYear(r,t)},inLeapYear:function inLeapYear(e){var t=e;HasSlot(t,a)||(t=ToTemporalDate(t));var r=Gt.getCacheForObject(t),n=this.helper.temporalToCalendarDate(t,r);return this.helper.inLeapYear(n,r)}},Vt=0,$t=[Et,Pt,Lt,Nt,Jt,function(e){_inherits(ChineseHelper,e);var t=_createSuper(ChineseHelper);function ChineseHelper(){var e;return _classCallCheck(this,ChineseHelper),(e=t.apply(this,arguments)).id="chinese",e}return _createClass(ChineseHelper)}(zt),function(e){_inherits(DangiHelper,e);var t=_createSuper(DangiHelper);function DangiHelper(){var e;return _classCallCheck(this,DangiHelper),(e=t.apply(this,arguments)).id="dangi",e}return _createClass(DangiHelper)}(zt),Ht,jt,Ut,xt,qt,Bt,Ft,kt,At,Mt,Rt];Vt<$t.length;Vt++){var Xt=new(0,$t[Vt]);_t[Xt.id]=_objectSpread2(_objectSpread2({},Wt),{},{helper:Xt})}var Kt=function(){function PlainDate(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:GetISO8601Calendar();_classCallCheck(this,PlainDate);var o=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToIntegerThrowOnInfinity(r),l=ToTemporalCalendar(n);if(arguments.length<3)throw new RangeError("missing argument: isoYear, isoMonth and isoDay are required");CreateTemporalDateSlots(this,o,a,i,l)}return _createClass(PlainDate,[{key:"calendar",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}},{key:"era",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,f),this)}},{key:"eraYear",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,f),this)}},{key:"year",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,f),this)}},{key:"month",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,f),this)}},{key:"monthCode",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,f),this)}},{key:"day",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,f),this)}},{key:"dayOfWeek",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,f),this)}},{key:"dayOfYear",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,f),this)}},{key:"weekOfYear",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,f),this)}},{key:"daysInWeek",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,f),this)}},{key:"daysInMonth",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,f),this)}},{key:"daysInYear",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,f),this)}},{key:"monthsInYear",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,f),this)}},{key:"inLeapYear",get:function get(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,f),this)}},{key:"with",value:function _with(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);var r=GetSlot(this,f),n=CalendarFields(r,["day","month","monthCode","year"]),o=PrepareTemporalFields(e,n,"partial");if(!o)throw new TypeError("invalid date-like");var a=PrepareTemporalFields(this,n,[]);a=PrepareTemporalFields(a=CalendarMergeFields(r,a,o),n,[]);var i=GetOptionsObject(t);return CalendarDateFromFields(r,a,i)}},{key:"withCalendar",value:function withCalendar(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var t=ToTemporalCalendar(e);return new PlainDate(GetSlot(this,a),GetSlot(this,i),GetSlot(this,l),t)}},{key:"add",value:function add(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var r=ToTemporalDuration(e),n=GetOptionsObject(t);return CalendarDateAdd(GetSlot(this,f),this,r,n)}},{key:"subtract",value:function subtract(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var r=CreateNegatedTemporalDuration(ToTemporalDuration(e)),n=GetOptionsObject(t);return CalendarDateAdd(GetSlot(this,f),this,r,n)}},{key:"until",value:function until(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDate("until",this,e,t)}},{key:"since",value:function since(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDate("since",this,e,t)}},{key:"equals",value:function equals(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");for(var t=ToTemporalDate(e),r=0,n=[a,i,l];r0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToShowCalendarOption(t);return TemporalDateToString(this,r)}},{key:"toJSON",value:function toJSON(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return TemporalDateToString(this)}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainDate")}},{key:"toPlainDateTime",value:function toPlainDateTime(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var t=GetSlot(this,a),r=GetSlot(this,i),n=GetSlot(this,l),o=GetSlot(this,f);if(void 0===e)return CreateTemporalDateTime(t,r,n,0,0,0,0,0,0,o);var v=ToTemporalTime(e),T=GetSlot(v,s),p=GetSlot(v,u),y=GetSlot(v,c),g=GetSlot(v,d),D=GetSlot(v,m),S=GetSlot(v,h);return CreateTemporalDateTime(t,r,n,T,p,y,g,D,S,o)}},{key:"toZonedDateTime",value:function toZonedDateTime(e){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var t,r;if(IsObject(e)){var o=e.timeZone;void 0===o?t=ToTemporalTimeZone(e):(t=ToTemporalTimeZone(o),r=e.plainTime)}else t=ToTemporalTimeZone(e);var v=GetSlot(this,a),T=GetSlot(this,i),p=GetSlot(this,l),y=GetSlot(this,f),g=0,D=0,S=0,I=0,w=0,_=0;return void 0!==r&&(g=GetSlot(r=ToTemporalTime(r),s),D=GetSlot(r,u),S=GetSlot(r,c),I=GetSlot(r,d),w=GetSlot(r,m),_=GetSlot(r,h)),CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(t,CreateTemporalDateTime(v,T,p,g,D,S,I,w,_,y),"compatible"),n),t,y)}},{key:"toPlainYearMonth",value:function toPlainYearMonth(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var e=GetSlot(this,f);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}},{key:"toPlainMonthDay",value:function toPlainMonthDay(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");var e=GetSlot(this,f);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}},{key:"getISOFields",value:function getISOFields(){if(!IsTemporalDate(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,f),isoDay:GetSlot(this,l),isoMonth:GetSlot(this,i),isoYear:GetSlot(this,a)}}}],[{key:"from",value:function from(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=GetOptionsObject(t);return IsTemporalDate(e)?(ToTemporalOverflow(r),CreateTemporalDate(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l),GetSlot(e,f))):ToTemporalDate(e,r)}},{key:"compare",value:function compare(e,t){var r=ToTemporalDate(e),n=ToTemporalDate(t);return CompareISODate(GetSlot(r,a),GetSlot(r,i),GetSlot(r,l),GetSlot(n,a),GetSlot(n,i),GetSlot(n,l))}}]),PlainDate}();MakeIntrinsicClass(Kt,"Temporal.PlainDate");var Qt=function(){function PlainDateTime(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:0,s=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,u=arguments.length>9&&void 0!==arguments[9]?arguments[9]:GetISO8601Calendar();_classCallCheck(this,PlainDateTime);var c=ToIntegerThrowOnInfinity(e),d=ToIntegerThrowOnInfinity(t),m=ToIntegerThrowOnInfinity(r),h=ToIntegerThrowOnInfinity(n),f=ToIntegerThrowOnInfinity(o),v=ToIntegerThrowOnInfinity(a),T=ToIntegerThrowOnInfinity(i),p=ToIntegerThrowOnInfinity(l),y=ToIntegerThrowOnInfinity(s),g=ToTemporalCalendar(u);if(arguments.length<3)throw new RangeError("missing argument: isoYear, isoMonth and isoDay are required");CreateTemporalDateTimeSlots(this,c,d,m,h,f,v,T,p,y,g)}return _createClass(PlainDateTime,[{key:"calendar",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}},{key:"year",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,f),this)}},{key:"month",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,f),this)}},{key:"monthCode",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,f),this)}},{key:"day",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,f),this)}},{key:"hour",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,s)}},{key:"minute",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}},{key:"second",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,c)}},{key:"millisecond",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,d)}},{key:"microsecond",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,m)}},{key:"nanosecond",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}},{key:"era",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,f),this)}},{key:"eraYear",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,f),this)}},{key:"dayOfWeek",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,f),this)}},{key:"dayOfYear",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,f),this)}},{key:"weekOfYear",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,f),this)}},{key:"daysInWeek",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,f),this)}},{key:"daysInYear",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,f),this)}},{key:"daysInMonth",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,f),this)}},{key:"monthsInYear",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,f),this)}},{key:"inLeapYear",get:function get(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,f),this)}},{key:"with",value:function _with(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);var r=GetOptionsObject(t),n=GetSlot(this,f),o=CalendarFields(n,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),a=PrepareTemporalFields(e,o,"partial");if(!a)throw new TypeError("invalid date-time-like");var i=PrepareTemporalFields(this,o,[]),l=InterpretTemporalDateTimeFields(n,i=PrepareTemporalFields(i=CalendarMergeFields(n,i,a),o,[]),r),s=l.year,u=l.month,c=l.day,d=l.hour,m=l.minute,h=l.second,v=l.millisecond,T=l.microsecond,p=l.nanosecond;return CreateTemporalDateTime(s,u,c,d,m,h,v,T,p,n)}},{key:"withPlainTime",value:function withPlainTime(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var t=GetSlot(this,a),r=GetSlot(this,i),n=GetSlot(this,l),o=GetSlot(this,f);if(void 0===e)return CreateTemporalDateTime(t,r,n,0,0,0,0,0,0,o);var v=ToTemporalTime(e),T=GetSlot(v,s),p=GetSlot(v,u),y=GetSlot(v,c),g=GetSlot(v,d),D=GetSlot(v,m),S=GetSlot(v,h);return CreateTemporalDateTime(t,r,n,T,p,y,g,D,S,o)}},{key:"withPlainDate",value:function withPlainDate(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e),r=GetSlot(t,a),n=GetSlot(t,i),o=GetSlot(t,l),v=GetSlot(t,f);return CreateTemporalDateTime(r,n,o,GetSlot(this,s),GetSlot(this,u),GetSlot(this,c),GetSlot(this,d),GetSlot(this,m),GetSlot(this,h),v=ConsolidateCalendars(GetSlot(this,f),v))}},{key:"withCalendar",value:function withCalendar(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var t=ToTemporalCalendar(e);return new PlainDateTime(GetSlot(this,a),GetSlot(this,i),GetSlot(this,l),GetSlot(this,s),GetSlot(this,u),GetSlot(this,c),GetSlot(this,d),GetSlot(this,m),GetSlot(this,h),t)}},{key:"add",value:function add(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainDateTime("add",this,e,t)}},{key:"subtract",value:function subtract(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainDateTime("subtract",this,e,t)}},{key:"until",value:function until(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDateTime("until",this,e,t)}},{key:"since",value:function since(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainDateTime("since",this,e,t)}},{key:"round",value:function round(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");var t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",Le,["day"]),n=ToTemporalRoundingMode(t,"halfExpand"),o=ToTemporalRoundingIncrement(t,{day:1,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[r],!1),v=GetSlot(this,a),T=GetSlot(this,i),p=GetSlot(this,l),y=GetSlot(this,s),g=GetSlot(this,u),D=GetSlot(this,c),S=GetSlot(this,d),I=GetSlot(this,m),w=GetSlot(this,h),_=RoundISODateTime(v,T,p,y,g,D,S,I,w,o,r,n);return CreateTemporalDateTime(v=_.year,T=_.month,p=_.day,y=_.hour,g=_.minute,D=_.second,S=_.millisecond,I=_.microsecond,w=_.nanosecond,GetSlot(this,f))}},{key:"equals",value:function equals(e){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");for(var t=ToTemporalDateTime(e),r=0,n=[a,i,l,s,u,c,d,m,h];r0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToSecondsStringPrecision(t),n=r.precision,o=r.unit,a=r.increment,i=ToShowCalendarOption(t),l=ToTemporalRoundingMode(t,"trunc");return TemporalDateTimeToString(this,n,i,{unit:o,increment:a,roundingMode:l})}},{key:"toJSON",value:function toJSON(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToString(this,"auto")}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainDateTime")}},{key:"toZonedDateTime",value:function toZonedDateTime(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var r=ToTemporalTimeZone(e),o=GetOptionsObject(t),a=ToTemporalDisambiguation(o),i=BuiltinTimeZoneGetInstantFor(r,this,a);return CreateTemporalZonedDateTime(GetSlot(i,n),r,GetSlot(this,f))}},{key:"toPlainDate",value:function toPlainDate(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToDate(this)}},{key:"toPlainYearMonth",value:function toPlainYearMonth(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,f);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}},{key:"toPlainMonthDay",value:function toPlainMonthDay(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,f);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}},{key:"toPlainTime",value:function toPlainTime(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToTime(this)}},{key:"getISOFields",value:function getISOFields(){if(!IsTemporalDateTime(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,f),isoDay:GetSlot(this,l),isoHour:GetSlot(this,s),isoMicrosecond:GetSlot(this,m),isoMillisecond:GetSlot(this,d),isoMinute:GetSlot(this,u),isoMonth:GetSlot(this,i),isoNanosecond:GetSlot(this,h),isoSecond:GetSlot(this,c),isoYear:GetSlot(this,a)}}}],[{key:"from",value:function from(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=GetOptionsObject(t);return IsTemporalDateTime(e)?(ToTemporalOverflow(r),CreateTemporalDateTime(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l),GetSlot(e,s),GetSlot(e,u),GetSlot(e,c),GetSlot(e,d),GetSlot(e,m),GetSlot(e,h),GetSlot(e,f))):ToTemporalDateTime(e,r)}},{key:"compare",value:function compare(e,t){for(var r=ToTemporalDateTime(e),n=ToTemporalDateTime(t),o=0,f=[a,i,l,s,u,c,d,m,h];o0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:0,s=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,u=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0;_classCallCheck(this,Duration);var c=ToIntegerWithoutRounding(e),d=ToIntegerWithoutRounding(t),m=ToIntegerWithoutRounding(r),h=ToIntegerWithoutRounding(n),f=ToIntegerWithoutRounding(o),v=ToIntegerWithoutRounding(a),T=ToIntegerWithoutRounding(i),p=ToIntegerWithoutRounding(l),y=ToIntegerWithoutRounding(s),g=ToIntegerWithoutRounding(u);RejectDuration(c,d,m,h,f,v,T,p,y,g),CreateSlots(this),SetSlot(this,D,c),SetSlot(this,S,d),SetSlot(this,I,m),SetSlot(this,w,h),SetSlot(this,_,f),SetSlot(this,C,v),SetSlot(this,G,T),SetSlot(this,b,p),SetSlot(this,E,y),SetSlot(this,O,g)}return _createClass(Duration,[{key:"years",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,D)}},{key:"months",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,S)}},{key:"weeks",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,I)}},{key:"days",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,w)}},{key:"hours",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,_)}},{key:"minutes",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,C)}},{key:"seconds",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,G)}},{key:"milliseconds",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,b)}},{key:"microseconds",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,E)}},{key:"nanoseconds",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return GetSlot(this,O)}},{key:"sign",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return DurationSign(GetSlot(this,D),GetSlot(this,S),GetSlot(this,I),GetSlot(this,w),GetSlot(this,_),GetSlot(this,C),GetSlot(this,G),GetSlot(this,b),GetSlot(this,E),GetSlot(this,O))}},{key:"blank",get:function get(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return 0===DurationSign(GetSlot(this,D),GetSlot(this,S),GetSlot(this,I),GetSlot(this,w),GetSlot(this,_),GetSlot(this,C),GetSlot(this,G),GetSlot(this,b),GetSlot(this,E),GetSlot(this,O))}},{key:"with",value:function _with(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");var t=PrepareTemporalFields(e,["days","hours","microseconds","milliseconds","minutes","months","nanoseconds","seconds","weeks","years"],"partial");if(!t)throw new TypeError("invalid duration-like");var r=t.years,n=void 0===r?GetSlot(this,D):r,o=t.months,a=void 0===o?GetSlot(this,S):o,i=t.weeks,l=void 0===i?GetSlot(this,I):i,s=t.days,u=void 0===s?GetSlot(this,w):s,c=t.hours,d=void 0===c?GetSlot(this,_):c,m=t.minutes,h=void 0===m?GetSlot(this,C):m,f=t.seconds,v=void 0===f?GetSlot(this,G):f,T=t.milliseconds,p=void 0===T?GetSlot(this,b):T,y=t.microseconds,g=void 0===y?GetSlot(this,E):y,B=t.nanoseconds;return new Duration(n,a,l,u,d,h,v,p,g,void 0===B?GetSlot(this,O):B)}},{key:"negated",value:function negated(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return CreateNegatedTemporalDuration(this)}},{key:"abs",value:function abs(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return new Duration(Math.abs(GetSlot(this,D)),Math.abs(GetSlot(this,S)),Math.abs(GetSlot(this,I)),Math.abs(GetSlot(this,w)),Math.abs(GetSlot(this,_)),Math.abs(GetSlot(this,C)),Math.abs(GetSlot(this,G)),Math.abs(GetSlot(this,b)),Math.abs(GetSlot(this,E)),Math.abs(GetSlot(this,O)))}},{key:"add",value:function add(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromDuration("add",this,e,t)}},{key:"subtract",value:function subtract(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromDuration("subtract",this,e,t)}},{key:"round",value:function round(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");var t=GetSlot(this,D),r=GetSlot(this,S),n=GetSlot(this,I),o=GetSlot(this,w),a=GetSlot(this,_),i=GetSlot(this,C),l=GetSlot(this,G),s=GetSlot(this,b),u=GetSlot(this,E),c=GetSlot(this,O),d=DefaultTemporalLargestUnit(t,r,n,o,a,i,l,s,u,c),m="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),h=GetTemporalUnit(m,"smallestUnit","datetime",void 0),v=!0;h||(v=!1,h="nanosecond"),d=LargerOfTwoTemporalUnits(d,h);var T=GetTemporalUnit(m,"largestUnit","datetime",void 0,["auto"]),p=!0;if(T||(p=!1,T=d),"auto"===T&&(T=d),!v&&!p)throw new RangeError("at least one of smallestUnit or largestUnit is required");if(LargerOfTwoTemporalUnits(T,h)!==T)throw new RangeError("largestUnit ".concat(T," cannot be smaller than smallestUnit ").concat(h));var y=ToTemporalRoundingMode(m,"halfExpand"),g=ToTemporalDateTimeRoundingIncrement(m,h),B=ToRelativeTemporalObject(m),k=UnbalanceDurationRelative(t,r,n,o,T,B),A=RoundDuration(t=k.years,r=k.months,n=k.weeks,o=k.days,a,i,l,s,u,c,g,h,y,B),M=AdjustRoundedDurationDays(t=A.years,r=A.months,n=A.weeks,o=A.days,a=A.hours,i=A.minutes,l=A.seconds,s=A.milliseconds,u=A.microseconds,c=A.nanoseconds,g,h,y,B);t=M.years,r=M.months,n=M.weeks,o=M.days,a=M.hours,i=M.minutes,l=M.seconds,s=M.milliseconds,u=M.microseconds,c=M.nanoseconds;var R=function BalanceDurationRelative(e,t,r,n,o,a){var i,l,s=e,u=t,c=r,d=n,m=GetIntrinsic("%Temporal.Duration%"),h=DurationSign(s,u,c,d,0,0,0,0,0,0);if(0===h)return{years:s,months:u,weeks:c,days:d};a&&(i=GetSlot(l=ToTemporalDate(a),f));var v=new m(h),T=new m(0,h),p=new m(0,0,h);switch(o){case"year":if(!i)throw new RangeError("a starting point is required for years balancing");var y,g,D,I=MoveRelativeDate(i,l,v);for(y=I.relativeTo,g=I.days;ne(d)>=ne(g);){d-=g,s+=h;var w=MoveRelativeDate(i,l=y,v);y=w.relativeTo,g=w.days}var _=MoveRelativeDate(i,l,T);for(y=_.relativeTo,D=_.days;ne(d)>=ne(D);){d-=D,u+=h;var C=MoveRelativeDate(i,l=y,T);y=C.relativeTo,D=C.days}var G=i.dateAdd;y=CalendarDateAdd(i,l,v,void 0,G);var b=i.dateUntil,E=he(null);E.largestUnit="month";for(var O=CalendarDateUntil(i,l,y,E,b),B=GetSlot(O,S);ne(u)>=ne(B);){u-=B,s+=h,y=CalendarDateAdd(i,l=y,v,void 0,G);var k=he(null);k.largestUnit="month",B=GetSlot(O=CalendarDateUntil(i,l,y,k,b),S)}break;case"month":if(!i)throw new RangeError("a starting point is required for months balancing");var A,M,R=MoveRelativeDate(i,l,T);for(A=R.relativeTo,M=R.days;ne(d)>=ne(M);){d-=M,u+=h;var P=MoveRelativeDate(i,l=A,T);A=P.relativeTo,M=P.days}break;case"week":if(!i)throw new RangeError("a starting point is required for weeks balancing");var j,Z,Y=MoveRelativeDate(i,l,p);for(j=Y.relativeTo,Z=Y.days;ne(d)>=ne(Z);){d-=Z,c+=h;var N=MoveRelativeDate(i,l=j,p);j=N.relativeTo,Z=N.days}}return{years:s,months:u,weeks:c,days:d}}(t,r,n,o,T,B);t=R.years,r=R.months,n=R.weeks,o=R.days,IsTemporalZonedDateTime(B)&&(B=MoveRelativeZonedDateTime(B,t,r,n,0));var P=BalanceDuration(o,a,i,l,s,u,c,T,B);return new Duration(t,r,n,o=P.days,a=P.hours,i=P.minutes,l=P.seconds,s=P.milliseconds,u=P.microseconds,c=P.nanoseconds)}},{key:"total",value:function total(e){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");var t=GetSlot(this,D),r=GetSlot(this,S),n=GetSlot(this,I),o=GetSlot(this,w),a=GetSlot(this,_),i=GetSlot(this,C),l=GetSlot(this,G),s=GetSlot(this,b),u=GetSlot(this,E),c=GetSlot(this,O);if(void 0===e)throw new TypeError("options argument is required");var d,m="string"==typeof e?CreateOnePropObject("unit",e):GetOptionsObject(e),h=GetTemporalUnit(m,"unit","datetime",Le),f=ToRelativeTemporalObject(m),v=UnbalanceDurationRelative(t,r,n,o,h,f);t=v.years,r=v.months,n=v.weeks,o=v.days,IsTemporalZonedDateTime(f)&&(d=MoveRelativeZonedDateTime(f,t,r,n,0));var T=BalanceDuration(o,a,i,l,s,u,c,h,d),total=RoundDuration(t,r,n,o=T.days,a=T.hours,i=T.minutes,l=T.seconds,s=T.milliseconds,u=T.microseconds,c=T.nanoseconds,1,h,"trunc",f).total;return total}},{key:"toString",value:function toString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToSecondsStringPrecision(t),n=r.precision,o=r.unit,a=r.increment;if("minute"===n)throw new RangeError('smallestUnit must not be "minute"');var i=ToTemporalRoundingMode(t,"trunc");return TemporalDurationToString(this,n,{unit:o,increment:a,roundingMode:i})}},{key:"toJSON",value:function toJSON(){if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return TemporalDurationToString(this)}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalDuration(this))throw new TypeError("invalid receiver");return"undefined"!=typeof Intl&&void 0!==Intl.DurationFormat?new Intl.DurationFormat(e,t).format(this):(console.warn("Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat."),TemporalDurationToString(this))}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() to compare Temporal.Duration")}}],[{key:"from",value:function from(e){return IsTemporalDuration(e)?new Duration(GetSlot(e,D),GetSlot(e,S),GetSlot(e,I),GetSlot(e,w),GetSlot(e,_),GetSlot(e,C),GetSlot(e,G),GetSlot(e,b),GetSlot(e,E),GetSlot(e,O)):ToTemporalDuration(e)}},{key:"compare",value:function compare(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=ToTemporalDuration(e),a=ToTemporalDuration(r),i=GetOptionsObject(n),l=ToRelativeTemporalObject(i),s=GetSlot(o,D),u=GetSlot(o,S),c=GetSlot(o,I),d=GetSlot(o,w),m=GetSlot(o,_),h=GetSlot(o,C),f=GetSlot(o,G),v=GetSlot(o,b),T=GetSlot(o,E),p=GetSlot(o,O),y=GetSlot(a,D),g=GetSlot(a,S),B=GetSlot(a,I),k=GetSlot(a,w),A=GetSlot(a,_),M=GetSlot(a,C),R=GetSlot(a,G),P=GetSlot(a,b),j=GetSlot(a,E),Z=GetSlot(a,O),Y=CalculateOffsetShift(l,s,u,c,d),N=CalculateOffsetShift(l,y,g,B,k);if(0!==s||0!==y||0!==u||0!==g||0!==c||0!==B){var J=UnbalanceDurationRelative(s,u,c,d,"day",l);d=J.days;var L=UnbalanceDurationRelative(y,g,B,k,"day",l);k=L.days}var H=TotalDurationNanoseconds(d,m,h,f,v,T,p,Y),U=TotalDurationNanoseconds(k,A,M,R,P,j,Z,N);return ComparisonResult(t.toNumber(t.subtract(H,U)))}}]),Duration}();MakeIntrinsicClass(er,"Temporal.Duration");var tr=Object.create,rr=function(){function PlainMonthDay(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:GetISO8601Calendar(),n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1972;_classCallCheck(this,PlainMonthDay);var o=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToTemporalCalendar(r),l=ToIntegerThrowOnInfinity(n);if(arguments.length<2)throw new RangeError("missing argument: isoMonth and isoDay are required");CreateTemporalMonthDaySlots(this,o,a,i,l)}return _createClass(PlainMonthDay,[{key:"monthCode",get:function get(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,f),this)}},{key:"day",get:function get(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,f),this)}},{key:"calendar",get:function get(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}},{key:"with",value:function _with(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);var r=GetSlot(this,f),n=CalendarFields(r,["day","month","monthCode","year"]),o=PrepareTemporalFields(e,n,"partial");if(!o)throw new TypeError("invalid month-day-like");var a=PrepareTemporalFields(this,n,[]);a=PrepareTemporalFields(a=CalendarMergeFields(r,a,o),n,[]);var i=GetOptionsObject(t);return CalendarMonthDayFromFields(r,a,i)}},{key:"equals",value:function equals(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");for(var t=ToTemporalMonthDay(e),r=0,n=[i,l,a];r0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToShowCalendarOption(t);return TemporalMonthDayToString(this,r)}},{key:"toJSON",value:function toJSON(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return TemporalMonthDayToString(this)}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"valueOf",value:function valueOf(){throw new TypeError("use equals() to compare Temporal.PlainMonthDay")}},{key:"toPlainDate",value:function toPlainDate(e){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("argument should be an object");var t=GetSlot(this,f),r=CalendarFields(t,["day","monthCode"]),n=PrepareTemporalFields(this,r,[]),o=CalendarFields(t,["year"]),a=CalendarMergeFields(t,n,PrepareTemporalFields(e,o,[]));a=PrepareTemporalFields(a,_toConsumableArray(new Set([].concat(_toConsumableArray(r),_toConsumableArray(o)))),[]);var i=tr(null);return i.overflow="reject",CalendarDateFromFields(t,a,i)}},{key:"getISOFields",value:function getISOFields(){if(!IsTemporalMonthDay(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,f),isoDay:GetSlot(this,l),isoMonth:GetSlot(this,i),isoYear:GetSlot(this,a)}}}],[{key:"from",value:function from(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=GetOptionsObject(t);return IsTemporalMonthDay(e)?(ToTemporalOverflow(r),CreateTemporalMonthDay(GetSlot(e,i),GetSlot(e,l),GetSlot(e,f),GetSlot(e,a))):ToTemporalMonthDay(e,r)}}]),PlainMonthDay}();MakeIntrinsicClass(rr,"Temporal.PlainMonthDay");var nr=function instant(){return new(GetIntrinsic("%Temporal.Instant%"))(Ue())},or=function plainDateTime(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:lr(),r=ToTemporalTimeZone(t),n=ToTemporalCalendar(e),o=nr();return BuiltinTimeZoneGetPlainDateTimeFor(r,o,n)},ar=function plainDateTimeISO(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lr(),t=ToTemporalTimeZone(e),r=GetISO8601Calendar(),n=nr();return BuiltinTimeZoneGetPlainDateTimeFor(t,n,r)},ir=function zonedDateTime(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:lr(),r=ToTemporalTimeZone(t),n=ToTemporalCalendar(e);return CreateTemporalZonedDateTime(Ue(),r,n)},lr=function timeZone(){return function SystemTimeZone(){var e=new ee("en-us");return new(GetIntrinsic("%Temporal.TimeZone%"))(ParseTemporalTimeZone(e.resolvedOptions().timeZone))}()},sr=_defineProperty({instant:nr,plainDateTime:or,plainDateTimeISO:ar,plainDate:function plainDate(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:lr();return TemporalDateTimeToDate(or(e,t))},plainDateISO:function plainDateISO(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lr();return TemporalDateTimeToDate(ar(e))},plainTimeISO:function plainTimeISO(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lr();return TemporalDateTimeToTime(ar(e))},timeZone:lr,zonedDateTime:ir,zonedDateTimeISO:function zonedDateTimeISO(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lr();return ir(GetISO8601Calendar(),e)}},Symbol.toStringTag,"Temporal.Now");Object.defineProperty(sr,Symbol.toStringTag,{value:"Temporal.Now",writable:!1,enumerable:!1,configurable:!0});var ur=Object.assign;function TemporalTimeToString(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=GetSlot(e,s),o=GetSlot(e,u),a=GetSlot(e,c),i=GetSlot(e,d),l=GetSlot(e,m),f=GetSlot(e,h);if(r){var v=r.unit,T=r.increment,p=r.roundingMode,y=RoundTime(n,o,a,i,l,f,T,v,p);n=y.hour,o=y.minute,a=y.second,i=y.millisecond,l=y.microsecond,f=y.nanosecond}var g=ISODateTimePartString(n),D=ISODateTimePartString(o),S=FormatSecondsStringPart(a,i,l,f,t);return"".concat(g,":").concat(D).concat(S)}var cr=function(){function PlainTime(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;_classCallCheck(this,PlainTime);var i=ToIntegerThrowOnInfinity(e),l=ToIntegerThrowOnInfinity(t),v=ToIntegerThrowOnInfinity(r),T=ToIntegerThrowOnInfinity(n),p=ToIntegerThrowOnInfinity(o),y=ToIntegerThrowOnInfinity(a);RejectTime(i,l,v,T,p,y),CreateSlots(this),SetSlot(this,s,i),SetSlot(this,u,l),SetSlot(this,c,v),SetSlot(this,d,T),SetSlot(this,m,p),SetSlot(this,h,y),SetSlot(this,f,GetISO8601Calendar())}return _createClass(PlainTime,[{key:"calendar",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}},{key:"hour",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,s)}},{key:"minute",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,u)}},{key:"second",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,c)}},{key:"millisecond",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,d)}},{key:"microsecond",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,m)}},{key:"nanosecond",get:function get(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return GetSlot(this,h)}},{key:"with",value:function _with(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);var r=ToTemporalTimeRecord(e,"partial"),n=GetOptionsObject(t),o=ToTemporalOverflow(n),a=ToTemporalTimeRecord(this),i=ur(a,r),l=i.hour,s=i.minute,u=i.second,c=i.millisecond,d=i.microsecond,m=i.nanosecond,h=RegulateTime(l,s,u,c,d,m,o);return new PlainTime(l=h.hour,s=h.minute,u=h.second,c=h.millisecond,d=h.microsecond,m=h.nanosecond)}},{key:"add",value:function add(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainTime("add",this,e)}},{key:"subtract",value:function subtract(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainTime("subtract",this,e)}},{key:"until",value:function until(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainTime("until",this,e,t)}},{key:"since",value:function since(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainTime("since",this,e,t)}},{key:"round",value:function round(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");var t="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),r=GetTemporalUnit(t,"smallestUnit","time",Le),n=ToTemporalRoundingMode(t,"halfExpand"),o=ToTemporalRoundingIncrement(t,{hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[r],!1),a=GetSlot(this,s),i=GetSlot(this,u),l=GetSlot(this,c),f=GetSlot(this,d),v=GetSlot(this,m),T=GetSlot(this,h),p=RoundTime(a,i,l,f,v,T,o,r,n);return new PlainTime(a=p.hour,i=p.minute,l=p.second,f=p.millisecond,v=p.microsecond,T=p.nanosecond)}},{key:"equals",value:function equals(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");for(var t=ToTemporalTime(e),r=0,n=[s,u,c,d,m,h];r0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalTime(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToSecondsStringPrecision(t),n=r.precision,o=r.unit,a=r.increment,i=ToTemporalRoundingMode(t,"trunc");return TemporalTimeToString(this,n,{unit:o,increment:a,roundingMode:i})}},{key:"toJSON",value:function toJSON(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return TemporalTimeToString(this,"auto")}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainTime")}},{key:"toPlainDateTime",value:function toPlainDateTime(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e),r=GetSlot(t,a),n=GetSlot(t,i),o=GetSlot(t,l),v=GetSlot(t,f);return CreateTemporalDateTime(r,n,o,GetSlot(this,s),GetSlot(this,u),GetSlot(this,c),GetSlot(this,d),GetSlot(this,m),GetSlot(this,h),v)}},{key:"toZonedDateTime",value:function toZonedDateTime(e){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");var t=e.plainDate;if(void 0===t)throw new TypeError("missing date property");var r=ToTemporalDate(t),o=e.timeZone;if(void 0===o)throw new TypeError("missing timeZone property");var v=ToTemporalTimeZone(o),T=GetSlot(r,a),p=GetSlot(r,i),y=GetSlot(r,l),g=GetSlot(r,f),D=GetSlot(this,s),S=GetSlot(this,u),I=GetSlot(this,c),w=GetSlot(this,d),_=GetSlot(this,m),C=GetSlot(this,h);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(v,new(GetIntrinsic("%Temporal.PlainDateTime%"))(T,p,y,D,S,I,w,_,C,g),"compatible"),n),v,g)}},{key:"getISOFields",value:function getISOFields(){if(!IsTemporalTime(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,f),isoHour:GetSlot(this,s),isoMicrosecond:GetSlot(this,m),isoMillisecond:GetSlot(this,d),isoMinute:GetSlot(this,u),isoNanosecond:GetSlot(this,h),isoSecond:GetSlot(this,c)}}}],[{key:"from",value:function from(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=GetOptionsObject(t),n=ToTemporalOverflow(r);return IsTemporalTime(e)?new PlainTime(GetSlot(e,s),GetSlot(e,u),GetSlot(e,c),GetSlot(e,d),GetSlot(e,m),GetSlot(e,h)):ToTemporalTime(e,n)}},{key:"compare",value:function compare(e,t){for(var r=ToTemporalTime(e),n=ToTemporalTime(t),o=0,a=[s,u,c,d,m,h];o1&&void 0!==arguments[1]?arguments[1]:GetISO8601Calendar(),r=ToTemporalInstant(e),n=ToTemporalCalendar(t);return BuiltinTimeZoneGetPlainDateTimeFor(this,r,n)}},{key:"getInstantFor",value:function getInstantFor(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");var r=ToTemporalDateTime(e),n=GetOptionsObject(t),o=ToTemporalDisambiguation(n);return BuiltinTimeZoneGetInstantFor(this,r,o)}},{key:"getPossibleInstantsFor",value:function getPossibleInstantsFor(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");var r=ToTemporalDateTime(e),n=GetIntrinsic("%Temporal.Instant%"),f=GetSlot(this,o);if(TestTimeZoneOffsetString(f)){var v=GetEpochFromISOParts(GetSlot(r,a),GetSlot(r,i),GetSlot(r,l),GetSlot(r,s),GetSlot(r,u),GetSlot(r,c),GetSlot(r,d),GetSlot(r,m),GetSlot(r,h));if(null===v)throw new RangeError("DateTime outside of supported range");var T=ParseTimeZoneOffsetString(f);return[new n(t.subtract(v,t.BigInt(T)))]}return function GetIANATimeZoneEpochValue(e,r,n,o,a,i,l,s,u,c){var d=GetEpochFromISOParts(r,n,o,a,i,l,s,u,c);if(null===d)throw new RangeError("DateTime outside of supported range");var m=t.subtract(d,_e);t.lessThan(m,Ce)&&(m=d);var h=t.add(d,_e);t.greaterThan(h,Ge)&&(h=d);var f=GetIANATimeZoneOffsetNanoseconds(m,e),v=GetIANATimeZoneOffsetNanoseconds(h,e);return(f===v?[f]:[f,v]).map((function(m){var h=t.subtract(d,t.BigInt(m)),f=GetIANATimeZoneDateTimeParts(h,e);if(r===f.year&&n===f.month&&o===f.day&&a===f.hour&&i===f.minute&&l===f.second&&s===f.millisecond&&u===f.microsecond&&c===f.nanosecond)return h})).filter((function(e){return void 0!==e}))}(f,GetSlot(r,a),GetSlot(r,i),GetSlot(r,l),GetSlot(r,s),GetSlot(r,u),GetSlot(r,c),GetSlot(r,d),GetSlot(r,m),GetSlot(r,h)).map((function(e){return new n(e)}))}},{key:"getNextTransition",value:function getNextTransition(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");var r=ToTemporalInstant(e),a=GetSlot(this,o);if(TestTimeZoneOffsetString(a)||"UTC"===a)return null;var i=GetSlot(r,n),l=GetIntrinsic("%Temporal.Instant%");return null===(i=function GetIANATimeZoneNextTransition(e,r){for(var n=t.add(e,Fe),o=maxJSBI(afterLatestPossibleTzdbRuleChange(),n),a=maxJSBI(Oe,e),i=GetIANATimeZoneOffsetNanoseconds(a,r),l=a,s=i;i===s&&t.lessThan(t.BigInt(a),o);)i===(s=GetIANATimeZoneOffsetNanoseconds(l=t.add(a,ke),r))&&(a=l);return i===s?null:bisect((function(e){return GetIANATimeZoneOffsetNanoseconds(e,r)}),a,l,i,s)}(i,a))?null:new l(i)}},{key:"getPreviousTransition",value:function getPreviousTransition(e){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");var t=ToTemporalInstant(e),r=GetSlot(this,o);if(TestTimeZoneOffsetString(r)||"UTC"===r)return null;var a=GetSlot(t,n),i=GetIntrinsic("%Temporal.Instant%");return null===(a=GetIANATimeZonePreviousTransition(a,r))?null:new i(a)}},{key:"toString",value:function toString(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(GetSlot(this,o))}},{key:"toJSON",value:function toJSON(){if(!IsTemporalTimeZone(this))throw new TypeError("invalid receiver");return ToString(this)}}],[{key:"from",value:function from(e){return ToTemporalTimeZone(e)}}]),TimeZone}();MakeIntrinsicClass(dr,"Temporal.TimeZone");var mr=Object.create,hr=function(){function PlainYearMonth(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:GetISO8601Calendar(),n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;_classCallCheck(this,PlainYearMonth);var o=ToIntegerThrowOnInfinity(e),a=ToIntegerThrowOnInfinity(t),i=ToTemporalCalendar(r),l=ToIntegerThrowOnInfinity(n);if(arguments.length<2)throw new RangeError("missing argument: isoYear and isoMonth are required");CreateTemporalYearMonthSlots(this,o,a,i,l)}return _createClass(PlainYearMonth,[{key:"year",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,f),this)}},{key:"month",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,f),this)}},{key:"monthCode",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,f),this)}},{key:"calendar",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}},{key:"era",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,f),this)}},{key:"eraYear",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,f),this)}},{key:"daysInMonth",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,f),this)}},{key:"daysInYear",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,f),this)}},{key:"monthsInYear",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,f),this)}},{key:"inLeapYear",get:function get(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,f),this)}},{key:"with",value:function _with(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid argument");RejectObjectWithCalendarOrTimeZone(e);var r=GetSlot(this,f),n=CalendarFields(r,["month","monthCode","year"]),o=PrepareTemporalFields(e,n,"partial");if(!o)throw new TypeError("invalid year-month-like");var a=PrepareTemporalFields(this,n,[]);a=PrepareTemporalFields(a=CalendarMergeFields(r,a,o),n,[]);var i=GetOptionsObject(t);return CalendarYearMonthFromFields(r,a,i)}},{key:"add",value:function add(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainYearMonth("add",this,e,t)}},{key:"subtract",value:function subtract(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromPlainYearMonth("subtract",this,e,t)}},{key:"until",value:function until(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainYearMonth("until",this,e,t)}},{key:"since",value:function since(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return DifferenceTemporalPlainYearMonth("since",this,e,t)}},{key:"equals",value:function equals(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");for(var t=ToTemporalYearMonth(e),r=0,n=[a,i,l];r0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToShowCalendarOption(t);return TemporalYearMonthToString(this,r)}},{key:"toJSON",value:function toJSON(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return TemporalYearMonthToString(this)}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.PlainYearMonth")}},{key:"toPlainDate",value:function toPlainDate(e){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("argument should be an object");var t=GetSlot(this,f),r=CalendarFields(t,["monthCode","year"]),n=PrepareTemporalFields(this,r,[]),o=CalendarFields(t,["day"]),a=CalendarMergeFields(t,n,PrepareTemporalFields(e,o,[]));a=PrepareTemporalFields(a,_toConsumableArray(new Set([].concat(_toConsumableArray(r),_toConsumableArray(o)))),[]);var i=mr(null);return i.overflow="reject",CalendarDateFromFields(t,a,i)}},{key:"getISOFields",value:function getISOFields(){if(!IsTemporalYearMonth(this))throw new TypeError("invalid receiver");return{calendar:GetSlot(this,f),isoDay:GetSlot(this,l),isoMonth:GetSlot(this,i),isoYear:GetSlot(this,a)}}}],[{key:"from",value:function from(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=GetOptionsObject(t);return IsTemporalYearMonth(e)?(ToTemporalOverflow(r),CreateTemporalYearMonth(GetSlot(e,a),GetSlot(e,i),GetSlot(e,f),GetSlot(e,l))):ToTemporalYearMonth(e,r)}},{key:"compare",value:function compare(e,t){var r=ToTemporalYearMonth(e),n=ToTemporalYearMonth(t);return CompareISODate(GetSlot(r,a),GetSlot(r,i),GetSlot(r,l),GetSlot(n,a),GetSlot(n,i),GetSlot(n,l))}}]),PlainYearMonth}();MakeIntrinsicClass(hr,"Temporal.PlainYearMonth");var fr=function(){function ZonedDateTime(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:GetISO8601Calendar();if(_classCallCheck(this,ZonedDateTime),arguments.length<1)throw new TypeError("missing argument: epochNanoseconds is required");var n=ToBigInt(e),o=ToTemporalTimeZone(t),a=ToTemporalCalendar(r);CreateTemporalZonedDateTimeSlots(this,n,o,a)}return _createClass(ZonedDateTime,[{key:"calendar",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,f)}},{key:"timeZone",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(this,g)}},{key:"year",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarYear(GetSlot(this,f),dateTime(this))}},{key:"month",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonth(GetSlot(this,f),dateTime(this))}},{key:"monthCode",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthCode(GetSlot(this,f),dateTime(this))}},{key:"day",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDay(GetSlot(this,f),dateTime(this))}},{key:"hour",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),s)}},{key:"minute",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),u)}},{key:"second",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),c)}},{key:"millisecond",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),d)}},{key:"microsecond",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),m)}},{key:"nanosecond",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetSlot(dateTime(this),h)}},{key:"era",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarEra(GetSlot(this,f),dateTime(this))}},{key:"eraYear",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarEraYear(GetSlot(this,f),dateTime(this))}},{key:"epochSeconds",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,n);return t.toNumber(t.divide(e,Ie))}},{key:"epochMilliseconds",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,n);return t.toNumber(t.divide(e,Se))}},{key:"epochMicroseconds",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,n);return ToBigIntExternal(t.divide(e,De))}},{key:"epochNanoseconds",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return ToBigIntExternal(GetSlot(this,n))}},{key:"dayOfWeek",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfWeek(GetSlot(this,f),dateTime(this))}},{key:"dayOfYear",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDayOfYear(GetSlot(this,f),dateTime(this))}},{key:"weekOfYear",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarWeekOfYear(GetSlot(this,f),dateTime(this))}},{key:"hoursInDay",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=dateTime(this),r=GetIntrinsic("%Temporal.PlainDateTime%"),o=GetSlot(e,a),s=GetSlot(e,i),u=GetSlot(e,l),c=new r(o,s,u,0,0,0,0,0,0),d=AddISODate(o,s,u,0,0,0,1,"reject"),m=new r(d.year,d.month,d.day,0,0,0,0,0,0),h=GetSlot(this,g),f=GetSlot(BuiltinTimeZoneGetInstantFor(h,c,"compatible"),n),v=GetSlot(BuiltinTimeZoneGetInstantFor(h,m,"compatible"),n);return t.toNumber(t.subtract(v,f))/36e11}},{key:"daysInWeek",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInWeek(GetSlot(this,f),dateTime(this))}},{key:"daysInMonth",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInMonth(GetSlot(this,f),dateTime(this))}},{key:"daysInYear",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarDaysInYear(GetSlot(this,f),dateTime(this))}},{key:"monthsInYear",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarMonthsInYear(GetSlot(this,f),dateTime(this))}},{key:"inLeapYear",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return CalendarInLeapYear(GetSlot(this,f),dateTime(this))}},{key:"offset",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return BuiltinTimeZoneGetOffsetStringFor(GetSlot(this,g),GetSlot(this,y))}},{key:"offsetNanoseconds",get:function get(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return GetOffsetNanosecondsFor(GetSlot(this,g),GetSlot(this,y))}},{key:"with",value:function _with(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");if(!IsObject(e))throw new TypeError("invalid zoned-date-time-like");RejectObjectWithCalendarOrTimeZone(e);var r=GetOptionsObject(t),n=ToTemporalDisambiguation(r),o=ToTemporalOffset(r,"prefer"),a=GetSlot(this,g),i=GetSlot(this,f),l=CalendarFields(i,["day","hour","microsecond","millisecond","minute","month","monthCode","nanosecond","second","year"]),s=ArrayPush(l,"offset"),u=PrepareTemporalFields(e,s,"partial"),c=ArrayPush(s,"timeZone"),d=PrepareTemporalFields(this,c,["timeZone","offset"]),m=InterpretTemporalDateTimeFields(i,d=PrepareTemporalFields(d=CalendarMergeFields(i,d,u),c,["timeZone","offset"]),r),h=m.year,v=m.month,T=m.day,p=m.hour,y=m.minute,D=m.second,S=m.millisecond,I=m.microsecond,w=m.nanosecond,_=ParseTimeZoneOffsetString(d.offset),C=InterpretISODateTimeOffset(h,v,T,p,y,D,S,I,w,"option",_,a,n,o,!1);return CreateTemporalZonedDateTime(C,GetSlot(this,g),i)}},{key:"withPlainDate",value:function withPlainDate(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var t=ToTemporalDate(e),r=GetSlot(t,a),o=GetSlot(t,i),v=GetSlot(t,l),T=GetSlot(t,f),p=dateTime(this),y=GetSlot(p,s),D=GetSlot(p,u),S=GetSlot(p,c),I=GetSlot(p,d),w=GetSlot(p,m),_=GetSlot(p,h);T=ConsolidateCalendars(GetSlot(this,f),T);var C=GetSlot(this,g);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(C,new(GetIntrinsic("%Temporal.PlainDateTime%"))(r,o,v,y,D,S,I,w,_,T),"compatible"),n),C,T)}},{key:"withPlainTime",value:function withPlainTime(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var t=GetIntrinsic("%Temporal.PlainTime%"),r=void 0===e?new t:ToTemporalTime(e),o=dateTime(this),v=GetSlot(o,a),T=GetSlot(o,i),p=GetSlot(o,l),y=GetSlot(this,f),D=GetSlot(r,s),S=GetSlot(r,u),I=GetSlot(r,c),w=GetSlot(r,d),_=GetSlot(r,m),C=GetSlot(r,h),G=GetSlot(this,g),b=GetIntrinsic("%Temporal.PlainDateTime%"),E=new b(v,T,p,D,S,I,w,_,C,y),O=BuiltinTimeZoneGetInstantFor(G,E,"compatible");return CreateTemporalZonedDateTime(GetSlot(O,n),G,y)}},{key:"withTimeZone",value:function withTimeZone(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var t=ToTemporalTimeZone(e);return CreateTemporalZonedDateTime(GetSlot(this,n),t,GetSlot(this,f))}},{key:"withCalendar",value:function withCalendar(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var t=ToTemporalCalendar(e);return CreateTemporalZonedDateTime(GetSlot(this,n),GetSlot(this,g),t)}},{key:"add",value:function add(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromZonedDateTime("add",this,e,t)}},{key:"subtract",value:function subtract(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return AddDurationToOrSubtractDurationFromZonedDateTime("subtract",this,e,t)}},{key:"until",value:function until(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalZonedDateTime("until",this,e,t)}},{key:"since",value:function since(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return DifferenceTemporalZonedDateTime("since",this,e,t)}},{key:"round",value:function round(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");if(void 0===e)throw new TypeError("options parameter is required");var r="string"==typeof e?CreateOnePropObject("smallestUnit",e):GetOptionsObject(e),o=GetTemporalUnit(r,"smallestUnit","time",Le,["day"]),v=ToTemporalRoundingMode(r,"halfExpand"),T=ToTemporalRoundingIncrement(r,{day:1,hour:24,minute:60,second:60,millisecond:1e3,microsecond:1e3,nanosecond:1e3}[o],!1),p=dateTime(this),D=GetSlot(p,a),S=GetSlot(p,i),I=GetSlot(p,l),w=GetSlot(p,s),_=GetSlot(p,u),C=GetSlot(p,c),G=GetSlot(p,d),b=GetSlot(p,m),E=GetSlot(p,h),O=GetIntrinsic("%Temporal.PlainDateTime%"),B=GetSlot(this,g),k=GetSlot(this,f),A=BuiltinTimeZoneGetInstantFor(B,new O(GetSlot(p,a),GetSlot(p,i),GetSlot(p,l),0,0,0,0,0,0),"compatible"),M=AddZonedDateTime(A,B,k,0,0,0,1,0,0,0,0,0,0),R=t.subtract(M,t.BigInt(GetSlot(A,n)));if(t.equal(R,pe))throw new RangeError("cannot round a ZonedDateTime in a calendar with zero-length days");var P=RoundISODateTime(D,S,I,w,_,C,G,b,E,T,o,v,t.toNumber(R));return CreateTemporalZonedDateTime(InterpretISODateTimeOffset(D=P.year,S=P.month,I=P.day,w=P.hour,_=P.minute,C=P.second,G=P.millisecond,b=P.microsecond,E=P.nanosecond,"option",GetOffsetNanosecondsFor(B,GetSlot(this,y)),B,"compatible","prefer",!1),B,GetSlot(this,f))}},{key:"equals",value:function equals(e){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var r=ToTemporalZonedDateTime(e),o=GetSlot(this,n),a=GetSlot(r,n);return!!t.equal(t.BigInt(o),t.BigInt(a))&&(!!TimeZoneEquals(GetSlot(this,g),GetSlot(r,g))&&CalendarEquals(GetSlot(this,f),GetSlot(r,f)))}},{key:"toString",value:function toString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var t=GetOptionsObject(e),r=ToSecondsStringPrecision(t),n=r.precision,o=r.unit,a=r.increment,i=ToTemporalRoundingMode(t,"trunc"),l=ToShowCalendarOption(t),s=ToShowTimeZoneNameOption(t),u=ToShowOffsetOption(t);return TemporalZonedDateTimeToString(this,n,l,s,u,{unit:o,increment:a,roundingMode:i})}},{key:"toLocaleString",value:function toLocaleString(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return new mt(e,t).format(this)}},{key:"toJSON",value:function toJSON(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalZonedDateTimeToString(this,"auto")}},{key:"valueOf",value:function valueOf(){throw new TypeError("use compare() or equals() to compare Temporal.ZonedDateTime")}},{key:"startOfDay",value:function startOfDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=dateTime(this),t=GetIntrinsic("%Temporal.PlainDateTime%"),r=GetSlot(this,f),o=new t(GetSlot(e,a),GetSlot(e,i),GetSlot(e,l),0,0,0,0,0,0,r),s=GetSlot(this,g);return CreateTemporalZonedDateTime(GetSlot(BuiltinTimeZoneGetInstantFor(s,o,"compatible"),n),s,r)}},{key:"toInstant",value:function toInstant(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return new(GetIntrinsic("%Temporal.Instant%"))(GetSlot(this,n))}},{key:"toPlainDate",value:function toPlainDate(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToDate(dateTime(this))}},{key:"toPlainTime",value:function toPlainTime(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return TemporalDateTimeToTime(dateTime(this))}},{key:"toPlainDateTime",value:function toPlainDateTime(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");return dateTime(this)}},{key:"toPlainYearMonth",value:function toPlainYearMonth(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,f);return CalendarYearMonthFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["monthCode","year"]),[]))}},{key:"toPlainMonthDay",value:function toPlainMonthDay(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=GetSlot(this,f);return CalendarMonthDayFromFields(e,PrepareTemporalFields(this,CalendarFields(e,["day","monthCode"]),[]))}},{key:"getISOFields",value:function getISOFields(){if(!IsTemporalZonedDateTime(this))throw new TypeError("invalid receiver");var e=dateTime(this),t=GetSlot(this,g);return{calendar:GetSlot(this,f),isoDay:GetSlot(e,l),isoHour:GetSlot(e,s),isoMicrosecond:GetSlot(e,m),isoMillisecond:GetSlot(e,d),isoMinute:GetSlot(e,u),isoMonth:GetSlot(e,i),isoNanosecond:GetSlot(e,h),isoSecond:GetSlot(e,c),isoYear:GetSlot(e,a),offset:BuiltinTimeZoneGetOffsetStringFor(t,GetSlot(this,y)),timeZone:t}}}],[{key:"from",value:function from(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=GetOptionsObject(t);return IsTemporalZonedDateTime(e)?(ToTemporalOverflow(r),ToTemporalDisambiguation(r),ToTemporalOffset(r,"reject"),CreateTemporalZonedDateTime(GetSlot(e,n),GetSlot(e,g),GetSlot(e,f))):ToTemporalZonedDateTime(e,r)}},{key:"compare",value:function compare(e,r){var o=ToTemporalZonedDateTime(e),a=ToTemporalZonedDateTime(r),i=GetSlot(o,n),l=GetSlot(a,n);return t.lessThan(t.BigInt(i),t.BigInt(l))?-1:t.greaterThan(t.BigInt(i),t.BigInt(l))?1:0}}]),ZonedDateTime}();function dateTime(e){return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(e,g),GetSlot(e,y),GetSlot(e,f))}MakeIntrinsicClass(fr,"Temporal.ZonedDateTime");var vr=Object.freeze({__proto__:null,Instant:ft,Calendar:Ct,PlainDate:Kt,PlainDateTime:Qt,Duration:er,PlainMonthDay:rr,Now:sr,PlainTime:cr,TimeZone:dr,PlainYearMonth:hr,ZonedDateTime:fr});for(var Tr=0,pr=[ft,Ct,Kt,Qt,er,rr,cr,dr,hr,fr];Tr= 0) continue; ++ target[key] = source[key]; ++ } ++ ++ return target; ++ } ++ ++ function _objectWithoutProperties(source, excluded) { ++ if (source == null) return {}; ++ ++ var target = _objectWithoutPropertiesLoose(source, excluded); ++ ++ var key, i; ++ ++ if (Object.getOwnPropertySymbols) { ++ var sourceSymbolKeys = Object.getOwnPropertySymbols(source); ++ ++ for (i = 0; i < sourceSymbolKeys.length; i++) { ++ key = sourceSymbolKeys[i]; ++ if (excluded.indexOf(key) >= 0) continue; ++ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; ++ target[key] = source[key]; ++ } ++ } ++ ++ return target; ++ } ++ ++ function _assertThisInitialized(self) { ++ if (self === void 0) { ++ throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); ++ } ++ ++ return self; ++ } ++ ++ function _possibleConstructorReturn(self, call) { ++ if (call && (typeof call === "object" || typeof call === "function")) { ++ return call; ++ } else if (call !== void 0) { ++ throw new TypeError("Derived constructors may only return object or undefined"); ++ } ++ ++ return _assertThisInitialized(self); ++ } ++ ++ function _createSuper(Derived) { ++ var hasNativeReflectConstruct = _isNativeReflectConstruct(); ++ ++ return function _createSuperInternal() { ++ var Super = _getPrototypeOf(Derived), ++ result; ++ ++ if (hasNativeReflectConstruct) { ++ var NewTarget = _getPrototypeOf(this).constructor; ++ ++ result = Reflect.construct(Super, arguments, NewTarget); ++ } else { ++ result = Super.apply(this, arguments); ++ } ++ ++ return _possibleConstructorReturn(this, result); ++ }; ++ } ++ ++ function _superPropBase(object, property) { ++ while (!Object.prototype.hasOwnProperty.call(object, property)) { ++ object = _getPrototypeOf(object); ++ if (object === null) break; ++ } ++ ++ return object; ++ } ++ ++ function _get() { ++ if (typeof Reflect !== "undefined" && Reflect.get) { ++ _get = Reflect.get; ++ } else { ++ _get = function _get(target, property, receiver) { ++ var base = _superPropBase(target, property); ++ ++ if (!base) return; ++ var desc = Object.getOwnPropertyDescriptor(base, property); ++ ++ if (desc.get) { ++ return desc.get.call(arguments.length < 3 ? target : receiver); ++ } ++ ++ return desc.value; ++ }; ++ } ++ ++ return _get.apply(this, arguments); ++ } ++ ++ function _slicedToArray(arr, i) { ++ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); ++ } ++ ++ function _toConsumableArray(arr) { ++ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); ++ } ++ ++ function _arrayWithoutHoles(arr) { ++ if (Array.isArray(arr)) return _arrayLikeToArray(arr); ++ } ++ ++ function _arrayWithHoles(arr) { ++ if (Array.isArray(arr)) return arr; ++ } ++ ++ function _iterableToArray(iter) { ++ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); ++ } ++ ++ function _iterableToArrayLimit(arr, i) { ++ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; ++ ++ if (_i == null) return; ++ var _arr = []; ++ var _n = true; ++ var _d = false; ++ ++ var _s, _e; ++ ++ try { ++ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { ++ _arr.push(_s.value); ++ ++ if (i && _arr.length === i) break; ++ } ++ } catch (err) { ++ _d = true; ++ _e = err; ++ } finally { ++ try { ++ if (!_n && _i["return"] != null) _i["return"](); ++ } finally { ++ if (_d) throw _e; ++ } ++ } ++ ++ return _arr; ++ } ++ ++ function _unsupportedIterableToArray(o, minLen) { ++ if (!o) return; ++ if (typeof o === "string") return _arrayLikeToArray(o, minLen); ++ var n = Object.prototype.toString.call(o).slice(8, -1); ++ if (n === "Object" && o.constructor) n = o.constructor.name; ++ if (n === "Map" || n === "Set") return Array.from(o); ++ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); ++ } ++ ++ function _arrayLikeToArray(arr, len) { ++ if (len == null || len > arr.length) len = arr.length; ++ ++ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; ++ ++ return arr2; ++ } ++ ++ function _nonIterableSpread() { ++ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); ++ } ++ ++ function _nonIterableRest() { ++ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); ++ } ++ ++ function _createForOfIteratorHelper(o, allowArrayLike) { ++ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; ++ ++ if (!it) { ++ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { ++ if (it) o = it; ++ var i = 0; ++ ++ var F = function () {}; ++ ++ return { ++ s: F, ++ n: function () { ++ if (i >= o.length) return { ++ done: true ++ }; ++ return { ++ done: false, ++ value: o[i++] ++ }; ++ }, ++ e: function (e) { ++ throw e; ++ }, ++ f: F ++ }; ++ } ++ ++ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); ++ } ++ ++ var normalCompletion = true, ++ didErr = false, ++ err; ++ return { ++ s: function () { ++ it = it.call(o); ++ }, ++ n: function () { ++ var step = it.next(); ++ normalCompletion = step.done; ++ return step; ++ }, ++ e: function (e) { ++ didErr = true; ++ err = e; ++ }, ++ f: function () { ++ try { ++ if (!normalCompletion && it.return != null) it.return(); ++ } finally { ++ if (didErr) throw err; ++ } ++ } ++ }; ++ } ++ ++ var JSBI = /*#__PURE__*/function (_Array) { ++ _inherits(JSBI, _Array); ++ ++ var _super = _createSuper(JSBI); ++ ++ function JSBI(i, _) { ++ var _this; ++ ++ _classCallCheck(this, JSBI); ++ ++ if (_this = _super.call(this, i), _this.sign = _, Object.setPrototypeOf(_assertThisInitialized(_this), JSBI.prototype), i > JSBI.__kMaxLength) throw new RangeError("Maximum BigInt size exceeded"); ++ return _possibleConstructorReturn(_this); ++ } ++ ++ _createClass(JSBI, [{ ++ key: "toDebugString", ++ value: function toDebugString() { ++ var i = ["BigInt["]; ++ ++ var _iterator = _createForOfIteratorHelper(this), ++ _step; ++ ++ try { ++ for (_iterator.s(); !(_step = _iterator.n()).done;) { ++ var _ = _step.value; ++ i.push((_ ? (_ >>> 0).toString(16) : _) + ", "); ++ } ++ } catch (err) { ++ _iterator.e(err); ++ } finally { ++ _iterator.f(); ++ } ++ ++ return i.push("]"), i.join(""); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var i = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10; ++ if (2 > i || 36 < i) throw new RangeError("toString() radix argument must be between 2 and 36"); ++ return 0 === this.length ? "0" : 0 == (i & i - 1) ? JSBI.__toStringBasePowerOfTwo(this, i) : JSBI.__toStringGeneric(this, i, !1); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new Error("Convert JSBI instances to native numbers using `toNumber`."); ++ } ++ }, { ++ key: "__copy", ++ value: function __copy() { ++ var _ = new JSBI(this.length, this.sign); ++ ++ for (var t = 0; t < this.length; t++) { ++ _[t] = this[t]; ++ } ++ ++ return _; ++ } ++ }, { ++ key: "__trim", ++ value: function __trim() { ++ var i = this.length, ++ _ = this[i - 1]; ++ ++ for (; 0 === _;) { ++ i--, _ = this[i - 1], this.pop(); ++ } ++ ++ return 0 === i && (this.sign = !1), this; ++ } ++ }, { ++ key: "__initializeDigits", ++ value: function __initializeDigits() { ++ for (var _ = 0; _ < this.length; _++) { ++ this[_] = 0; ++ } ++ } ++ }, { ++ key: "__clzmsd", ++ value: function __clzmsd() { ++ return JSBI.__clz30(this.__digit(this.length - 1)); ++ } ++ }, { ++ key: "__inplaceMultiplyAdd", ++ value: function __inplaceMultiplyAdd(i, _, t) { ++ t > this.length && (t = this.length); ++ var e = 32767 & i, ++ n = i >>> 15; ++ var g = 0, ++ o = _; ++ ++ for (var s = 0; s < t; s++) { ++ var _i = this.__digit(s), ++ _2 = 32767 & _i, ++ _t = _i >>> 15, ++ l = JSBI.__imul(_2, e), ++ r = JSBI.__imul(_2, n), ++ a = JSBI.__imul(_t, e), ++ u = JSBI.__imul(_t, n); ++ ++ var d = o + l + g; ++ g = d >>> 30, d &= 1073741823, d += ((32767 & r) << 15) + ((32767 & a) << 15), g += d >>> 30, o = u + (r >>> 15) + (a >>> 15), this.__setDigit(s, 1073741823 & d); ++ } ++ ++ if (0 != g || 0 !== o) throw new Error("implementation bug"); ++ } ++ }, { ++ key: "__inplaceAdd", ++ value: function __inplaceAdd(_, t, e) { ++ var n = 0; ++ ++ for (var g = 0; g < e; g++) { ++ var i = this.__halfDigit(t + g) + _.__halfDigit(g) + n; ++ n = i >>> 15, this.__setHalfDigit(t + g, 32767 & i); ++ } ++ ++ return n; ++ } ++ }, { ++ key: "__inplaceSub", ++ value: function __inplaceSub(_, t, e) { ++ var n = 0; ++ ++ if (1 & t) { ++ t >>= 1; ++ ++ var g = this.__digit(t), ++ o = 32767 & g, ++ s = 0; ++ ++ for (; s < e - 1 >>> 1; s++) { ++ var _i2 = _.__digit(s), ++ _e = (g >>> 15) - (32767 & _i2) - n; ++ ++ n = 1 & _e >>> 15, this.__setDigit(t + s, (32767 & _e) << 15 | 32767 & o), g = this.__digit(t + s + 1), o = (32767 & g) - (_i2 >>> 15) - n, n = 1 & o >>> 15; ++ } ++ ++ var i = _.__digit(s), ++ l = (g >>> 15) - (32767 & i) - n; ++ ++ n = 1 & l >>> 15, this.__setDigit(t + s, (32767 & l) << 15 | 32767 & o); ++ if (t + s + 1 >= this.length) throw new RangeError("out of bounds"); ++ 0 == (1 & e) && (g = this.__digit(t + s + 1), o = (32767 & g) - (i >>> 15) - n, n = 1 & o >>> 15, this.__setDigit(t + _.length, 1073709056 & g | 32767 & o)); ++ } else { ++ t >>= 1; ++ var _g = 0; ++ ++ for (; _g < _.length - 1; _g++) { ++ var _i4 = this.__digit(t + _g), ++ _e2 = _.__digit(_g), ++ _o2 = (32767 & _i4) - (32767 & _e2) - n; ++ ++ n = 1 & _o2 >>> 15; ++ ++ var _s2 = (_i4 >>> 15) - (_e2 >>> 15) - n; ++ ++ n = 1 & _s2 >>> 15, this.__setDigit(t + _g, (32767 & _s2) << 15 | 32767 & _o2); ++ } ++ ++ var _i3 = this.__digit(t + _g), ++ _o = _.__digit(_g), ++ _s = (32767 & _i3) - (32767 & _o) - n; ++ ++ n = 1 & _s >>> 15; ++ var _l = 0; ++ 0 == (1 & e) && (_l = (_i3 >>> 15) - (_o >>> 15) - n, n = 1 & _l >>> 15), this.__setDigit(t + _g, (32767 & _l) << 15 | 32767 & _s); ++ } ++ ++ return n; ++ } ++ }, { ++ key: "__inplaceRightShift", ++ value: function __inplaceRightShift(_) { ++ if (0 === _) return; ++ ++ var t = this.__digit(0) >>> _; ++ ++ var e = this.length - 1; ++ ++ for (var n = 0; n < e; n++) { ++ var i = this.__digit(n + 1); ++ ++ this.__setDigit(n, 1073741823 & i << 30 - _ | t), t = i >>> _; ++ } ++ ++ this.__setDigit(e, t); ++ } ++ }, { ++ key: "__digit", ++ value: function __digit(_) { ++ return this[_]; ++ } ++ }, { ++ key: "__unsignedDigit", ++ value: function __unsignedDigit(_) { ++ return this[_] >>> 0; ++ } ++ }, { ++ key: "__setDigit", ++ value: function __setDigit(_, i) { ++ this[_] = 0 | i; ++ } ++ }, { ++ key: "__setDigitGrow", ++ value: function __setDigitGrow(_, i) { ++ this[_] = 0 | i; ++ } ++ }, { ++ key: "__halfDigitLength", ++ value: function __halfDigitLength() { ++ var i = this.length; ++ return 32767 >= this.__unsignedDigit(i - 1) ? 2 * i - 1 : 2 * i; ++ } ++ }, { ++ key: "__halfDigit", ++ value: function __halfDigit(_) { ++ return 32767 & this[_ >>> 1] >>> 15 * (1 & _); ++ } ++ }, { ++ key: "__setHalfDigit", ++ value: function __setHalfDigit(_, i) { ++ var t = _ >>> 1, ++ e = this.__digit(t), ++ n = 1 & _ ? 32767 & e | i << 15 : 1073709056 & e | 32767 & i; ++ ++ this.__setDigit(t, n); ++ } ++ }], [{ ++ key: "BigInt", ++ value: function BigInt(i) { ++ var _ = Math.floor, ++ t = Number.isFinite; ++ ++ if ("number" == typeof i) { ++ if (0 === i) return JSBI.__zero(); ++ if (JSBI.__isOneDigitInt(i)) return 0 > i ? JSBI.__oneDigit(-i, !0) : JSBI.__oneDigit(i, !1); ++ if (!t(i) || _(i) !== i) throw new RangeError("The number " + i + " cannot be converted to BigInt because it is not an integer"); ++ return JSBI.__fromDouble(i); ++ } ++ ++ if ("string" == typeof i) { ++ var _3 = JSBI.__fromString(i); ++ ++ if (null === _3) throw new SyntaxError("Cannot convert " + i + " to a BigInt"); ++ return _3; ++ } ++ ++ if ("boolean" == typeof i) return !0 === i ? JSBI.__oneDigit(1, !1) : JSBI.__zero(); ++ ++ if ("object" == _typeof(i)) { ++ if (i.constructor === JSBI) return i; ++ ++ var _4 = JSBI.__toPrimitive(i); ++ ++ return JSBI.BigInt(_4); ++ } ++ ++ throw new TypeError("Cannot convert " + i + " to a BigInt"); ++ } ++ }, { ++ key: "toNumber", ++ value: function toNumber(i) { ++ var _ = i.length; ++ if (0 === _) return 0; ++ ++ if (1 === _) { ++ var _5 = i.__unsignedDigit(0); ++ ++ return i.sign ? -_5 : _5; ++ } ++ ++ var t = i.__digit(_ - 1), ++ e = JSBI.__clz30(t), ++ n = 30 * _ - e; ++ ++ if (1024 < n) return i.sign ? -Infinity : 1 / 0; ++ var g = n - 1, ++ o = t, ++ s = _ - 1; ++ var l = e + 3; ++ var r = 32 === l ? 0 : o << l; ++ r >>>= 12; ++ var a = l - 12; ++ var u = 12 <= l ? 0 : o << 20 + l, ++ d = 20 + l; ++ ++ for (0 < a && 0 < s && (s--, o = i.__digit(s), r |= o >>> 30 - a, u = o << a + 2, d = a + 2); 0 < d && 0 < s;) { ++ s--, o = i.__digit(s), u |= 30 <= d ? o << d - 30 : o >>> 30 - d, d -= 30; ++ } ++ ++ var h = JSBI.__decideRounding(i, d, s, o); ++ ++ if ((1 === h || 0 === h && 1 == (1 & u)) && (u = u + 1 >>> 0, 0 === u && (r++, 0 != r >>> 20 && (r = 0, g++, 1023 < g)))) return i.sign ? -Infinity : 1 / 0; ++ var m = i.sign ? -2147483648 : 0; ++ return g = g + 1023 << 20, JSBI.__kBitConversionInts[1] = m | g | r, JSBI.__kBitConversionInts[0] = u, JSBI.__kBitConversionDouble[0]; ++ } ++ }, { ++ key: "unaryMinus", ++ value: function unaryMinus(i) { ++ if (0 === i.length) return i; ++ ++ var _ = i.__copy(); ++ ++ return _.sign = !i.sign, _; ++ } ++ }, { ++ key: "bitwiseNot", ++ value: function bitwiseNot(i) { ++ return i.sign ? JSBI.__absoluteSubOne(i).__trim() : JSBI.__absoluteAddOne(i, !0); ++ } ++ }, { ++ key: "exponentiate", ++ value: function exponentiate(i, _) { ++ if (_.sign) throw new RangeError("Exponent must be positive"); ++ if (0 === _.length) return JSBI.__oneDigit(1, !1); ++ if (0 === i.length) return i; ++ if (1 === i.length && 1 === i.__digit(0)) return i.sign && 0 == (1 & _.__digit(0)) ? JSBI.unaryMinus(i) : i; ++ if (1 < _.length) throw new RangeError("BigInt too big"); ++ ++ var t = _.__unsignedDigit(0); ++ ++ if (1 === t) return i; ++ if (t >= JSBI.__kMaxLengthBits) throw new RangeError("BigInt too big"); ++ ++ if (1 === i.length && 2 === i.__digit(0)) { ++ var _6 = 1 + (0 | t / 30), ++ _e3 = i.sign && 0 != (1 & t), ++ _n = new JSBI(_6, _e3); ++ ++ _n.__initializeDigits(); ++ ++ var g = 1 << t % 30; ++ return _n.__setDigit(_6 - 1, g), _n; ++ } ++ ++ var e = null, ++ n = i; ++ ++ for (0 != (1 & t) && (e = i), t >>= 1; 0 !== t; t >>= 1) { ++ n = JSBI.multiply(n, n), 0 != (1 & t) && (null === e ? e = n : e = JSBI.multiply(e, n)); ++ } ++ ++ return e; ++ } ++ }, { ++ key: "multiply", ++ value: function multiply(_, t) { ++ if (0 === _.length) return _; ++ if (0 === t.length) return t; ++ var i = _.length + t.length; ++ 30 <= _.__clzmsd() + t.__clzmsd() && i--; ++ var e = new JSBI(i, _.sign !== t.sign); ++ ++ e.__initializeDigits(); ++ ++ for (var n = 0; n < _.length; n++) { ++ JSBI.__multiplyAccumulate(t, _.__digit(n), e, n); ++ } ++ ++ return e.__trim(); ++ } ++ }, { ++ key: "divide", ++ value: function divide(i, _) { ++ if (0 === _.length) throw new RangeError("Division by zero"); ++ if (0 > JSBI.__absoluteCompare(i, _)) return JSBI.__zero(); ++ ++ var t = i.sign !== _.sign, ++ e = _.__unsignedDigit(0); ++ ++ var n; ++ ++ if (1 === _.length && 32767 >= e) { ++ if (1 === e) return t === i.sign ? i : JSBI.unaryMinus(i); ++ n = JSBI.__absoluteDivSmall(i, e, null); ++ } else n = JSBI.__absoluteDivLarge(i, _, !0, !1); ++ ++ return n.sign = t, n.__trim(); ++ } ++ }, { ++ key: "remainder", ++ value: function remainder(i, _) { ++ if (0 === _.length) throw new RangeError("Division by zero"); ++ if (0 > JSBI.__absoluteCompare(i, _)) return i; ++ ++ var t = _.__unsignedDigit(0); ++ ++ if (1 === _.length && 32767 >= t) { ++ if (1 === t) return JSBI.__zero(); ++ ++ var _7 = JSBI.__absoluteModSmall(i, t); ++ ++ return 0 === _7 ? JSBI.__zero() : JSBI.__oneDigit(_7, i.sign); ++ } ++ ++ var e = JSBI.__absoluteDivLarge(i, _, !1, !0); ++ ++ return e.sign = i.sign, e.__trim(); ++ } ++ }, { ++ key: "add", ++ value: function add(i, _) { ++ var t = i.sign; ++ return t === _.sign ? JSBI.__absoluteAdd(i, _, t) : 0 <= JSBI.__absoluteCompare(i, _) ? JSBI.__absoluteSub(i, _, t) : JSBI.__absoluteSub(_, i, !t); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(i, _) { ++ var t = i.sign; ++ return t === _.sign ? 0 <= JSBI.__absoluteCompare(i, _) ? JSBI.__absoluteSub(i, _, t) : JSBI.__absoluteSub(_, i, !t) : JSBI.__absoluteAdd(i, _, t); ++ } ++ }, { ++ key: "leftShift", ++ value: function leftShift(i, _) { ++ return 0 === _.length || 0 === i.length ? i : _.sign ? JSBI.__rightShiftByAbsolute(i, _) : JSBI.__leftShiftByAbsolute(i, _); ++ } ++ }, { ++ key: "signedRightShift", ++ value: function signedRightShift(i, _) { ++ return 0 === _.length || 0 === i.length ? i : _.sign ? JSBI.__leftShiftByAbsolute(i, _) : JSBI.__rightShiftByAbsolute(i, _); ++ } ++ }, { ++ key: "unsignedRightShift", ++ value: function unsignedRightShift() { ++ throw new TypeError("BigInts have no unsigned right shift; use >> instead"); ++ } ++ }, { ++ key: "lessThan", ++ value: function lessThan(i, _) { ++ return 0 > JSBI.__compareToBigInt(i, _); ++ } ++ }, { ++ key: "lessThanOrEqual", ++ value: function lessThanOrEqual(i, _) { ++ return 0 >= JSBI.__compareToBigInt(i, _); ++ } ++ }, { ++ key: "greaterThan", ++ value: function greaterThan(i, _) { ++ return 0 < JSBI.__compareToBigInt(i, _); ++ } ++ }, { ++ key: "greaterThanOrEqual", ++ value: function greaterThanOrEqual(i, _) { ++ return 0 <= JSBI.__compareToBigInt(i, _); ++ } ++ }, { ++ key: "equal", ++ value: function equal(_, t) { ++ if (_.sign !== t.sign) return !1; ++ if (_.length !== t.length) return !1; ++ ++ for (var e = 0; e < _.length; e++) { ++ if (_.__digit(e) !== t.__digit(e)) return !1; ++ } ++ ++ return !0; ++ } ++ }, { ++ key: "notEqual", ++ value: function notEqual(i, _) { ++ return !JSBI.equal(i, _); ++ } ++ }, { ++ key: "bitwiseAnd", ++ value: function bitwiseAnd(i, _) { ++ var _ref; ++ ++ var t = Math.max; ++ if (!i.sign && !_.sign) return JSBI.__absoluteAnd(i, _).__trim(); ++ ++ if (i.sign && _.sign) { ++ var e = t(i.length, _.length) + 1; ++ ++ var n = JSBI.__absoluteSubOne(i, e); ++ ++ var g = JSBI.__absoluteSubOne(_); ++ ++ return n = JSBI.__absoluteOr(n, g, n), JSBI.__absoluteAddOne(n, !0, n).__trim(); ++ } ++ ++ return i.sign && (_ref = [_, i], i = _ref[0], _ = _ref[1], _ref), JSBI.__absoluteAndNot(i, JSBI.__absoluteSubOne(_)).__trim(); ++ } ++ }, { ++ key: "bitwiseXor", ++ value: function bitwiseXor(i, _) { ++ var _ref2; ++ ++ var t = Math.max; ++ if (!i.sign && !_.sign) return JSBI.__absoluteXor(i, _).__trim(); ++ ++ if (i.sign && _.sign) { ++ var _e4 = t(i.length, _.length), ++ _n2 = JSBI.__absoluteSubOne(i, _e4), ++ g = JSBI.__absoluteSubOne(_); ++ ++ return JSBI.__absoluteXor(_n2, g, _n2).__trim(); ++ } ++ ++ var e = t(i.length, _.length) + 1; ++ i.sign && (_ref2 = [_, i], i = _ref2[0], _ = _ref2[1], _ref2); ++ ++ var n = JSBI.__absoluteSubOne(_, e); ++ ++ return n = JSBI.__absoluteXor(n, i, n), JSBI.__absoluteAddOne(n, !0, n).__trim(); ++ } ++ }, { ++ key: "bitwiseOr", ++ value: function bitwiseOr(i, _) { ++ var _ref3; ++ ++ var t = Math.max; ++ var e = t(i.length, _.length); ++ if (!i.sign && !_.sign) return JSBI.__absoluteOr(i, _).__trim(); ++ ++ if (i.sign && _.sign) { ++ var _t2 = JSBI.__absoluteSubOne(i, e); ++ ++ var _n3 = JSBI.__absoluteSubOne(_); ++ ++ return _t2 = JSBI.__absoluteAnd(_t2, _n3, _t2), JSBI.__absoluteAddOne(_t2, !0, _t2).__trim(); ++ } ++ ++ i.sign && (_ref3 = [_, i], i = _ref3[0], _ = _ref3[1], _ref3); ++ ++ var n = JSBI.__absoluteSubOne(_, e); ++ ++ return n = JSBI.__absoluteAndNot(n, i, n), JSBI.__absoluteAddOne(n, !0, n).__trim(); ++ } ++ }, { ++ key: "asIntN", ++ value: function asIntN(_, t) { ++ var i = Math.floor; ++ if (0 === t.length) return t; ++ if (_ = i(_), 0 > _) throw new RangeError("Invalid value: not (convertible to) a safe integer"); ++ if (0 === _) return JSBI.__zero(); ++ if (_ >= JSBI.__kMaxLengthBits) return t; ++ var e = 0 | (_ + 29) / 30; ++ if (t.length < e) return t; ++ ++ var g = t.__unsignedDigit(e - 1), ++ o = 1 << (_ - 1) % 30; ++ ++ if (t.length === e && g < o) return t; ++ if (!((g & o) === o)) return JSBI.__truncateToNBits(_, t); ++ if (!t.sign) return JSBI.__truncateAndSubFromPowerOfTwo(_, t, !0); ++ ++ if (0 == (g & o - 1)) { ++ for (var n = e - 2; 0 <= n; n--) { ++ if (0 !== t.__digit(n)) return JSBI.__truncateAndSubFromPowerOfTwo(_, t, !1); ++ } ++ ++ return t.length === e && g === o ? t : JSBI.__truncateToNBits(_, t); ++ } ++ ++ return JSBI.__truncateAndSubFromPowerOfTwo(_, t, !1); ++ } ++ }, { ++ key: "asUintN", ++ value: function asUintN(i, _) { ++ var t = Math.floor; ++ if (0 === _.length) return _; ++ if (i = t(i), 0 > i) throw new RangeError("Invalid value: not (convertible to) a safe integer"); ++ if (0 === i) return JSBI.__zero(); ++ ++ if (_.sign) { ++ if (i > JSBI.__kMaxLengthBits) throw new RangeError("BigInt too big"); ++ return JSBI.__truncateAndSubFromPowerOfTwo(i, _, !1); ++ } ++ ++ if (i >= JSBI.__kMaxLengthBits) return _; ++ var e = 0 | (i + 29) / 30; ++ if (_.length < e) return _; ++ var g = i % 30; ++ ++ if (_.length == e) { ++ if (0 === g) return _; ++ ++ var _i5 = _.__digit(e - 1); ++ ++ if (0 == _i5 >>> g) return _; ++ } ++ ++ return JSBI.__truncateToNBits(i, _); ++ } ++ }, { ++ key: "ADD", ++ value: function ADD(i, _) { ++ if (i = JSBI.__toPrimitive(i), _ = JSBI.__toPrimitive(_), "string" == typeof i) return "string" != typeof _ && (_ = _.toString()), i + _; ++ if ("string" == typeof _) return i.toString() + _; ++ if (i = JSBI.__toNumeric(i), _ = JSBI.__toNumeric(_), JSBI.__isBigInt(i) && JSBI.__isBigInt(_)) return JSBI.add(i, _); ++ if ("number" == typeof i && "number" == typeof _) return i + _; ++ throw new TypeError("Cannot mix BigInt and other types, use explicit conversions"); ++ } ++ }, { ++ key: "LT", ++ value: function LT(i, _) { ++ return JSBI.__compare(i, _, 0); ++ } ++ }, { ++ key: "LE", ++ value: function LE(i, _) { ++ return JSBI.__compare(i, _, 1); ++ } ++ }, { ++ key: "GT", ++ value: function GT(i, _) { ++ return JSBI.__compare(i, _, 2); ++ } ++ }, { ++ key: "GE", ++ value: function GE(i, _) { ++ return JSBI.__compare(i, _, 3); ++ } ++ }, { ++ key: "EQ", ++ value: function EQ(i, _) { ++ for (;;) { ++ if (JSBI.__isBigInt(i)) return JSBI.__isBigInt(_) ? JSBI.equal(i, _) : JSBI.EQ(_, i); ++ ++ if ("number" == typeof i) { ++ if (JSBI.__isBigInt(_)) return JSBI.__equalToNumber(_, i); ++ if ("object" != _typeof(_)) return i == _; ++ _ = JSBI.__toPrimitive(_); ++ } else if ("string" == typeof i) { ++ if (JSBI.__isBigInt(_)) return i = JSBI.__fromString(i), null !== i && JSBI.equal(i, _); ++ if ("object" != _typeof(_)) return i == _; ++ _ = JSBI.__toPrimitive(_); ++ } else if ("boolean" == typeof i) { ++ if (JSBI.__isBigInt(_)) return JSBI.__equalToNumber(_, +i); ++ if ("object" != _typeof(_)) return i == _; ++ _ = JSBI.__toPrimitive(_); ++ } else if ("symbol" == _typeof(i)) { ++ if (JSBI.__isBigInt(_)) return !1; ++ if ("object" != _typeof(_)) return i == _; ++ _ = JSBI.__toPrimitive(_); ++ } else if ("object" == _typeof(i)) { ++ if ("object" == _typeof(_) && _.constructor !== JSBI) return i == _; ++ i = JSBI.__toPrimitive(i); ++ } else return i == _; ++ } ++ } ++ }, { ++ key: "NE", ++ value: function NE(i, _) { ++ return !JSBI.EQ(i, _); ++ } ++ }, { ++ key: "__zero", ++ value: function __zero() { ++ return new JSBI(0, !1); ++ } ++ }, { ++ key: "__oneDigit", ++ value: function __oneDigit(i, _) { ++ var t = new JSBI(1, _); ++ return t.__setDigit(0, i), t; ++ } ++ }, { ++ key: "__decideRounding", ++ value: function __decideRounding(i, _, t, e) { ++ if (0 < _) return -1; ++ var n; ++ if (0 > _) n = -_ - 1;else { ++ if (0 === t) return -1; ++ t--, e = i.__digit(t), n = 29; ++ } ++ var g = 1 << n; ++ if (0 == (e & g)) return -1; ++ if (g -= 1, 0 != (e & g)) return 1; ++ ++ for (; 0 < t;) { ++ if (t--, 0 !== i.__digit(t)) return 1; ++ } ++ ++ return 0; ++ } ++ }, { ++ key: "__fromDouble", ++ value: function __fromDouble(i) { ++ JSBI.__kBitConversionDouble[0] = i; ++ ++ var _ = 2047 & JSBI.__kBitConversionInts[1] >>> 20, ++ t = _ - 1023, ++ e = (0 | t / 30) + 1, ++ n = new JSBI(e, 0 > i); ++ ++ var g = 1048575 & JSBI.__kBitConversionInts[1] | 1048576, ++ o = JSBI.__kBitConversionInts[0]; ++ var s = 20, ++ l = t % 30; ++ var r, ++ a = 0; ++ ++ if (l < 20) { ++ var _i6 = s - l; ++ ++ a = _i6 + 32, r = g >>> _i6, g = g << 32 - _i6 | o >>> _i6, o <<= 32 - _i6; ++ } else if (l === 20) a = 32, r = g, g = o, o = 0;else { ++ var _i7 = l - s; ++ ++ a = 32 - _i7, r = g << _i7 | o >>> 32 - _i7, g = o << _i7, o = 0; ++ } ++ ++ n.__setDigit(e - 1, r); ++ ++ for (var _8 = e - 2; 0 <= _8; _8--) { ++ 0 < a ? (a -= 30, r = g >>> 2, g = g << 30 | o >>> 2, o <<= 30) : r = 0, n.__setDigit(_8, r); ++ } ++ ++ return n.__trim(); ++ } ++ }, { ++ key: "__isWhitespace", ++ value: function __isWhitespace(i) { ++ return !!(13 >= i && 9 <= i) || (159 >= i ? 32 == i : 131071 >= i ? 160 == i || 5760 == i : 196607 >= i ? (i &= 131071, 10 >= i || 40 == i || 41 == i || 47 == i || 95 == i || 4096 == i) : 65279 == i); ++ } ++ }, { ++ key: "__fromString", ++ value: function __fromString(i) { ++ var _ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; ++ ++ var t = 0; ++ var e = i.length; ++ var n = 0; ++ if (n === e) return JSBI.__zero(); ++ var g = i.charCodeAt(n); ++ ++ for (; JSBI.__isWhitespace(g);) { ++ if (++n === e) return JSBI.__zero(); ++ g = i.charCodeAt(n); ++ } ++ ++ if (43 === g) { ++ if (++n === e) return null; ++ g = i.charCodeAt(n), t = 1; ++ } else if (45 === g) { ++ if (++n === e) return null; ++ g = i.charCodeAt(n), t = -1; ++ } ++ ++ if (0 === _) { ++ if (_ = 10, 48 === g) { ++ if (++n === e) return JSBI.__zero(); ++ ++ if (g = i.charCodeAt(n), 88 === g || 120 === g) { ++ if (_ = 16, ++n === e) return null; ++ g = i.charCodeAt(n); ++ } else if (79 === g || 111 === g) { ++ if (_ = 8, ++n === e) return null; ++ g = i.charCodeAt(n); ++ } else if (66 === g || 98 === g) { ++ if (_ = 2, ++n === e) return null; ++ g = i.charCodeAt(n); ++ } ++ } ++ } else if (16 === _ && 48 === g) { ++ if (++n === e) return JSBI.__zero(); ++ ++ if (g = i.charCodeAt(n), 88 === g || 120 === g) { ++ if (++n === e) return null; ++ g = i.charCodeAt(n); ++ } ++ } ++ ++ if (0 != t && 10 !== _) return null; ++ ++ for (; 48 === g;) { ++ if (++n === e) return JSBI.__zero(); ++ g = i.charCodeAt(n); ++ } ++ ++ var o = e - n; ++ var s = JSBI.__kMaxBitsPerChar[_], ++ l = JSBI.__kBitsPerCharTableMultiplier - 1; ++ if (o > 1073741824 / s) return null; ++ var r = s * o + l >>> JSBI.__kBitsPerCharTableShift, ++ a = new JSBI(0 | (r + 29) / 30, !1), ++ u = 10 > _ ? _ : 10, ++ h = 10 < _ ? _ - 10 : 0; ++ ++ if (0 == (_ & _ - 1)) { ++ s >>= JSBI.__kBitsPerCharTableShift; ++ var _9 = [], ++ _t3 = []; ++ ++ var _o3 = !1; ++ ++ do { ++ var _l2 = 0, ++ _r = 0; ++ ++ for (;;) { ++ var _10 = void 0; ++ ++ if (g - 48 >>> 0 < u) _10 = g - 48;else if ((32 | g) - 97 >>> 0 < h) _10 = (32 | g) - 87;else { ++ _o3 = !0; ++ break; ++ } ++ ++ if (_r += s, _l2 = _l2 << s | _10, ++n === e) { ++ _o3 = !0; ++ break; ++ } ++ ++ if (g = i.charCodeAt(n), 30 < _r + s) break; ++ } ++ ++ _9.push(_l2), _t3.push(_r); ++ } while (!_o3); ++ ++ JSBI.__fillFromParts(a, _9, _t3); ++ } else { ++ a.__initializeDigits(); ++ ++ var _t4 = !1, ++ _o4 = 0; ++ ++ do { ++ var _r2 = 0, ++ b = 1; ++ ++ for (;;) { ++ var _s3 = void 0; ++ ++ if (g - 48 >>> 0 < u) _s3 = g - 48;else if ((32 | g) - 97 >>> 0 < h) _s3 = (32 | g) - 87;else { ++ _t4 = !0; ++ break; ++ } ++ ++ var _l3 = b * _; ++ ++ if (1073741823 < _l3) break; ++ ++ if (b = _l3, _r2 = _r2 * _ + _s3, _o4++, ++n === e) { ++ _t4 = !0; ++ break; ++ } ++ ++ g = i.charCodeAt(n); ++ } ++ ++ l = 30 * JSBI.__kBitsPerCharTableMultiplier - 1; ++ var D = 0 | (s * _o4 + l >>> JSBI.__kBitsPerCharTableShift) / 30; ++ ++ a.__inplaceMultiplyAdd(b, _r2, D); ++ } while (!_t4); ++ } ++ ++ if (n !== e) { ++ if (!JSBI.__isWhitespace(g)) return null; ++ ++ for (n++; n < e; n++) { ++ if (g = i.charCodeAt(n), !JSBI.__isWhitespace(g)) return null; ++ } ++ } ++ ++ return a.sign = -1 == t, a.__trim(); ++ } ++ }, { ++ key: "__fillFromParts", ++ value: function __fillFromParts(_, t, e) { ++ var n = 0, ++ g = 0, ++ o = 0; ++ ++ for (var s = t.length - 1; 0 <= s; s--) { ++ var i = t[s], ++ l = e[s]; ++ g |= i << o, o += l, 30 === o ? (_.__setDigit(n++, g), o = 0, g = 0) : 30 < o && (_.__setDigit(n++, 1073741823 & g), o -= 30, g = i >>> l - o); ++ } ++ ++ if (0 !== g) { ++ if (n >= _.length) throw new Error("implementation bug"); ++ ++ _.__setDigit(n++, g); ++ } ++ ++ for (; n < _.length; n++) { ++ _.__setDigit(n, 0); ++ } ++ } ++ }, { ++ key: "__toStringBasePowerOfTwo", ++ value: function __toStringBasePowerOfTwo(_, i) { ++ var t = _.length; ++ var e = i - 1; ++ e = (85 & e >>> 1) + (85 & e), e = (51 & e >>> 2) + (51 & e), e = (15 & e >>> 4) + (15 & e); ++ ++ var n = e, ++ g = i - 1, ++ o = _.__digit(t - 1), ++ s = JSBI.__clz30(o); ++ ++ var l = 0 | (30 * t - s + n - 1) / n; ++ if (_.sign && l++, 268435456 < l) throw new Error("string too long"); ++ var r = Array(l); ++ var a = l - 1, ++ u = 0, ++ d = 0; ++ ++ for (var _e5 = 0; _e5 < t - 1; _e5++) { ++ var _i8 = _.__digit(_e5), ++ _t5 = (u | _i8 << d) & g; ++ ++ r[a--] = JSBI.__kConversionChars[_t5]; ++ ++ var _o5 = n - d; ++ ++ for (u = _i8 >>> _o5, d = 30 - _o5; d >= n;) { ++ r[a--] = JSBI.__kConversionChars[u & g], u >>>= n, d -= n; ++ } ++ } ++ ++ var h = (u | o << d) & g; ++ ++ for (r[a--] = JSBI.__kConversionChars[h], u = o >>> n - d; 0 !== u;) { ++ r[a--] = JSBI.__kConversionChars[u & g], u >>>= n; ++ } ++ ++ if (_.sign && (r[a--] = "-"), -1 != a) throw new Error("implementation bug"); ++ return r.join(""); ++ } ++ }, { ++ key: "__toStringGeneric", ++ value: function __toStringGeneric(_, i, t) { ++ var e = _.length; ++ if (0 === e) return ""; ++ ++ if (1 === e) { ++ var _e6 = _.__unsignedDigit(0).toString(i); ++ ++ return !1 === t && _.sign && (_e6 = "-" + _e6), _e6; ++ } ++ ++ var n = 30 * e - JSBI.__clz30(_.__digit(e - 1)), ++ g = JSBI.__kMaxBitsPerChar[i], ++ o = g - 1; ++ ++ var s = n * JSBI.__kBitsPerCharTableMultiplier; ++ s += o - 1, s = 0 | s / o; ++ var l = s + 1 >> 1, ++ r = JSBI.exponentiate(JSBI.__oneDigit(i, !1), JSBI.__oneDigit(l, !1)); ++ var a, u; ++ ++ var d = r.__unsignedDigit(0); ++ ++ if (1 === r.length && 32767 >= d) { ++ a = new JSBI(_.length, !1), a.__initializeDigits(); ++ var _t6 = 0; ++ ++ for (var _e7 = 2 * _.length - 1; 0 <= _e7; _e7--) { ++ var _i9 = _t6 << 15 | _.__halfDigit(_e7); ++ ++ a.__setHalfDigit(_e7, 0 | _i9 / d), _t6 = 0 | _i9 % d; ++ } ++ ++ u = _t6.toString(i); ++ } else { ++ var _t7 = JSBI.__absoluteDivLarge(_, r, !0, !0); ++ ++ a = _t7.quotient; ++ ++ var _e8 = _t7.remainder.__trim(); ++ ++ u = JSBI.__toStringGeneric(_e8, i, !0); ++ } ++ ++ a.__trim(); ++ ++ var h = JSBI.__toStringGeneric(a, i, !0); ++ ++ for (; u.length < l;) { ++ u = "0" + u; ++ } ++ ++ return !1 === t && _.sign && (h = "-" + h), h + u; ++ } ++ }, { ++ key: "__unequalSign", ++ value: function __unequalSign(i) { ++ return i ? -1 : 1; ++ } ++ }, { ++ key: "__absoluteGreater", ++ value: function __absoluteGreater(i) { ++ return i ? -1 : 1; ++ } ++ }, { ++ key: "__absoluteLess", ++ value: function __absoluteLess(i) { ++ return i ? 1 : -1; ++ } ++ }, { ++ key: "__compareToBigInt", ++ value: function __compareToBigInt(i, _) { ++ var t = i.sign; ++ if (t !== _.sign) return JSBI.__unequalSign(t); ++ ++ var e = JSBI.__absoluteCompare(i, _); ++ ++ return 0 < e ? JSBI.__absoluteGreater(t) : 0 > e ? JSBI.__absoluteLess(t) : 0; ++ } ++ }, { ++ key: "__compareToNumber", ++ value: function __compareToNumber(i, _) { ++ if (JSBI.__isOneDigitInt(_)) { ++ var t = i.sign, ++ e = 0 > _; ++ if (t !== e) return JSBI.__unequalSign(t); ++ ++ if (0 === i.length) { ++ if (e) throw new Error("implementation bug"); ++ return 0 === _ ? 0 : -1; ++ } ++ ++ if (1 < i.length) return JSBI.__absoluteGreater(t); ++ ++ var n = Math.abs(_), ++ g = i.__unsignedDigit(0); ++ ++ return g > n ? JSBI.__absoluteGreater(t) : g < n ? JSBI.__absoluteLess(t) : 0; ++ } ++ ++ return JSBI.__compareToDouble(i, _); ++ } ++ }, { ++ key: "__compareToDouble", ++ value: function __compareToDouble(i, _) { ++ if (_ !== _) return _; ++ if (_ === 1 / 0) return -1; ++ if (_ === -Infinity) return 1; ++ var t = i.sign; ++ if (t !== 0 > _) return JSBI.__unequalSign(t); ++ if (0 === _) throw new Error("implementation bug: should be handled elsewhere"); ++ if (0 === i.length) return -1; ++ JSBI.__kBitConversionDouble[0] = _; ++ var e = 2047 & JSBI.__kBitConversionInts[1] >>> 20; ++ if (2047 == e) throw new Error("implementation bug: handled elsewhere"); ++ var n = e - 1023; ++ if (0 > n) return JSBI.__absoluteGreater(t); ++ var g = i.length; ++ ++ var o = i.__digit(g - 1); ++ ++ var s = JSBI.__clz30(o), ++ l = 30 * g - s, ++ r = n + 1; ++ ++ if (l < r) return JSBI.__absoluteLess(t); ++ if (l > r) return JSBI.__absoluteGreater(t); ++ var a = 1048576 | 1048575 & JSBI.__kBitConversionInts[1], ++ u = JSBI.__kBitConversionInts[0]; ++ var d = 20, ++ h = 29 - s; ++ if (h !== (0 | (l - 1) % 30)) throw new Error("implementation bug"); ++ var m, ++ b = 0; ++ ++ if (20 > h) { ++ var _i10 = d - h; ++ ++ b = _i10 + 32, m = a >>> _i10, a = a << 32 - _i10 | u >>> _i10, u <<= 32 - _i10; ++ } else if (20 === h) b = 32, m = a, a = u, u = 0;else { ++ var _i11 = h - d; ++ ++ b = 32 - _i11, m = a << _i11 | u >>> 32 - _i11, a = u << _i11, u = 0; ++ } ++ ++ if (o >>>= 0, m >>>= 0, o > m) return JSBI.__absoluteGreater(t); ++ if (o < m) return JSBI.__absoluteLess(t); ++ ++ for (var _e9 = g - 2; 0 <= _e9; _e9--) { ++ 0 < b ? (b -= 30, m = a >>> 2, a = a << 30 | u >>> 2, u <<= 30) : m = 0; ++ ++ var _11 = i.__unsignedDigit(_e9); ++ ++ if (_11 > m) return JSBI.__absoluteGreater(t); ++ if (_11 < m) return JSBI.__absoluteLess(t); ++ } ++ ++ if (0 !== a || 0 !== u) { ++ if (0 === b) throw new Error("implementation bug"); ++ return JSBI.__absoluteLess(t); ++ } ++ ++ return 0; ++ } ++ }, { ++ key: "__equalToNumber", ++ value: function __equalToNumber(i, _) { ++ var t = Math.abs; ++ return JSBI.__isOneDigitInt(_) ? 0 === _ ? 0 === i.length : 1 === i.length && i.sign === 0 > _ && i.__unsignedDigit(0) === t(_) : 0 === JSBI.__compareToDouble(i, _); ++ } ++ }, { ++ key: "__comparisonResultToBool", ++ value: function __comparisonResultToBool(i, _) { ++ return 0 === _ ? 0 > i : 1 === _ ? 0 >= i : 2 === _ ? 0 < i : 3 === _ ? 0 <= i : void 0; ++ } ++ }, { ++ key: "__compare", ++ value: function __compare(i, _, t) { ++ if (i = JSBI.__toPrimitive(i), _ = JSBI.__toPrimitive(_), "string" == typeof i && "string" == typeof _) switch (t) { ++ case 0: ++ return i < _; ++ ++ case 1: ++ return i <= _; ++ ++ case 2: ++ return i > _; ++ ++ case 3: ++ return i >= _; ++ } ++ if (JSBI.__isBigInt(i) && "string" == typeof _) return _ = JSBI.__fromString(_), null !== _ && JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i, _), t); ++ if ("string" == typeof i && JSBI.__isBigInt(_)) return i = JSBI.__fromString(i), null !== i && JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i, _), t); ++ ++ if (i = JSBI.__toNumeric(i), _ = JSBI.__toNumeric(_), JSBI.__isBigInt(i)) { ++ if (JSBI.__isBigInt(_)) return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i, _), t); ++ if ("number" != typeof _) throw new Error("implementation bug"); ++ return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(i, _), t); ++ } ++ ++ if ("number" != typeof i) throw new Error("implementation bug"); ++ if (JSBI.__isBigInt(_)) return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(_, i), 2 ^ t); ++ if ("number" != typeof _) throw new Error("implementation bug"); ++ return 0 === t ? i < _ : 1 === t ? i <= _ : 2 === t ? i > _ : 3 === t ? i >= _ : void 0; ++ } ++ }, { ++ key: "__absoluteAdd", ++ value: function __absoluteAdd(_, t, e) { ++ if (_.length < t.length) return JSBI.__absoluteAdd(t, _, e); ++ if (0 === _.length) return _; ++ if (0 === t.length) return _.sign === e ? _ : JSBI.unaryMinus(_); ++ var n = _.length; ++ (0 === _.__clzmsd() || t.length === _.length && 0 === t.__clzmsd()) && n++; ++ var g = new JSBI(n, e); ++ var o = 0, ++ s = 0; ++ ++ for (; s < t.length; s++) { ++ var i = _.__digit(s) + t.__digit(s) + o; ++ o = i >>> 30, g.__setDigit(s, 1073741823 & i); ++ } ++ ++ for (; s < _.length; s++) { ++ var _i12 = _.__digit(s) + o; ++ ++ o = _i12 >>> 30, g.__setDigit(s, 1073741823 & _i12); ++ } ++ ++ return s < g.length && g.__setDigit(s, o), g.__trim(); ++ } ++ }, { ++ key: "__absoluteSub", ++ value: function __absoluteSub(_, t, e) { ++ if (0 === _.length) return _; ++ if (0 === t.length) return _.sign === e ? _ : JSBI.unaryMinus(_); ++ var n = new JSBI(_.length, e); ++ var g = 0, ++ o = 0; ++ ++ for (; o < t.length; o++) { ++ var i = _.__digit(o) - t.__digit(o) - g; ++ g = 1 & i >>> 30, n.__setDigit(o, 1073741823 & i); ++ } ++ ++ for (; o < _.length; o++) { ++ var _i13 = _.__digit(o) - g; ++ ++ g = 1 & _i13 >>> 30, n.__setDigit(o, 1073741823 & _i13); ++ } ++ ++ return n.__trim(); ++ } ++ }, { ++ key: "__absoluteAddOne", ++ value: function __absoluteAddOne(_, i) { ++ var t = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; ++ var e = _.length; ++ null === t ? t = new JSBI(e, i) : t.sign = i; ++ var n = 1; ++ ++ for (var g = 0; g < e; g++) { ++ var _i14 = _.__digit(g) + n; ++ ++ n = _i14 >>> 30, t.__setDigit(g, 1073741823 & _i14); ++ } ++ ++ return 0 != n && t.__setDigitGrow(e, 1), t; ++ } ++ }, { ++ key: "__absoluteSubOne", ++ value: function __absoluteSubOne(_, t) { ++ var e = _.length; ++ t = t || e; ++ var n = new JSBI(t, !1); ++ var g = 1; ++ ++ for (var o = 0; o < e; o++) { ++ var i = _.__digit(o) - g; ++ g = 1 & i >>> 30, n.__setDigit(o, 1073741823 & i); ++ } ++ ++ if (0 != g) throw new Error("implementation bug"); ++ ++ for (var _g2 = e; _g2 < t; _g2++) { ++ n.__setDigit(_g2, 0); ++ } ++ ++ return n; ++ } ++ }, { ++ key: "__absoluteAnd", ++ value: function __absoluteAnd(_, t) { ++ var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; ++ var n = _.length, ++ g = t.length, ++ o = g; ++ ++ if (n < g) { ++ o = n; ++ var i = _, ++ _e10 = n; ++ _ = t, n = g, t = i, g = _e10; ++ } ++ ++ var s = o; ++ null === e ? e = new JSBI(s, !1) : s = e.length; ++ var l = 0; ++ ++ for (; l < o; l++) { ++ e.__setDigit(l, _.__digit(l) & t.__digit(l)); ++ } ++ ++ for (; l < s; l++) { ++ e.__setDigit(l, 0); ++ } ++ ++ return e; ++ } ++ }, { ++ key: "__absoluteAndNot", ++ value: function __absoluteAndNot(_, t) { ++ var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; ++ var n = _.length, ++ g = t.length; ++ var o = g; ++ n < g && (o = n); ++ var s = n; ++ null === e ? e = new JSBI(s, !1) : s = e.length; ++ var l = 0; ++ ++ for (; l < o; l++) { ++ e.__setDigit(l, _.__digit(l) & ~t.__digit(l)); ++ } ++ ++ for (; l < n; l++) { ++ e.__setDigit(l, _.__digit(l)); ++ } ++ ++ for (; l < s; l++) { ++ e.__setDigit(l, 0); ++ } ++ ++ return e; ++ } ++ }, { ++ key: "__absoluteOr", ++ value: function __absoluteOr(_, t) { ++ var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; ++ var n = _.length, ++ g = t.length, ++ o = g; ++ ++ if (n < g) { ++ o = n; ++ var i = _, ++ _e11 = n; ++ _ = t, n = g, t = i, g = _e11; ++ } ++ ++ var s = n; ++ null === e ? e = new JSBI(s, !1) : s = e.length; ++ var l = 0; ++ ++ for (; l < o; l++) { ++ e.__setDigit(l, _.__digit(l) | t.__digit(l)); ++ } ++ ++ for (; l < n; l++) { ++ e.__setDigit(l, _.__digit(l)); ++ } ++ ++ for (; l < s; l++) { ++ e.__setDigit(l, 0); ++ } ++ ++ return e; ++ } ++ }, { ++ key: "__absoluteXor", ++ value: function __absoluteXor(_, t) { ++ var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; ++ var n = _.length, ++ g = t.length, ++ o = g; ++ ++ if (n < g) { ++ o = n; ++ var i = _, ++ _e12 = n; ++ _ = t, n = g, t = i, g = _e12; ++ } ++ ++ var s = n; ++ null === e ? e = new JSBI(s, !1) : s = e.length; ++ var l = 0; ++ ++ for (; l < o; l++) { ++ e.__setDigit(l, _.__digit(l) ^ t.__digit(l)); ++ } ++ ++ for (; l < n; l++) { ++ e.__setDigit(l, _.__digit(l)); ++ } ++ ++ for (; l < s; l++) { ++ e.__setDigit(l, 0); ++ } ++ ++ return e; ++ } ++ }, { ++ key: "__absoluteCompare", ++ value: function __absoluteCompare(_, t) { ++ var e = _.length - t.length; ++ if (0 != e) return e; ++ var n = _.length - 1; ++ ++ for (; 0 <= n && _.__digit(n) === t.__digit(n);) { ++ n--; ++ } ++ ++ return 0 > n ? 0 : _.__unsignedDigit(n) > t.__unsignedDigit(n) ? 1 : -1; ++ } ++ }, { ++ key: "__multiplyAccumulate", ++ value: function __multiplyAccumulate(_, t, e, n) { ++ if (0 === t) return; ++ var g = 32767 & t, ++ o = t >>> 15; ++ var s = 0, ++ l = 0; ++ ++ for (var r, a = 0; a < _.length; a++, n++) { ++ r = e.__digit(n); ++ ++ var i = _.__digit(a), ++ _t8 = 32767 & i, ++ u = i >>> 15, ++ d = JSBI.__imul(_t8, g), ++ h = JSBI.__imul(_t8, o), ++ m = JSBI.__imul(u, g), ++ b = JSBI.__imul(u, o); ++ ++ r += l + d + s, s = r >>> 30, r &= 1073741823, r += ((32767 & h) << 15) + ((32767 & m) << 15), s += r >>> 30, l = b + (h >>> 15) + (m >>> 15), e.__setDigit(n, 1073741823 & r); ++ } ++ ++ for (; 0 != s || 0 !== l; n++) { ++ var _i15 = e.__digit(n); ++ ++ _i15 += s + l, l = 0, s = _i15 >>> 30, e.__setDigit(n, 1073741823 & _i15); ++ } ++ } ++ }, { ++ key: "__internalMultiplyAdd", ++ value: function __internalMultiplyAdd(_, t, e, g, o) { ++ var s = e, ++ l = 0; ++ ++ for (var n = 0; n < g; n++) { ++ var i = _.__digit(n), ++ _e13 = JSBI.__imul(32767 & i, t), ++ _g3 = JSBI.__imul(i >>> 15, t), ++ a = _e13 + ((32767 & _g3) << 15) + l + s; ++ ++ s = a >>> 30, l = _g3 >>> 15, o.__setDigit(n, 1073741823 & a); ++ } ++ ++ if (o.length > g) for (o.__setDigit(g++, s + l); g < o.length;) { ++ o.__setDigit(g++, 0); ++ } else if (0 !== s + l) throw new Error("implementation bug"); ++ } ++ }, { ++ key: "__absoluteDivSmall", ++ value: function __absoluteDivSmall(_, t) { ++ var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; ++ null === e && (e = new JSBI(_.length, !1)); ++ var n = 0; ++ ++ for (var g, o = 2 * _.length - 1; 0 <= o; o -= 2) { ++ g = (n << 15 | _.__halfDigit(o)) >>> 0; ++ var i = 0 | g / t; ++ n = 0 | g % t, g = (n << 15 | _.__halfDigit(o - 1)) >>> 0; ++ var s = 0 | g / t; ++ n = 0 | g % t, e.__setDigit(o >>> 1, i << 15 | s); ++ } ++ ++ return e; ++ } ++ }, { ++ key: "__absoluteModSmall", ++ value: function __absoluteModSmall(_, t) { ++ var e = 0; ++ ++ for (var n = 2 * _.length - 1; 0 <= n; n--) { ++ var i = (e << 15 | _.__halfDigit(n)) >>> 0; ++ e = 0 | i % t; ++ } ++ ++ return e; ++ } ++ }, { ++ key: "__absoluteDivLarge", ++ value: function __absoluteDivLarge(i, _, t, e) { ++ var g = _.__halfDigitLength(), ++ n = _.length, ++ o = i.__halfDigitLength() - g; ++ ++ var s = null; ++ t && (s = new JSBI(o + 2 >>> 1, !1), s.__initializeDigits()); ++ var l = new JSBI(g + 2 >>> 1, !1); ++ ++ l.__initializeDigits(); ++ ++ var r = JSBI.__clz15(_.__halfDigit(g - 1)); ++ ++ 0 < r && (_ = JSBI.__specialLeftShift(_, r, 0)); ++ ++ var a = JSBI.__specialLeftShift(i, r, 1), ++ u = _.__halfDigit(g - 1); ++ ++ var d = 0; ++ ++ for (var _r3, h = o; 0 <= h; h--) { ++ _r3 = 32767; ++ ++ var _i16 = a.__halfDigit(h + g); ++ ++ if (_i16 !== u) { ++ var _t9 = (_i16 << 15 | a.__halfDigit(h + g - 1)) >>> 0; ++ ++ _r3 = 0 | _t9 / u; ++ ++ var _e15 = 0 | _t9 % u; ++ ++ var _n4 = _.__halfDigit(g - 2), ++ _o6 = a.__halfDigit(h + g - 2); ++ ++ for (; JSBI.__imul(_r3, _n4) >>> 0 > (_e15 << 16 | _o6) >>> 0 && (_r3--, _e15 += u, !(32767 < _e15));) { ++ } ++ } ++ ++ JSBI.__internalMultiplyAdd(_, _r3, 0, n, l); ++ ++ var _e14 = a.__inplaceSub(l, h, g + 1); ++ ++ 0 !== _e14 && (_e14 = a.__inplaceAdd(_, h, g), a.__setHalfDigit(h + g, 32767 & a.__halfDigit(h + g) + _e14), _r3--), t && (1 & h ? d = _r3 << 15 : s.__setDigit(h >>> 1, d | _r3)); ++ } ++ ++ if (e) return a.__inplaceRightShift(r), t ? { ++ quotient: s, ++ remainder: a ++ } : a; ++ if (t) return s; ++ throw new Error("unreachable"); ++ } ++ }, { ++ key: "__clz15", ++ value: function __clz15(i) { ++ return JSBI.__clz30(i) - 15; ++ } ++ }, { ++ key: "__specialLeftShift", ++ value: function __specialLeftShift(_, t, e) { ++ var g = _.length, ++ n = new JSBI(g + e, !1); ++ ++ if (0 === t) { ++ for (var _t10 = 0; _t10 < g; _t10++) { ++ n.__setDigit(_t10, _.__digit(_t10)); ++ } ++ ++ return 0 < e && n.__setDigit(g, 0), n; ++ } ++ ++ var o = 0; ++ ++ for (var s = 0; s < g; s++) { ++ var i = _.__digit(s); ++ ++ n.__setDigit(s, 1073741823 & i << t | o), o = i >>> 30 - t; ++ } ++ ++ return 0 < e && n.__setDigit(g, o), n; ++ } ++ }, { ++ key: "__leftShiftByAbsolute", ++ value: function __leftShiftByAbsolute(_, i) { ++ var t = JSBI.__toShiftAmount(i); ++ ++ if (0 > t) throw new RangeError("BigInt too big"); ++ var e = 0 | t / 30, ++ n = t % 30, ++ g = _.length, ++ o = 0 !== n && 0 != _.__digit(g - 1) >>> 30 - n, ++ s = g + e + (o ? 1 : 0), ++ l = new JSBI(s, _.sign); ++ ++ if (0 === n) { ++ var _t11 = 0; ++ ++ for (; _t11 < e; _t11++) { ++ l.__setDigit(_t11, 0); ++ } ++ ++ for (; _t11 < s; _t11++) { ++ l.__setDigit(_t11, _.__digit(_t11 - e)); ++ } ++ } else { ++ var _t12 = 0; ++ ++ for (var _12 = 0; _12 < e; _12++) { ++ l.__setDigit(_12, 0); ++ } ++ ++ for (var _o7 = 0; _o7 < g; _o7++) { ++ var _i17 = _.__digit(_o7); ++ ++ l.__setDigit(_o7 + e, 1073741823 & _i17 << n | _t12), _t12 = _i17 >>> 30 - n; ++ } ++ ++ if (o) l.__setDigit(g + e, _t12);else if (0 !== _t12) throw new Error("implementation bug"); ++ } ++ ++ return l.__trim(); ++ } ++ }, { ++ key: "__rightShiftByAbsolute", ++ value: function __rightShiftByAbsolute(_, i) { ++ var t = _.length, ++ e = _.sign, ++ n = JSBI.__toShiftAmount(i); ++ ++ if (0 > n) return JSBI.__rightShiftByMaximum(e); ++ var g = 0 | n / 30, ++ o = n % 30; ++ var s = t - g; ++ if (0 >= s) return JSBI.__rightShiftByMaximum(e); ++ var l = !1; ++ ++ if (e) { ++ if (0 != (_.__digit(g) & (1 << o) - 1)) l = !0;else for (var _t13 = 0; _t13 < g; _t13++) { ++ if (0 !== _.__digit(_t13)) { ++ l = !0; ++ break; ++ } ++ } ++ } ++ ++ if (l && 0 === o) { ++ var _i18 = _.__digit(t - 1); ++ ++ 0 == ~_i18 && s++; ++ } ++ ++ var r = new JSBI(s, e); ++ ++ if (0 === o) { ++ r.__setDigit(s - 1, 0); ++ ++ for (var _e16 = g; _e16 < t; _e16++) { ++ r.__setDigit(_e16 - g, _.__digit(_e16)); ++ } ++ } else { ++ var _e17 = _.__digit(g) >>> o; ++ ++ var _n5 = t - g - 1; ++ ++ for (var _t14 = 0; _t14 < _n5; _t14++) { ++ var _i19 = _.__digit(_t14 + g + 1); ++ ++ r.__setDigit(_t14, 1073741823 & _i19 << 30 - o | _e17), _e17 = _i19 >>> o; ++ } ++ ++ r.__setDigit(_n5, _e17); ++ } ++ ++ return l && (r = JSBI.__absoluteAddOne(r, !0, r)), r.__trim(); ++ } ++ }, { ++ key: "__rightShiftByMaximum", ++ value: function __rightShiftByMaximum(i) { ++ return i ? JSBI.__oneDigit(1, !0) : JSBI.__zero(); ++ } ++ }, { ++ key: "__toShiftAmount", ++ value: function __toShiftAmount(i) { ++ if (1 < i.length) return -1; ++ ++ var _ = i.__unsignedDigit(0); ++ ++ return _ > JSBI.__kMaxLengthBits ? -1 : _; ++ } ++ }, { ++ key: "__toPrimitive", ++ value: function __toPrimitive(i) { ++ var _ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "default"; ++ ++ if ("object" != _typeof(i)) return i; ++ if (i.constructor === JSBI) return i; ++ ++ if ("undefined" != typeof Symbol && "symbol" == _typeof(Symbol.toPrimitive)) { ++ var _t15 = i[Symbol.toPrimitive]; ++ ++ if (_t15) { ++ var _i20 = _t15(_); ++ ++ if ("object" != _typeof(_i20)) return _i20; ++ throw new TypeError("Cannot convert object to primitive value"); ++ } ++ } ++ ++ var t = i.valueOf; ++ ++ if (t) { ++ var _13 = t.call(i); ++ ++ if ("object" != _typeof(_13)) return _13; ++ } ++ ++ var e = i.toString; ++ ++ if (e) { ++ var _14 = e.call(i); ++ ++ if ("object" != _typeof(_14)) return _14; ++ } ++ ++ throw new TypeError("Cannot convert object to primitive value"); ++ } ++ }, { ++ key: "__toNumeric", ++ value: function __toNumeric(i) { ++ return JSBI.__isBigInt(i) ? i : +i; ++ } ++ }, { ++ key: "__isBigInt", ++ value: function __isBigInt(i) { ++ return "object" == _typeof(i) && null !== i && i.constructor === JSBI; ++ } ++ }, { ++ key: "__truncateToNBits", ++ value: function __truncateToNBits(i, _) { ++ var t = 0 | (i + 29) / 30, ++ e = new JSBI(t, _.sign), ++ n = t - 1; ++ ++ for (var _t16 = 0; _t16 < n; _t16++) { ++ e.__setDigit(_t16, _.__digit(_t16)); ++ } ++ ++ var g = _.__digit(n); ++ ++ if (0 != i % 30) { ++ var _15 = 32 - i % 30; ++ ++ g = g << _15 >>> _15; ++ } ++ ++ return e.__setDigit(n, g), e.__trim(); ++ } ++ }, { ++ key: "__truncateAndSubFromPowerOfTwo", ++ value: function __truncateAndSubFromPowerOfTwo(_, t, e) { ++ var n = Math.min; ++ var g = 0 | (_ + 29) / 30, ++ o = new JSBI(g, e); ++ var s = 0; ++ var l = g - 1; ++ var a = 0; ++ ++ for (var i = n(l, t.length); s < i; s++) { ++ var _i21 = 0 - t.__digit(s) - a; ++ ++ a = 1 & _i21 >>> 30, o.__setDigit(s, 1073741823 & _i21); ++ } ++ ++ for (; s < l; s++) { ++ o.__setDigit(s, 0 | 1073741823 & -a); ++ } ++ ++ var u = l < t.length ? t.__digit(l) : 0; ++ var d = _ % 30; ++ var h; ++ if (0 == d) h = 0 - u - a, h &= 1073741823;else { ++ var _i22 = 32 - d; ++ ++ u = u << _i22 >>> _i22; ++ ++ var _16 = 1 << 32 - _i22; ++ ++ h = _16 - u - a, h &= _16 - 1; ++ } ++ return o.__setDigit(l, h), o.__trim(); ++ } ++ }, { ++ key: "__digitPow", ++ value: function __digitPow(i, _) { ++ var t = 1; ++ ++ for (; 0 < _;) { ++ 1 & _ && (t *= i), _ >>>= 1, i *= i; ++ } ++ ++ return t; ++ } ++ }, { ++ key: "__isOneDigitInt", ++ value: function __isOneDigitInt(i) { ++ return (1073741823 & i) === i; ++ } ++ }]); ++ ++ return JSBI; ++ }( /*#__PURE__*/_wrapNativeSuper(Array)); ++ ++ JSBI.__kMaxLength = 33554432, JSBI.__kMaxLengthBits = JSBI.__kMaxLength << 5, JSBI.__kMaxBitsPerChar = [0, 0, 32, 51, 64, 75, 83, 90, 96, 102, 107, 111, 115, 119, 122, 126, 128, 131, 134, 136, 139, 141, 143, 145, 147, 149, 151, 153, 154, 156, 158, 159, 160, 162, 163, 165, 166], JSBI.__kBitsPerCharTableShift = 5, JSBI.__kBitsPerCharTableMultiplier = 1 << JSBI.__kBitsPerCharTableShift, JSBI.__kConversionChars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], JSBI.__kBitConversionBuffer = new ArrayBuffer(8), JSBI.__kBitConversionDouble = new Float64Array(JSBI.__kBitConversionBuffer), JSBI.__kBitConversionInts = new Int32Array(JSBI.__kBitConversionBuffer), JSBI.__clz30 = Math.clz32 ? function (i) { ++ return Math.clz32(i) - 2; ++ } : function (i) { ++ return 0 === i ? 30 : 0 | 29 - (0 | Math.log(i >>> 0) / Math.LN2); ++ }, JSBI.__imul = Math.imul || function (i, _) { ++ return 0 | i * _; ++ }; ++ ++ var INTRINSICS = {}; ++ ++ var customUtilInspectFormatters = _defineProperty({}, 'Temporal.Duration', function TemporalDuration(depth, options) { ++ var descr = options.stylize("".concat(this[Symbol.toStringTag], " <").concat(this, ">"), 'special'); ++ if (depth < 1) return descr; ++ var entries = []; ++ ++ for (var _i = 0, _arr = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds', 'nanoseconds']; _i < _arr.length; _i++) { ++ var prop = _arr[_i]; ++ if (this[prop] !== 0) entries.push(" ".concat(prop, ": ").concat(options.stylize(this[prop], 'number'))); ++ } ++ ++ return descr + ' {\n' + entries.join(',\n') + '\n}'; ++ }); ++ ++ function defaultUtilInspectFormatter(depth, options) { ++ return options.stylize("".concat(this[Symbol.toStringTag], " <").concat(this, ">"), 'special'); ++ } ++ ++ function MakeIntrinsicClass(Class, name) { ++ Object.defineProperty(Class.prototype, Symbol.toStringTag, { ++ value: name, ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ ++ { ++ Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), { ++ value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter, ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ } ++ ++ var _iterator = _createForOfIteratorHelper(Object.getOwnPropertyNames(Class)), ++ _step; ++ ++ try { ++ for (_iterator.s(); !(_step = _iterator.n()).done;) { ++ var prop = _step.value; ++ // we know that `prop` is present, so the descriptor is never undefined ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ var desc = Object.getOwnPropertyDescriptor(Class, prop); ++ if (!desc.configurable || !desc.enumerable) continue; ++ desc.enumerable = false; ++ Object.defineProperty(Class, prop, desc); ++ } ++ } catch (err) { ++ _iterator.e(err); ++ } finally { ++ _iterator.f(); ++ } ++ ++ var _iterator2 = _createForOfIteratorHelper(Object.getOwnPropertyNames(Class.prototype)), ++ _step2; ++ ++ try { ++ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { ++ var _prop = _step2.value; ++ ++ // we know that `prop` is present, so the descriptor is never undefined ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ var _desc = Object.getOwnPropertyDescriptor(Class.prototype, _prop); ++ ++ if (!_desc.configurable || !_desc.enumerable) continue; ++ _desc.enumerable = false; ++ Object.defineProperty(Class.prototype, _prop, _desc); ++ } ++ } catch (err) { ++ _iterator2.e(err); ++ } finally { ++ _iterator2.f(); ++ } ++ ++ DefineIntrinsic(name, Class); ++ DefineIntrinsic("".concat(name, ".prototype"), Class.prototype); ++ } ++ function DefineIntrinsic(name, value) { ++ var key = "%".concat(name, "%"); ++ if (INTRINSICS[key] !== undefined) throw new Error("intrinsic ".concat(name, " already exists")); ++ INTRINSICS[key] = value; ++ } ++ function GetIntrinsic(intrinsic) { ++ return INTRINSICS[intrinsic]; ++ } ++ ++ // Instant ++ var EPOCHNANOSECONDS = 'slot-epochNanoSeconds'; // TimeZone ++ ++ var TIMEZONE_ID = 'slot-timezone-identifier'; // DateTime, Date, Time, YearMonth, MonthDay ++ ++ var ISO_YEAR = 'slot-year'; ++ var ISO_MONTH = 'slot-month'; ++ var ISO_DAY = 'slot-day'; ++ var ISO_HOUR = 'slot-hour'; ++ var ISO_MINUTE = 'slot-minute'; ++ var ISO_SECOND = 'slot-second'; ++ var ISO_MILLISECOND = 'slot-millisecond'; ++ var ISO_MICROSECOND = 'slot-microsecond'; ++ var ISO_NANOSECOND = 'slot-nanosecond'; ++ var CALENDAR = 'slot-calendar'; // Date, YearMonth, and MonthDay all have the same slots, disambiguation needed: ++ ++ var DATE_BRAND = 'slot-date-brand'; ++ var YEAR_MONTH_BRAND = 'slot-year-month-brand'; ++ var MONTH_DAY_BRAND = 'slot-month-day-brand'; // ZonedDateTime ++ ++ var INSTANT = 'slot-cached-instant'; ++ var TIME_ZONE = 'slot-time-zone'; // Duration ++ ++ var YEARS = 'slot-years'; ++ var MONTHS = 'slot-months'; ++ var WEEKS = 'slot-weeks'; ++ var DAYS = 'slot-days'; ++ var HOURS = 'slot-hours'; ++ var MINUTES = 'slot-minutes'; ++ var SECONDS = 'slot-seconds'; ++ var MILLISECONDS = 'slot-milliseconds'; ++ var MICROSECONDS = 'slot-microseconds'; ++ var NANOSECONDS = 'slot-nanoseconds'; // Calendar ++ ++ var CALENDAR_ID = 'slot-calendar-identifier'; ++ var slots = new WeakMap(); ++ function CreateSlots(container) { ++ slots.set(container, Object.create(null)); ++ } ++ ++ function GetSlots(container) { ++ return slots.get(container); ++ } ++ ++ function HasSlot(container) { ++ if (!container || 'object' !== _typeof(container)) return false; ++ var myslots = GetSlots(container); ++ ++ for (var _len = arguments.length, ids = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { ++ ids[_key - 1] = arguments[_key]; ++ } ++ ++ return !!myslots && ids.reduce(function (all, id) { ++ return all && id in myslots; ++ }, true); ++ } ++ function GetSlot(container, id) { ++ var value = GetSlots(container)[id]; ++ if (value === undefined) throw new TypeError("Missing internal slot ".concat(id)); ++ return value; ++ } ++ function SetSlot(container, id, value) { ++ GetSlots(container)[id] = value; ++ } ++ ++ var tzComponent = /\.[-A-Za-z_]|\.\.[-A-Za-z._]{1,12}|\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/; ++ var offsetNoCapture = /(?:[+\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\d{1,9})?)?)?)/; ++ var timeZoneID = new RegExp("(?:(?:".concat(tzComponent.source, ")(?:\\/(?:").concat(tzComponent.source, "))*|Etc/GMT[-+]\\d{1,2}|").concat(offsetNoCapture.source, ")")); ++ var calComponent = /[A-Za-z0-9]{3,8}/; ++ var calendarID = new RegExp("(?:".concat(calComponent.source, "(?:-").concat(calComponent.source, ")*)")); ++ var yearpart = /(?:[+\u2212-]\d{6}|\d{4})/; ++ var monthpart = /(?:0[1-9]|1[0-2])/; ++ var daypart = /(?:0[1-9]|[12]\d|3[01])/; ++ var datesplit = new RegExp("(".concat(yearpart.source, ")(?:-(").concat(monthpart.source, ")-(").concat(daypart.source, ")|(").concat(monthpart.source, ")(").concat(daypart.source, "))")); ++ var timesplit = /(\d{2})(?::(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?|(\d{2})(?:(\d{2})(?:[.,](\d{1,9}))?)?)?/; ++ var offset = /([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?/; ++ var zonesplit = new RegExp("(?:([zZ])|(?:".concat(offset.source, ")?)(?:\\[(").concat(timeZoneID.source, ")\\])?")); ++ var calendar = new RegExp("\\[u-ca=(".concat(calendarID.source, ")\\]")); ++ var zoneddatetime = new RegExp("^".concat(datesplit.source, "(?:(?:T|\\s+)").concat(timesplit.source, ")?").concat(zonesplit.source, "(?:").concat(calendar.source, ")?$"), 'i'); ++ var time = new RegExp("^T?".concat(timesplit.source, "(?:").concat(zonesplit.source, ")?(?:").concat(calendar.source, ")?$"), 'i'); // The short forms of YearMonth and MonthDay are only for the ISO calendar. ++ // Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate, ++ // with the reference fields. ++ // YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by ++ // RFC 3339 and we don't allow 2-digit years, so we allow it. ++ // Not ambiguous with HHMMSS because that requires a 'T' prefix ++ ++ var yearmonth = new RegExp("^(".concat(yearpart.source, ")-?(").concat(monthpart.source, ")$")); ++ var monthday = new RegExp("^(?:--)?(".concat(monthpart.source, ")-?(").concat(daypart.source, ")$")); ++ var fraction = /(\d+)(?:[.,](\d{1,9}))?/; ++ var durationDate = /(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)W)?(?:(\d+)D)?/; ++ var durationTime = new RegExp("(?:".concat(fraction.source, "H)?(?:").concat(fraction.source, "M)?(?:").concat(fraction.source, "S)?")); ++ var duration = new RegExp("^([+\u2212-])?P".concat(durationDate.source, "(?:T(?!$)").concat(durationTime.source, ")?$"), 'i'); ++ ++ var ArrayIncludes$1 = Array.prototype.includes; ++ var ArrayPrototypePush$1 = Array.prototype.push; ++ var IntlDateTimeFormat$2 = globalThis.Intl.DateTimeFormat; ++ var MathMin = Math.min; ++ var MathMax = Math.max; ++ var MathAbs$1 = Math.abs; ++ var MathFloor$1 = Math.floor; ++ var MathSign = Math.sign; ++ var MathTrunc = Math.trunc; ++ var NumberIsNaN = Number.isNaN; ++ var NumberIsFinite = Number.isFinite; ++ var NumberCtor = Number; ++ var StringCtor = String; ++ var NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER; ++ var ObjectAssign$2 = Object.assign; ++ var ObjectCreate$2 = Object.create; ++ var ObjectDefineProperty = Object.defineProperty; ++ var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; ++ var ObjectIs = Object.is; ++ var ReflectApply$1 = Reflect.apply; ++ var ZERO = JSBI.BigInt(0); ++ var ONE = JSBI.BigInt(1); ++ var SIXTY = JSBI.BigInt(60); ++ var THOUSAND = JSBI.BigInt(1e3); ++ var MILLION = JSBI.BigInt(1e6); ++ var BILLION = JSBI.BigInt(1e9); ++ var NEGATIVE_ONE = JSBI.BigInt(-1); ++ var DAY_SECONDS = 86400; ++ var DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION); ++ var NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17)); ++ var NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17)); ++ var YEAR_MIN = -271821; ++ var YEAR_MAX = 275760; ++ var BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z ++ ++ var ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10)); ++ var ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1)); ++ var TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7)); ++ var BUILTIN_CALENDAR_IDS = ['iso8601', 'hebrew', 'islamic', 'islamic-umalqura', 'islamic-tbla', 'islamic-civil', 'islamic-rgsa', 'islamicc', 'persian', 'ethiopic', 'ethioaa', 'coptic', 'chinese', 'dangi', 'roc', 'indian', 'buddhist', 'japanese', 'gregory']; ++ ++ function IsInteger(value) { ++ if (typeof value !== 'number' || !NumberIsFinite(value)) return false; ++ var abs = MathAbs$1(value); ++ return MathFloor$1(abs) === abs; ++ } ++ ++ function IsObject(value) { ++ return _typeof(value) === 'object' && value !== null || typeof value === 'function'; ++ } ++ function ToNumber(value) { ++ if (typeof value === 'bigint') throw new TypeError('Cannot convert BigInt to number'); ++ return NumberCtor(value); ++ } ++ ++ function ToInteger(value) { ++ var num = ToNumber(value); ++ if (NumberIsNaN(num)) return 0; ++ var integer = MathTrunc(num); ++ if (num === 0) return 0; ++ return integer; ++ } ++ ++ function ToString(value) { ++ if (_typeof(value) === 'symbol') { ++ throw new TypeError('Cannot convert a Symbol value to a String'); ++ } ++ ++ return StringCtor(value); ++ } ++ function ToIntegerThrowOnInfinity(value) { ++ var integer = ToInteger(value); ++ ++ if (!NumberIsFinite(integer)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ ++ return integer; ++ } ++ ++ function ToPositiveInteger(valueParam, property) { ++ var value = ToInteger(valueParam); ++ ++ if (!NumberIsFinite(value)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ ++ if (value < 1) { ++ if (property !== undefined) { ++ throw new RangeError("property '".concat(property, "' cannot be a a number less than one")); ++ } ++ ++ throw new RangeError('Cannot convert a number less than one to a positive integer'); ++ } ++ ++ return value; ++ } ++ ++ function ToIntegerWithoutRounding(valueParam) { ++ var value = ToNumber(valueParam); ++ if (NumberIsNaN(value)) return 0; ++ ++ if (!NumberIsFinite(value)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ ++ if (!IsInteger(value)) { ++ throw new RangeError("unsupported fractional value ".concat(value)); ++ } ++ ++ return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0 ++ } ++ ++ function divmod(x, y) { ++ var quotient = JSBI.divide(x, y); ++ var remainder = JSBI.remainder(x, y); ++ return { ++ quotient: quotient, ++ remainder: remainder ++ }; ++ } ++ ++ function abs(x) { ++ if (JSBI.lessThan(x, ZERO)) return JSBI.multiply(x, NEGATIVE_ONE); ++ return x; ++ } ++ ++ function ArrayPush(arr) { ++ for (var _len = arguments.length, newItem = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { ++ newItem[_key - 1] = arguments[_key]; ++ } ++ ++ ArrayPrototypePush$1.apply(arr, newItem); ++ return arr; ++ } ++ var BUILTIN_CASTS = new Map([['year', ToIntegerThrowOnInfinity], ['month', ToPositiveInteger], ['monthCode', ToString], ['day', ToPositiveInteger], ['hour', ToIntegerThrowOnInfinity], ['minute', ToIntegerThrowOnInfinity], ['second', ToIntegerThrowOnInfinity], ['millisecond', ToIntegerThrowOnInfinity], ['microsecond', ToIntegerThrowOnInfinity], ['nanosecond', ToIntegerThrowOnInfinity], ['years', ToIntegerWithoutRounding], ['months', ToIntegerWithoutRounding], ['weeks', ToIntegerWithoutRounding], ['days', ToIntegerWithoutRounding], ['hours', ToIntegerWithoutRounding], ['minutes', ToIntegerWithoutRounding], ['seconds', ToIntegerWithoutRounding], ['milliseconds', ToIntegerWithoutRounding], ['microseconds', ToIntegerWithoutRounding], ['nanoseconds', ToIntegerWithoutRounding], ['era', ToString], ['eraYear', ToInteger], ['offset', ToString]]); ++ var BUILTIN_DEFAULTS = new Map([['hour', 0], ['minute', 0], ['second', 0], ['millisecond', 0], ['microsecond', 0], ['nanosecond', 0]]); // each item is [plural, singular, category] ++ ++ var SINGULAR_PLURAL_UNITS = [['years', 'year', 'date'], ['months', 'month', 'date'], ['weeks', 'week', 'date'], ['days', 'day', 'date'], ['hours', 'hour', 'time'], ['minutes', 'minute', 'time'], ['seconds', 'second', 'time'], ['milliseconds', 'millisecond', 'time'], ['microseconds', 'microsecond', 'time'], ['nanoseconds', 'nanosecond', 'time']]; ++ var SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map(function (e) { ++ return [e[0], e[1]]; ++ })); ++ var PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(function (_ref) { ++ var _ref2 = _slicedToArray(_ref, 2), ++ p = _ref2[0], ++ s = _ref2[1]; ++ ++ return [s, p]; ++ })); ++ var UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(function (_ref3) { ++ var _ref4 = _slicedToArray(_ref3, 2), ++ s = _ref4[1]; ++ ++ return s; ++ }); ++ var DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort(); ++ var IntlDateTimeFormatEnUsCache = new Map(); ++ ++ function getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) { ++ var instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier); ++ ++ if (instance === undefined) { ++ instance = new IntlDateTimeFormat$2('en-us', { ++ timeZone: StringCtor(timeZoneIdentifier), ++ hour12: false, ++ era: 'short', ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance); ++ } ++ ++ return instance; ++ } ++ ++ function IsTemporalInstant(item) { ++ return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR); ++ } ++ function IsTemporalTimeZone(item) { ++ return HasSlot(item, TIMEZONE_ID); ++ } ++ function IsTemporalCalendar(item) { ++ return HasSlot(item, CALENDAR_ID); ++ } ++ function IsTemporalDuration(item) { ++ return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS); ++ } ++ function IsTemporalDate(item) { ++ return HasSlot(item, DATE_BRAND); ++ } ++ function IsTemporalTime(item) { ++ return HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) && !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY); ++ } ++ function IsTemporalDateTime(item) { ++ return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND); ++ } ++ function IsTemporalYearMonth(item) { ++ return HasSlot(item, YEAR_MONTH_BRAND); ++ } ++ function IsTemporalMonthDay(item) { ++ return HasSlot(item, MONTH_DAY_BRAND); ++ } ++ function IsTemporalZonedDateTime(item) { ++ return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR); ++ } ++ function RejectObjectWithCalendarOrTimeZone(item) { ++ if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) { ++ throw new TypeError('with() does not support a calendar or timeZone property'); ++ } ++ ++ if (item.calendar !== undefined) { ++ throw new TypeError('with() does not support a calendar property'); ++ } ++ ++ if (item.timeZone !== undefined) { ++ throw new TypeError('with() does not support a timeZone property'); ++ } ++ } ++ ++ function ParseTemporalTimeZone(stringIdent) { ++ var _ParseTemporalTimeZon = ParseTemporalTimeZoneString(stringIdent), ++ ianaName = _ParseTemporalTimeZon.ianaName, ++ offset = _ParseTemporalTimeZon.offset, ++ z = _ParseTemporalTimeZon.z; ++ ++ if (ianaName) return ianaName; ++ if (z) return 'UTC'; ++ return offset; // if !ianaName && !z then offset must be present ++ } ++ ++ function FormatCalendarAnnotation(id, showCalendar) { ++ if (showCalendar === 'never') return ''; ++ if (showCalendar === 'auto' && id === 'iso8601') return ''; ++ return "[u-ca=".concat(id, "]"); ++ } ++ ++ function ParseISODateTime(isoString) { ++ // ZDT is the superset of fields for every other Temporal type ++ var match = zoneddatetime.exec(isoString); ++ if (!match) throw new RangeError("invalid ISO 8601 string: ".concat(isoString)); ++ var yearString = match[1]; ++ if (yearString[0] === "\u2212") yearString = "-".concat(yearString.slice(1)); ++ if (yearString === '-000000') throw new RangeError("invalid ISO 8601 string: ".concat(isoString)); ++ var year = ToInteger(yearString); ++ var month = ToInteger(match[2] || match[4]); ++ var day = ToInteger(match[3] || match[5]); ++ var hour = ToInteger(match[6]); ++ var hasTime = match[6] !== undefined; ++ var minute = ToInteger(match[7] || match[10]); ++ var second = ToInteger(match[8] || match[11]); ++ if (second === 60) second = 59; ++ var fraction = (match[9] || match[12]) + '000000000'; ++ var millisecond = ToInteger(fraction.slice(0, 3)); ++ var microsecond = ToInteger(fraction.slice(3, 6)); ++ var nanosecond = ToInteger(fraction.slice(6, 9)); ++ var offset; ++ var z = false; ++ ++ if (match[13]) { ++ offset = undefined; ++ z = true; ++ } else if (match[14] && match[15]) { ++ var offsetSign = match[14] === '-' || match[14] === "\u2212" ? '-' : '+'; ++ var offsetHours = match[15] || '00'; ++ var offsetMinutes = match[16] || '00'; ++ var offsetSeconds = match[17] || '00'; ++ var offsetFraction = match[18] || '0'; ++ offset = "".concat(offsetSign).concat(offsetHours, ":").concat(offsetMinutes); ++ ++ if (+offsetFraction) { ++ while (offsetFraction.endsWith('0')) { ++ offsetFraction = offsetFraction.slice(0, -1); ++ } ++ ++ offset += ":".concat(offsetSeconds, ".").concat(offsetFraction); ++ } else if (+offsetSeconds) { ++ offset += ":".concat(offsetSeconds); ++ } ++ ++ if (offset === '-00:00') offset = '+00:00'; ++ } ++ ++ var ianaName = match[19]; ++ ++ if (ianaName) { ++ try { ++ // Canonicalize name if it is an IANA link name or is capitalized wrong ++ ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString(); ++ } catch (_unused) {// Not an IANA name, may be a custom ID, pass through unchanged ++ } ++ } ++ ++ var calendar = match[20]; ++ RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ return { ++ year: year, ++ month: month, ++ day: day, ++ hasTime: hasTime, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond, ++ ianaName: ianaName, ++ offset: offset, ++ z: z, ++ calendar: calendar ++ }; ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ ++ function ParseTemporalInstantString(isoString) { ++ var result = ParseISODateTime(isoString); ++ if (!result.z && !result.offset) throw new RangeError('Temporal.Instant requires a time zone offset'); ++ return result; ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalZonedDateTimeString(isoString) { ++ var result = ParseISODateTime(isoString); ++ if (!result.ianaName) throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets'); ++ return result; ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalDateTimeString(isoString) { ++ return ParseISODateTime(isoString); ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalDateString(isoString) { ++ return ParseISODateTime(isoString); ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalTimeString(isoString) { ++ var match = time.exec(isoString); ++ var hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ ++ if (match) { ++ hour = ToInteger(match[1]); ++ minute = ToInteger(match[2] || match[5]); ++ second = ToInteger(match[3] || match[6]); ++ if (second === 60) second = 59; ++ var fraction = (match[4] || match[7]) + '000000000'; ++ millisecond = ToInteger(fraction.slice(0, 3)); ++ microsecond = ToInteger(fraction.slice(3, 6)); ++ nanosecond = ToInteger(fraction.slice(6, 9)); ++ calendar = match[15]; ++ } else { ++ var z, hasTime; ++ ++ var _ParseISODateTime = ParseISODateTime(isoString); ++ ++ hasTime = _ParseISODateTime.hasTime; ++ hour = _ParseISODateTime.hour; ++ minute = _ParseISODateTime.minute; ++ second = _ParseISODateTime.second; ++ millisecond = _ParseISODateTime.millisecond; ++ microsecond = _ParseISODateTime.microsecond; ++ nanosecond = _ParseISODateTime.nanosecond; ++ calendar = _ParseISODateTime.calendar; ++ z = _ParseISODateTime.z; ++ if (!hasTime) throw new RangeError("time is missing in string: ".concat(isoString)); ++ if (z) throw new RangeError('Z designator not supported for PlainTime'); ++ } // if it's a date-time string, OK ++ ++ ++ if (/[tT ][0-9][0-9]/.test(isoString)) { ++ return { ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond, ++ calendar: calendar ++ }; ++ } // slow but non-grammar-dependent way to ensure that time-only strings that ++ // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to ++ // assertion in spec text ++ ++ ++ try { ++ var _ParseTemporalMonthDa = ParseTemporalMonthDayString(isoString), ++ month = _ParseTemporalMonthDa.month, ++ day = _ParseTemporalMonthDa.day; ++ ++ RejectISODate(1972, month, day); ++ } catch (_unused2) { ++ try { ++ var _ParseTemporalYearMon = ParseTemporalYearMonthString(isoString), ++ year = _ParseTemporalYearMon.year, ++ _month = _ParseTemporalYearMon.month; ++ ++ RejectISODate(year, _month, 1); ++ } catch (_unused3) { ++ return { ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond, ++ calendar: calendar ++ }; ++ } ++ } ++ ++ throw new RangeError("invalid ISO 8601 time-only string ".concat(isoString, "; may need a T prefix")); ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalYearMonthString(isoString) { ++ var match = yearmonth.exec(isoString); ++ var year, month, calendar, referenceISODay; ++ ++ if (match) { ++ var yearString = match[1]; ++ if (yearString[0] === "\u2212") yearString = "-".concat(yearString.slice(1)); ++ if (yearString === '-000000') throw new RangeError("invalid ISO 8601 string: ".concat(isoString)); ++ year = ToInteger(yearString); ++ month = ToInteger(match[2]); ++ calendar = match[3]; ++ } else { ++ var z; ++ ++ var _ParseISODateTime2 = ParseISODateTime(isoString); ++ ++ year = _ParseISODateTime2.year; ++ month = _ParseISODateTime2.month; ++ calendar = _ParseISODateTime2.calendar; ++ referenceISODay = _ParseISODateTime2.day; ++ z = _ParseISODateTime2.z; ++ if (z) throw new RangeError('Z designator not supported for PlainYearMonth'); ++ } ++ ++ return { ++ year: year, ++ month: month, ++ calendar: calendar, ++ referenceISODay: referenceISODay ++ }; ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalMonthDayString(isoString) { ++ var match = monthday.exec(isoString); ++ var month, day, calendar, referenceISOYear; ++ ++ if (match) { ++ month = ToInteger(match[1]); ++ day = ToInteger(match[2]); ++ } else { ++ var z; ++ ++ var _ParseISODateTime3 = ParseISODateTime(isoString); ++ ++ month = _ParseISODateTime3.month; ++ day = _ParseISODateTime3.day; ++ calendar = _ParseISODateTime3.calendar; ++ referenceISOYear = _ParseISODateTime3.year; ++ z = _ParseISODateTime3.z; ++ if (z) throw new RangeError('Z designator not supported for PlainMonthDay'); ++ } ++ ++ return { ++ month: month, ++ day: day, ++ calendar: calendar, ++ referenceISOYear: referenceISOYear ++ }; ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalTimeZoneString(stringIdent) { ++ try { ++ var canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent); ++ if (canonicalIdent) return { ++ ianaName: canonicalIdent.toString() ++ }; ++ } catch (_unused4) {// fall through ++ } ++ ++ try { ++ // Try parsing ISO string instead ++ var result = ParseISODateTime(stringIdent); ++ ++ if (result.z || result.offset || result.ianaName) { ++ return result; ++ } ++ } catch (_unused5) {// fall through ++ } ++ ++ throw new RangeError("Invalid time zone: ".concat(stringIdent)); ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalDurationString(isoString) { ++ var match = duration.exec(isoString); ++ if (!match) throw new RangeError("invalid duration: ".concat(isoString)); ++ ++ if (match.slice(2).every(function (element) { ++ return element === undefined; ++ })) { ++ throw new RangeError("invalid duration: ".concat(isoString)); ++ } ++ ++ var sign = match[1] === '-' || match[1] === "\u2212" ? -1 : 1; ++ var years = ToInteger(match[2]) * sign; ++ var months = ToInteger(match[3]) * sign; ++ var weeks = ToInteger(match[4]) * sign; ++ var days = ToInteger(match[5]) * sign; ++ var hours = ToInteger(match[6]) * sign; ++ var fHours = match[7]; ++ var minutes = ToInteger(match[8]) * sign; ++ var fMinutes = match[9]; ++ var seconds = ToInteger(match[10]) * sign; ++ var fSeconds = match[11] + '000000000'; ++ var milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign; ++ var microseconds = ToInteger(fSeconds.slice(3, 6)) * sign; ++ var nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign; ++ fHours = fHours ? sign * ToInteger(fHours) / Math.pow(10, fHours.length) : 0; ++ fMinutes = fMinutes ? sign * ToInteger(fMinutes) / Math.pow(10, fMinutes.length) : 0; ++ ++ var _DurationHandleFracti = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds); ++ ++ minutes = _DurationHandleFracti.minutes; ++ seconds = _DurationHandleFracti.seconds; ++ milliseconds = _DurationHandleFracti.milliseconds; ++ microseconds = _DurationHandleFracti.microseconds; ++ nanoseconds = _DurationHandleFracti.nanoseconds; ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } // ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS. ++ ++ function ParseTemporalInstant(isoString) { ++ var _ParseTemporalInstant = ParseTemporalInstantString(isoString), ++ year = _ParseTemporalInstant.year, ++ month = _ParseTemporalInstant.month, ++ day = _ParseTemporalInstant.day, ++ hour = _ParseTemporalInstant.hour, ++ minute = _ParseTemporalInstant.minute, ++ second = _ParseTemporalInstant.second, ++ millisecond = _ParseTemporalInstant.millisecond, ++ microsecond = _ParseTemporalInstant.microsecond, ++ nanosecond = _ParseTemporalInstant.nanosecond, ++ offset = _ParseTemporalInstant.offset, ++ z = _ParseTemporalInstant.z; ++ ++ if (!z && !offset) throw new RangeError('Temporal.Instant requires a time zone offset'); // At least one of z or offset is defined, but TS doesn't seem to understand ++ // that we only use offset if z is not defined (and thus offset must be defined). ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ ++ var offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset); ++ ++ var _BalanceISODateTime = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs); ++ ++ year = _BalanceISODateTime.year; ++ month = _BalanceISODateTime.month; ++ day = _BalanceISODateTime.day; ++ hour = _BalanceISODateTime.hour; ++ minute = _BalanceISODateTime.minute; ++ second = _BalanceISODateTime.second; ++ millisecond = _BalanceISODateTime.millisecond; ++ microsecond = _BalanceISODateTime.microsecond; ++ nanosecond = _BalanceISODateTime.nanosecond; ++ var epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (epochNs === null) throw new RangeError('DateTime outside of supported range'); ++ return epochNs; ++ } ++ function RegulateISODate(yearParam, monthParam, dayParam, overflow) { ++ var year = yearParam; ++ var month = monthParam; ++ var day = dayParam; ++ ++ switch (overflow) { ++ case 'reject': ++ RejectISODate(year, month, day); ++ break; ++ ++ case 'constrain': ++ var _ConstrainISODate = ConstrainISODate(year, month, day); ++ ++ year = _ConstrainISODate.year; ++ month = _ConstrainISODate.month; ++ day = _ConstrainISODate.day; ++ break; ++ } ++ ++ return { ++ year: year, ++ month: month, ++ day: day ++ }; ++ } ++ function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) { ++ var hour = hourParam; ++ var minute = minuteParam; ++ var second = secondParam; ++ var millisecond = millisecondParam; ++ var microsecond = microsecondParam; ++ var nanosecond = nanosecondParam; ++ ++ switch (overflow) { ++ case 'reject': ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ break; ++ ++ case 'constrain': ++ var _ConstrainTime = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ ++ hour = _ConstrainTime.hour; ++ minute = _ConstrainTime.minute; ++ second = _ConstrainTime.second; ++ millisecond = _ConstrainTime.millisecond; ++ microsecond = _ConstrainTime.microsecond; ++ nanosecond = _ConstrainTime.nanosecond; ++ break; ++ } ++ ++ return { ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ function RegulateISOYearMonth(yearParam, monthParam, overflow) { ++ var year = yearParam; ++ var month = monthParam; ++ var referenceISODay = 1; ++ ++ switch (overflow) { ++ case 'reject': ++ RejectISODate(year, month, referenceISODay); ++ break; ++ ++ case 'constrain': ++ var _ConstrainISODate2 = ConstrainISODate(year, month); ++ ++ year = _ConstrainISODate2.year; ++ month = _ConstrainISODate2.month; ++ break; ++ } ++ ++ return { ++ year: year, ++ month: month ++ }; ++ } ++ ++ function DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) { ++ var fHours = fHoursParam; ++ var minutes = minutesParam; ++ var fMinutes = fMinutesParam; ++ var seconds = secondsParam; ++ var milliseconds = millisecondsParam; ++ var microseconds = microsecondsParam; ++ var nanoseconds = nanosecondsParam; ++ ++ if (fHours !== 0) { ++ [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach(function (val) { ++ if (val !== 0) throw new RangeError('only the smallest unit can be fractional'); ++ }); ++ var mins = fHours * 60; ++ minutes = MathTrunc(mins); ++ fMinutes = mins % 1; ++ } ++ ++ if (fMinutes !== 0) { ++ [seconds, milliseconds, microseconds, nanoseconds].forEach(function (val) { ++ if (val !== 0) throw new RangeError('only the smallest unit can be fractional'); ++ }); ++ var secs = fMinutes * 60; ++ seconds = MathTrunc(secs); ++ var fSeconds = secs % 1; ++ ++ if (fSeconds !== 0) { ++ var mils = fSeconds * 1000; ++ milliseconds = MathTrunc(mils); ++ var fMilliseconds = mils % 1; ++ ++ if (fMilliseconds !== 0) { ++ var mics = fMilliseconds * 1000; ++ microseconds = MathTrunc(mics); ++ var fMicroseconds = mics % 1; ++ ++ if (fMicroseconds !== 0) { ++ var nans = fMicroseconds * 1000; ++ nanoseconds = MathTrunc(nans); ++ } ++ } ++ } ++ } ++ ++ return { ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ ++ function ToTemporalDurationRecord(item) { ++ if (!IsObject(item)) { ++ return ParseTemporalDurationString(ToString(item)); ++ } ++ ++ if (IsTemporalDuration(item)) { ++ return { ++ years: GetSlot(item, YEARS), ++ months: GetSlot(item, MONTHS), ++ weeks: GetSlot(item, WEEKS), ++ days: GetSlot(item, DAYS), ++ hours: GetSlot(item, HOURS), ++ minutes: GetSlot(item, MINUTES), ++ seconds: GetSlot(item, SECONDS), ++ milliseconds: GetSlot(item, MILLISECONDS), ++ microseconds: GetSlot(item, MICROSECONDS), ++ nanoseconds: GetSlot(item, NANOSECONDS) ++ }; ++ } ++ ++ var result = { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0, ++ hours: 0, ++ minutes: 0, ++ seconds: 0, ++ milliseconds: 0, ++ microseconds: 0, ++ nanoseconds: 0 ++ }; ++ var partial = ToTemporalPartialDurationRecord(item); ++ ++ var _iterator = _createForOfIteratorHelper(DURATION_FIELDS), ++ _step; ++ ++ try { ++ for (_iterator.s(); !(_step = _iterator.n()).done;) { ++ var property = _step.value; ++ var value = partial[property]; ++ ++ if (value !== undefined) { ++ result[property] = value; ++ } ++ } ++ } catch (err) { ++ _iterator.e(err); ++ } finally { ++ _iterator.f(); ++ } ++ ++ var years = result.years, ++ months = result.months, ++ weeks = result.weeks, ++ days = result.days, ++ hours = result.hours, ++ minutes = result.minutes, ++ seconds = result.seconds, ++ milliseconds = result.milliseconds, ++ microseconds = result.microseconds, ++ nanoseconds = result.nanoseconds; ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ ++ function ToTemporalPartialDurationRecord(temporalDurationLike) { ++ if (!IsObject(temporalDurationLike)) { ++ throw new TypeError('invalid duration-like'); ++ } ++ ++ var result = { ++ years: undefined, ++ months: undefined, ++ weeks: undefined, ++ days: undefined, ++ hours: undefined, ++ minutes: undefined, ++ seconds: undefined, ++ milliseconds: undefined, ++ microseconds: undefined, ++ nanoseconds: undefined ++ }; ++ var any = false; ++ ++ var _iterator2 = _createForOfIteratorHelper(DURATION_FIELDS), ++ _step2; ++ ++ try { ++ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { ++ var property = _step2.value; ++ var value = temporalDurationLike[property]; ++ ++ if (value !== undefined) { ++ any = true; ++ result[property] = ToIntegerWithoutRounding(value); ++ } ++ } ++ } catch (err) { ++ _iterator2.e(err); ++ } finally { ++ _iterator2.f(); ++ } ++ ++ if (!any) { ++ throw new TypeError('invalid duration-like'); ++ } ++ ++ return result; ++ } ++ ++ function ToLimitedTemporalDuration(item, disallowedProperties) { ++ var record = ToTemporalDurationRecord(item); ++ ++ var _iterator3 = _createForOfIteratorHelper(disallowedProperties), ++ _step3; ++ ++ try { ++ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { ++ var property = _step3.value; ++ ++ if (record[property] !== 0) { ++ throw new RangeError("Duration field ".concat(property, " not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.")); ++ } ++ } ++ } catch (err) { ++ _iterator3.e(err); ++ } finally { ++ _iterator3.f(); ++ } ++ ++ return record; ++ } ++ ++ function ToTemporalOverflow(options) { ++ if (options === undefined) return 'constrain'; ++ return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain'); ++ } ++ function ToTemporalDisambiguation(options) { ++ if (options === undefined) return 'compatible'; ++ return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible'); ++ } ++ function ToTemporalRoundingMode(options, fallback) { ++ return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback); ++ } ++ ++ function NegateTemporalRoundingMode(roundingMode) { ++ switch (roundingMode) { ++ case 'ceil': ++ return 'floor'; ++ ++ case 'floor': ++ return 'ceil'; ++ ++ default: ++ return roundingMode; ++ } ++ } ++ ++ function ToTemporalOffset(options, fallback) { ++ if (options === undefined) return fallback; ++ return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback); ++ } ++ function ToShowCalendarOption(options) { ++ return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto'); ++ } ++ function ToShowTimeZoneNameOption(options) { ++ return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto'); ++ } ++ function ToShowOffsetOption(options) { ++ return GetOption(options, 'offset', ['auto', 'never'], 'auto'); ++ } ++ function ToTemporalRoundingIncrement(options, dividend, inclusive) { ++ var maximum = Infinity; ++ if (dividend !== undefined) maximum = dividend; ++ if (!inclusive && dividend !== undefined) maximum = dividend > 1 ? dividend - 1 : 1; ++ var increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1); ++ ++ if (dividend !== undefined && dividend % increment !== 0) { ++ throw new RangeError("Rounding increment must divide evenly into ".concat(dividend)); ++ } ++ ++ return increment; ++ } ++ function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) { ++ var maximumIncrements = { ++ year: undefined, ++ month: undefined, ++ week: undefined, ++ day: undefined, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++ } ++ function ToSecondsStringPrecision(options) { ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined); ++ ++ if (smallestUnit === 'hour') { ++ var ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce(function (allowed, _ref5) { ++ var _ref6 = _slicedToArray(_ref5, 3), ++ p = _ref6[0], ++ s = _ref6[1], ++ c = _ref6[2]; ++ ++ // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains. ++ // Maybe this is fixed in later TS versions? ++ if (c === 'time' && s !== 'hour') { ++ allowed.push(s, p); ++ } ++ ++ return allowed; ++ }, []); ++ throw new RangeError("smallestUnit must be one of ".concat(ALLOWED_UNITS.join(', '), ", not ").concat(smallestUnit)); ++ } ++ ++ switch (smallestUnit) { ++ case 'minute': ++ return { ++ precision: 'minute', ++ unit: 'minute', ++ increment: 1 ++ }; ++ ++ case 'second': ++ return { ++ precision: 0, ++ unit: 'second', ++ increment: 1 ++ }; ++ ++ case 'millisecond': ++ return { ++ precision: 3, ++ unit: 'millisecond', ++ increment: 1 ++ }; ++ ++ case 'microsecond': ++ return { ++ precision: 6, ++ unit: 'microsecond', ++ increment: 1 ++ }; ++ ++ case 'nanosecond': ++ return { ++ precision: 9, ++ unit: 'nanosecond', ++ increment: 1 ++ }; ++ ++ } ++ ++ var digits = options.fractionalSecondDigits; ++ if (digits === undefined) digits = 'auto'; ++ ++ if (typeof digits !== 'number') { ++ var stringDigits = ToString(digits); ++ if (stringDigits === 'auto') return { ++ precision: 'auto', ++ unit: 'nanosecond', ++ increment: 1 ++ }; ++ throw new RangeError("fractionalSecondDigits must be 'auto' or 0 through 9, not ".concat(stringDigits)); ++ } ++ ++ if (NumberIsNaN(digits) || digits < 0 || digits > 9) { ++ throw new RangeError("fractionalSecondDigits must be 'auto' or 0 through 9, not ".concat(digits)); ++ } ++ ++ var precision = MathFloor$1(digits); ++ ++ switch (precision) { ++ case 0: ++ return { ++ precision: precision, ++ unit: 'second', ++ increment: 1 ++ }; ++ ++ case 1: ++ case 2: ++ case 3: ++ return { ++ precision: precision, ++ unit: 'millisecond', ++ increment: Math.pow(10, 3 - precision) ++ }; ++ ++ case 4: ++ case 5: ++ case 6: ++ return { ++ precision: precision, ++ unit: 'microsecond', ++ increment: Math.pow(10, 6 - precision) ++ }; ++ ++ case 7: ++ case 8: ++ case 9: ++ return { ++ precision: precision, ++ unit: 'nanosecond', ++ increment: Math.pow(10, 9 - precision) ++ }; ++ ++ default: ++ throw new RangeError("fractionalSecondDigits must be 'auto' or 0 through 9, not ".concat(digits)); ++ } ++ } ++ var REQUIRED = Symbol('~required~'); // This signature of the function is NOT used in type-checking, so restricting ++ // the default value via generic binding like the other overloads isn't ++ // necessary. ++ ++ function GetTemporalUnit(options, key, unitGroup, requiredOrDefault) { ++ var extraValues = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; ++ var allowedSingular = []; ++ ++ var _iterator4 = _createForOfIteratorHelper(SINGULAR_PLURAL_UNITS), ++ _step4; ++ ++ try { ++ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { ++ var _step4$value = _slicedToArray(_step4.value, 3), ++ _singular = _step4$value[1], ++ category = _step4$value[2]; ++ ++ if (unitGroup === 'datetime' || unitGroup === category) { ++ allowedSingular.push(_singular); ++ } ++ } ++ } catch (err) { ++ _iterator4.e(err); ++ } finally { ++ _iterator4.f(); ++ } ++ ++ allowedSingular.push.apply(allowedSingular, _toConsumableArray(extraValues)); ++ var defaultVal = requiredOrDefault; ++ ++ if (defaultVal === REQUIRED) { ++ defaultVal = undefined; ++ } else if (defaultVal !== undefined) { ++ allowedSingular.push(defaultVal); ++ } ++ ++ var allowedValues = [].concat(allowedSingular); ++ ++ for (var _i = 0, _allowedSingular = allowedSingular; _i < _allowedSingular.length; _i++) { ++ var singular = _allowedSingular[_i]; ++ var plural = PLURAL_FOR.get(singular); ++ if (plural !== undefined) allowedValues.push(plural); ++ } ++ ++ var retval = GetOption(options, key, allowedValues, defaultVal); ++ ++ if (retval === undefined && requiredOrDefault === REQUIRED) { ++ throw new RangeError("".concat(key, " is required")); ++ } // Coerce any plural units into their singular form ++ ++ ++ if (SINGULAR_FOR.has(retval)) { ++ // We just has-checked this, but tsc doesn't understand that. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ return SINGULAR_FOR.get(retval); ++ } ++ ++ return retval; ++ } ++ function ToRelativeTemporalObject(options) { ++ var relativeTo = options.relativeTo; ++ if (relativeTo === undefined) return relativeTo; ++ var offsetBehaviour = 'option'; ++ var matchMinutes = false; ++ var year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset; ++ ++ if (IsObject(relativeTo)) { ++ if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) return relativeTo; ++ if (IsTemporalDateTime(relativeTo)) return TemporalDateTimeToDate(relativeTo); ++ calendar = GetTemporalCalendarWithISODefault(relativeTo); ++ var fieldNames = CalendarFields(calendar, ['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'monthCode', 'nanosecond', 'second', 'year']); ++ var fields = PrepareTemporalFields(relativeTo, fieldNames, []); ++ var dateOptions = ObjectCreate$2(null); ++ dateOptions.overflow = 'constrain'; ++ ++ var _InterpretTemporalDat = InterpretTemporalDateTimeFields(calendar, fields, dateOptions); ++ ++ year = _InterpretTemporalDat.year; ++ month = _InterpretTemporalDat.month; ++ day = _InterpretTemporalDat.day; ++ hour = _InterpretTemporalDat.hour; ++ minute = _InterpretTemporalDat.minute; ++ second = _InterpretTemporalDat.second; ++ millisecond = _InterpretTemporalDat.millisecond; ++ microsecond = _InterpretTemporalDat.microsecond; ++ nanosecond = _InterpretTemporalDat.nanosecond; ++ // The `offset` and `timeZone` properties only exist on ZonedDateTime (or ++ // ZonedDateTimeLike-property bags). The assertions below are used to avoid ++ // TS errors while not diverging runtime code from proposal-temporal. ++ offset = relativeTo.offset; ++ if (offset === undefined) offsetBehaviour = 'wall'; ++ timeZone = relativeTo.timeZone; ++ } else { ++ var ianaName, z; ++ ++ var _ParseISODateTime4 = ParseISODateTime(ToString(relativeTo)); ++ ++ year = _ParseISODateTime4.year; ++ month = _ParseISODateTime4.month; ++ day = _ParseISODateTime4.day; ++ hour = _ParseISODateTime4.hour; ++ minute = _ParseISODateTime4.minute; ++ second = _ParseISODateTime4.second; ++ millisecond = _ParseISODateTime4.millisecond; ++ microsecond = _ParseISODateTime4.microsecond; ++ nanosecond = _ParseISODateTime4.nanosecond; ++ calendar = _ParseISODateTime4.calendar; ++ ianaName = _ParseISODateTime4.ianaName; ++ offset = _ParseISODateTime4.offset; ++ z = _ParseISODateTime4.z; ++ if (ianaName) timeZone = ianaName; ++ ++ if (z) { ++ offsetBehaviour = 'exact'; ++ } else if (!offset) { ++ offsetBehaviour = 'wall'; ++ } ++ ++ if (!calendar) calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ matchMinutes = true; ++ } ++ ++ if (timeZone !== undefined) { ++ timeZone = ToTemporalTimeZone(timeZone); ++ var offsetNs = 0; ++ if (offsetBehaviour === 'option') offsetNs = ParseTimeZoneOffsetString(ToString(offset)); ++ var epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++ } ++ ++ return CreateTemporalDate(year, month, day, calendar); ++ } ++ function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) { ++ for (var _i2 = 0, _arr = [['years', years], ['months', months], ['weeks', weeks], ['days', days], ['hours', hours], ['minutes', minutes], ['seconds', seconds], ['milliseconds', milliseconds], ['microseconds', microseconds], ['nanoseconds', nanoseconds]]; _i2 < _arr.length; _i2++) { ++ var _arr$_i = _slicedToArray(_arr[_i2], 2), ++ prop = _arr$_i[0], ++ v = _arr$_i[1]; ++ ++ if (v !== 0) { ++ // All the above keys are definitely in SINGULAR_FOR ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ return SINGULAR_FOR.get(prop); ++ } ++ } ++ ++ return 'nanosecond'; ++ } ++ function LargerOfTwoTemporalUnits(unit1, unit2) { ++ if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) return unit2; ++ return unit1; ++ } ++ ++ function MergeLargestUnitOption(optionsParam, largestUnit) { ++ var options = optionsParam; ++ if (options === undefined) options = ObjectCreate$2(null); ++ return ObjectAssign$2(ObjectCreate$2(null), options, { ++ largestUnit: largestUnit ++ }); ++ } ++ ++ function PrepareTemporalFields(bag, fields, requiredFields) { ++ var _ref7 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { ++ emptySourceErrorMessage: 'no supported properties found' ++ }, ++ emptySourceErrorMessage = _ref7.emptySourceErrorMessage; ++ ++ var result = ObjectCreate$2(null); ++ var any = false; ++ ++ var _iterator5 = _createForOfIteratorHelper(fields), ++ _step5; ++ ++ try { ++ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { ++ var property = _step5.value; ++ var value = bag[property]; ++ ++ if (value !== undefined) { ++ any = true; ++ ++ if (BUILTIN_CASTS.has(property)) { ++ // We just has-checked this map access, so there will definitely be a ++ // value. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ value = BUILTIN_CASTS.get(property)(value); ++ } ++ ++ result[property] = value; ++ } else if (requiredFields !== 'partial') { ++ // TODO: using .call in this way is not correctly type-checked by tsc. ++ // We might need a type-safe Call wrapper? ++ if (ArrayIncludes$1.call(requiredFields, property)) { ++ throw new TypeError("required property '".concat(property, "' missing or undefined")); ++ } ++ ++ value = BUILTIN_DEFAULTS.get(property); ++ result[property] = value; ++ } ++ } ++ } catch (err) { ++ _iterator5.e(err); ++ } finally { ++ _iterator5.f(); ++ } ++ ++ if (requiredFields === 'partial' && !any) { ++ throw new TypeError(emptySourceErrorMessage); ++ } ++ ++ if (result.era === undefined !== (result.eraYear === undefined)) { ++ throw new RangeError("properties 'era' and 'eraYear' must be provided together"); ++ } ++ ++ return result; ++ } ++ function ToTemporalTimeRecord(bag) { ++ var completeness = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'complete'; ++ // NOTE: Field order here is important. ++ var fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second']; ++ var partial = PrepareTemporalFields(bag, fields, 'partial', { ++ emptySourceErrorMessage: 'invalid time-like' ++ }); ++ var result = {}; ++ ++ for (var _i3 = 0, _fields = fields; _i3 < _fields.length; _i3++) { ++ var field = _fields[_i3]; ++ var valueDesc = ObjectGetOwnPropertyDescriptor(partial, field); ++ ++ if (valueDesc !== undefined) { ++ result[field] = valueDesc.value; ++ } else if (completeness === 'complete') { ++ result[field] = 0; ++ } ++ } ++ ++ return result; ++ } ++ function ToTemporalDate(itemParam, options) { ++ var item = itemParam; ++ ++ if (IsObject(item)) { ++ if (IsTemporalDate(item)) return item; ++ ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ ++ if (IsTemporalDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR)); ++ } ++ ++ var _calendar = GetTemporalCalendarWithISODefault(item); ++ ++ var fieldNames = CalendarFields(_calendar, ['day', 'month', 'monthCode', 'year']); ++ var fields = PrepareTemporalFields(item, fieldNames, []); ++ return CalendarDateFromFields(_calendar, fields, options); ++ } ++ ++ ToTemporalOverflow(options); // validate and ignore ++ ++ var _ParseTemporalDateStr = ParseTemporalDateString(ToString(item)), ++ year = _ParseTemporalDateStr.year, ++ month = _ParseTemporalDateStr.month, ++ day = _ParseTemporalDateStr.day, ++ calendar = _ParseTemporalDateStr.calendar, ++ z = _ParseTemporalDateStr.z; ++ ++ if (z) throw new RangeError('Z designator not supported for PlainDate'); ++ var TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%'); ++ return new TemporalPlainDate(year, month, day, calendar); // include validation ++ } ++ function InterpretTemporalDateTimeFields(calendar, fields, options) { ++ var _ToTemporalTimeRecord = ToTemporalTimeRecord(fields), ++ hour = _ToTemporalTimeRecord.hour, ++ minute = _ToTemporalTimeRecord.minute, ++ second = _ToTemporalTimeRecord.second, ++ millisecond = _ToTemporalTimeRecord.millisecond, ++ microsecond = _ToTemporalTimeRecord.microsecond, ++ nanosecond = _ToTemporalTimeRecord.nanosecond; ++ ++ var overflow = ToTemporalOverflow(options); ++ var date = CalendarDateFromFields(calendar, fields, options); ++ var year = GetSlot(date, ISO_YEAR); ++ var month = GetSlot(date, ISO_MONTH); ++ var day = GetSlot(date, ISO_DAY); ++ ++ var _RegulateTime = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow); ++ ++ hour = _RegulateTime.hour; ++ minute = _RegulateTime.minute; ++ second = _RegulateTime.second; ++ millisecond = _RegulateTime.millisecond; ++ microsecond = _RegulateTime.microsecond; ++ nanosecond = _RegulateTime.nanosecond; ++ return { ++ year: year, ++ month: month, ++ day: day, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ function ToTemporalDateTime(item, options) { ++ var year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ ++ if (IsObject(item)) { ++ if (IsTemporalDateTime(item)) return item; ++ ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ ++ if (IsTemporalDate(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR)); ++ } ++ ++ calendar = GetTemporalCalendarWithISODefault(item); ++ var fieldNames = CalendarFields(calendar, ['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'monthCode', 'nanosecond', 'second', 'year']); ++ var fields = PrepareTemporalFields(item, fieldNames, []); ++ ++ var _InterpretTemporalDat2 = InterpretTemporalDateTimeFields(calendar, fields, options); ++ ++ year = _InterpretTemporalDat2.year; ++ month = _InterpretTemporalDat2.month; ++ day = _InterpretTemporalDat2.day; ++ hour = _InterpretTemporalDat2.hour; ++ minute = _InterpretTemporalDat2.minute; ++ second = _InterpretTemporalDat2.second; ++ millisecond = _InterpretTemporalDat2.millisecond; ++ microsecond = _InterpretTemporalDat2.microsecond; ++ nanosecond = _InterpretTemporalDat2.nanosecond; ++ } else { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ var z; ++ ++ var _ParseTemporalDateTim = ParseTemporalDateTimeString(ToString(item)); ++ ++ year = _ParseTemporalDateTim.year; ++ month = _ParseTemporalDateTim.month; ++ day = _ParseTemporalDateTim.day; ++ hour = _ParseTemporalDateTim.hour; ++ minute = _ParseTemporalDateTim.minute; ++ second = _ParseTemporalDateTim.second; ++ millisecond = _ParseTemporalDateTim.millisecond; ++ microsecond = _ParseTemporalDateTim.microsecond; ++ nanosecond = _ParseTemporalDateTim.nanosecond; ++ calendar = _ParseTemporalDateTim.calendar; ++ z = _ParseTemporalDateTim.z; ++ if (z) throw new RangeError('Z designator not supported for PlainDateTime'); ++ RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (calendar === undefined) calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ } ++ ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ function ToTemporalDuration(item) { ++ if (IsTemporalDuration(item)) return item; ++ ++ var _ToTemporalDurationRe = ToTemporalDurationRecord(item), ++ years = _ToTemporalDurationRe.years, ++ months = _ToTemporalDurationRe.months, ++ weeks = _ToTemporalDurationRe.weeks, ++ days = _ToTemporalDurationRe.days, ++ hours = _ToTemporalDurationRe.hours, ++ minutes = _ToTemporalDurationRe.minutes, ++ seconds = _ToTemporalDurationRe.seconds, ++ milliseconds = _ToTemporalDurationRe.milliseconds, ++ microseconds = _ToTemporalDurationRe.microseconds, ++ nanoseconds = _ToTemporalDurationRe.nanoseconds; ++ ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ function ToTemporalInstant(item) { ++ if (IsTemporalInstant(item)) return item; ++ ++ if (IsTemporalZonedDateTime(item)) { ++ var _TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ ++ return new _TemporalInstant(GetSlot(item, EPOCHNANOSECONDS)); ++ } ++ ++ var ns = ParseTemporalInstant(ToString(item)); ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(ns); ++ } ++ function ToTemporalMonthDay(itemParam, options) { ++ var item = itemParam; ++ ++ if (IsObject(item)) { ++ if (IsTemporalMonthDay(item)) return item; ++ ++ var _calendar2, calendarAbsent; ++ ++ if (HasSlot(item, CALENDAR)) { ++ _calendar2 = GetSlot(item, CALENDAR); ++ calendarAbsent = false; ++ } else { ++ var _maybeStringCalendar = item.calendar; ++ calendarAbsent = _maybeStringCalendar === undefined; ++ if (_maybeStringCalendar === undefined) _maybeStringCalendar = GetISO8601Calendar(); ++ _calendar2 = ToTemporalCalendar(_maybeStringCalendar); ++ } // HasSlot above adjusts the type of 'item' to include ++ // TypesWithCalendarUnits, which causes type-inference failures below. ++ // This is probably indicative of problems with HasSlot's typing. ++ ++ ++ item = item; ++ var fieldNames = CalendarFields(_calendar2, ['day', 'month', 'monthCode', 'year']); ++ var fields = PrepareTemporalFields(item, fieldNames, []); // Callers who omit the calendar are not writing calendar-independent ++ // code. In that case, `monthCode`/`year` can be omitted; `month` and ++ // `day` are sufficient. Add a `year` to satisfy calendar validation. ++ ++ if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) { ++ fields.year = 1972; ++ } ++ ++ return CalendarMonthDayFromFields(_calendar2, fields, options); ++ } ++ ++ ToTemporalOverflow(options); // validate and ignore ++ ++ var _ParseTemporalMonthDa2 = ParseTemporalMonthDayString(ToString(item)), ++ month = _ParseTemporalMonthDa2.month, ++ day = _ParseTemporalMonthDa2.day, ++ referenceISOYear = _ParseTemporalMonthDa2.referenceISOYear, ++ maybeStringCalendar = _ParseTemporalMonthDa2.calendar; ++ ++ var calendar = maybeStringCalendar; ++ if (calendar === undefined) calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ ++ if (referenceISOYear === undefined) { ++ RejectISODate(1972, month, day); ++ return CreateTemporalMonthDay(month, day, calendar); ++ } ++ ++ var result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear); ++ return CalendarMonthDayFromFields(calendar, result); ++ } ++ function ToTemporalTime(itemParam) { ++ var overflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'constrain'; ++ var item = itemParam; ++ var hour, minute, second, millisecond, microsecond, nanosecond, calendar; ++ ++ if (IsObject(item)) { ++ if (IsTemporalTime(item)) return item; ++ ++ if (IsTemporalZonedDateTime(item)) { ++ item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR)); ++ } ++ ++ if (IsTemporalDateTime(item)) { ++ var _TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ ++ return new _TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND)); ++ } ++ ++ calendar = GetTemporalCalendarWithISODefault(item); ++ ++ if (ToString(calendar) !== 'iso8601') { ++ throw new RangeError('PlainTime can only have iso8601 calendar'); ++ } ++ ++ var _ToTemporalTimeRecord2 = ToTemporalTimeRecord(item); ++ ++ hour = _ToTemporalTimeRecord2.hour; ++ minute = _ToTemporalTimeRecord2.minute; ++ second = _ToTemporalTimeRecord2.second; ++ millisecond = _ToTemporalTimeRecord2.millisecond; ++ microsecond = _ToTemporalTimeRecord2.microsecond; ++ nanosecond = _ToTemporalTimeRecord2.nanosecond; ++ ++ var _RegulateTime2 = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow); ++ ++ hour = _RegulateTime2.hour; ++ minute = _RegulateTime2.minute; ++ second = _RegulateTime2.second; ++ millisecond = _RegulateTime2.millisecond; ++ microsecond = _RegulateTime2.microsecond; ++ nanosecond = _RegulateTime2.nanosecond; ++ } else { ++ var _ParseTemporalTimeStr = ParseTemporalTimeString(ToString(item)); ++ ++ hour = _ParseTemporalTimeStr.hour; ++ minute = _ParseTemporalTimeStr.minute; ++ second = _ParseTemporalTimeStr.second; ++ millisecond = _ParseTemporalTimeStr.millisecond; ++ microsecond = _ParseTemporalTimeStr.microsecond; ++ nanosecond = _ParseTemporalTimeStr.nanosecond; ++ calendar = _ParseTemporalTimeStr.calendar; ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ ++ if (calendar !== undefined && calendar !== 'iso8601') { ++ throw new RangeError('PlainTime can only have iso8601 calendar'); ++ } ++ } ++ ++ var TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ function ToTemporalYearMonth(item, options) { ++ if (IsObject(item)) { ++ if (IsTemporalYearMonth(item)) return item; ++ ++ var _calendar3 = GetTemporalCalendarWithISODefault(item); ++ ++ var fieldNames = CalendarFields(_calendar3, ['month', 'monthCode', 'year']); ++ var fields = PrepareTemporalFields(item, fieldNames, []); ++ return CalendarYearMonthFromFields(_calendar3, fields, options); ++ } ++ ++ ToTemporalOverflow(options); // validate and ignore ++ ++ var _ParseTemporalYearMon2 = ParseTemporalYearMonthString(ToString(item)), ++ year = _ParseTemporalYearMon2.year, ++ month = _ParseTemporalYearMon2.month, ++ referenceISODay = _ParseTemporalYearMon2.referenceISODay, ++ maybeStringCalendar = _ParseTemporalYearMon2.calendar; // TODO: replace with ternary? ++ ++ ++ var calendar = maybeStringCalendar; ++ if (calendar === undefined) calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ ++ if (referenceISODay === undefined) { ++ RejectISODate(year, month, 1); ++ return CreateTemporalYearMonth(year, month, calendar); ++ } ++ ++ var result = CreateTemporalYearMonth(year, month, calendar, referenceISODay); ++ return CalendarYearMonthFromFields(calendar, result); ++ } ++ function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) { ++ var DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ ++ if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') { ++ // Simple case: ISO string without a TZ offset (or caller wants to ignore ++ // the offset), so just convert DateTime to Instant in the given time zone ++ var _instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation); ++ ++ return GetSlot(_instant, EPOCHNANOSECONDS); ++ } // The caller wants the offset to always win ('use') OR the caller is OK ++ // with the offset winning ('prefer' or 'reject') as long as it's valid ++ // for this timezone and date/time. ++ ++ ++ if (offsetBehaviour === 'exact' || offsetOpt === 'use') { ++ // Calculate the instant for the input's date/time and offset ++ var epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (epochNs === null) throw new RangeError('ZonedDateTime outside of supported range'); ++ return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)); ++ } // "prefer" or "reject" ++ ++ ++ var possibleInstants = GetPossibleInstantsFor(timeZone, dt); ++ ++ var _iterator6 = _createForOfIteratorHelper(possibleInstants), ++ _step6; ++ ++ try { ++ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { ++ var candidate = _step6.value; ++ var candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate); ++ var roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand')); ++ ++ if (candidateOffset === offsetNs || matchMinute && roundedCandidateOffset === offsetNs) { ++ return GetSlot(candidate, EPOCHNANOSECONDS); ++ } ++ } // the user-provided offset doesn't match any instants for this time ++ // zone and date/time. ++ ++ } catch (err) { ++ _iterator6.e(err); ++ } finally { ++ _iterator6.f(); ++ } ++ ++ if (offsetOpt === 'reject') { ++ var offsetStr = FormatTimeZoneOffsetString(offsetNs); ++ var timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone'; // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT ++ // toString (which is invoked by Node when using template literals directly). ++ // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit ++ ++ throw new RangeError("Offset ".concat(offsetStr, " is invalid for ").concat(dt.toString(), " in ").concat(timeZoneString)); ++ } // fall through: offsetOpt === 'prefer', but the offset doesn't match ++ // so fall back to use the time zone instead. ++ ++ ++ var instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation); ++ return GetSlot(instant, EPOCHNANOSECONDS); ++ } ++ function ToTemporalZonedDateTime(item, options) { ++ var year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar; ++ var matchMinute = false; ++ var offsetBehaviour = 'option'; ++ ++ if (IsObject(item)) { ++ if (IsTemporalZonedDateTime(item)) return item; ++ calendar = GetTemporalCalendarWithISODefault(item); ++ var fieldNames = CalendarFields(calendar, ['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'monthCode', 'nanosecond', 'second', 'year']); ++ var fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset'); ++ var fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']); ++ ++ var _InterpretTemporalDat3 = InterpretTemporalDateTimeFields(calendar, fields, options); ++ ++ year = _InterpretTemporalDat3.year; ++ month = _InterpretTemporalDat3.month; ++ day = _InterpretTemporalDat3.day; ++ hour = _InterpretTemporalDat3.hour; ++ minute = _InterpretTemporalDat3.minute; ++ second = _InterpretTemporalDat3.second; ++ millisecond = _InterpretTemporalDat3.millisecond; ++ microsecond = _InterpretTemporalDat3.microsecond; ++ nanosecond = _InterpretTemporalDat3.nanosecond; ++ timeZone = ToTemporalTimeZone(fields.timeZone); ++ offset = fields.offset; ++ ++ if (offset === undefined) { ++ offsetBehaviour = 'wall'; ++ } else { ++ offset = ToString(offset); ++ } ++ } else { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ var ianaName, z; ++ ++ var _ParseTemporalZonedDa = ParseTemporalZonedDateTimeString(ToString(item)); ++ ++ year = _ParseTemporalZonedDa.year; ++ month = _ParseTemporalZonedDa.month; ++ day = _ParseTemporalZonedDa.day; ++ hour = _ParseTemporalZonedDa.hour; ++ minute = _ParseTemporalZonedDa.minute; ++ second = _ParseTemporalZonedDa.second; ++ millisecond = _ParseTemporalZonedDa.millisecond; ++ microsecond = _ParseTemporalZonedDa.microsecond; ++ nanosecond = _ParseTemporalZonedDa.nanosecond; ++ ianaName = _ParseTemporalZonedDa.ianaName; ++ offset = _ParseTemporalZonedDa.offset; ++ z = _ParseTemporalZonedDa.z; ++ calendar = _ParseTemporalZonedDa.calendar; ++ if (!ianaName) throw new RangeError('time zone ID required in brackets'); ++ ++ if (z) { ++ offsetBehaviour = 'exact'; ++ } else if (!offset) { ++ offsetBehaviour = 'wall'; ++ } ++ ++ var TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ timeZone = new TemporalTimeZone(ianaName); ++ if (!calendar) calendar = GetISO8601Calendar(); ++ calendar = ToTemporalCalendar(calendar); ++ matchMinute = true; // ISO strings may specify offset with less precision ++ } ++ ++ var offsetNs = 0; // The code above guarantees that if offsetBehaviour === 'option', then ++ // `offset` is not undefined. ++ ++ if (offsetBehaviour === 'option') offsetNs = ParseTimeZoneOffsetString(offset); ++ var disambiguation = ToTemporalDisambiguation(options); ++ var offsetOpt = ToTemporalOffset(options, 'reject'); ++ var epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++ } ++ function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) { ++ RejectISODate(isoYear, isoMonth, isoDay); ++ RejectDateRange(isoYear, isoMonth, isoDay); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, DATE_BRAND, true); ++ ++ { ++ ObjectDefineProperty(result, '_repr_', { ++ value: "".concat(result[Symbol.toStringTag], " <").concat(TemporalDateToString(result), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ function CreateTemporalDate(isoYear, isoMonth, isoDay) { ++ var calendar = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : GetISO8601Calendar(); ++ var TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%'); ++ var result = ObjectCreate$2(TemporalPlainDate.prototype); ++ CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar); ++ return result; ++ } ++ function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) { ++ RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns); ++ RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, ISO_HOUR, h); ++ SetSlot(result, ISO_MINUTE, min); ++ SetSlot(result, ISO_SECOND, s); ++ SetSlot(result, ISO_MILLISECOND, ms); ++ SetSlot(result, ISO_MICROSECOND, µs); ++ SetSlot(result, ISO_NANOSECOND, ns); ++ SetSlot(result, CALENDAR, calendar); ++ ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: "".concat(result[Symbol.toStringTag], " <").concat(TemporalDateTimeToString(result, 'auto'), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns) { ++ var calendar = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : GetISO8601Calendar(); ++ var TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var result = ObjectCreate$2(TemporalPlainDateTime.prototype); ++ CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar); ++ return result; ++ } ++ function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) { ++ RejectISODate(referenceISOYear, isoMonth, isoDay); ++ RejectDateRange(referenceISOYear, isoMonth, isoDay); ++ CreateSlots(result); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, isoDay); ++ SetSlot(result, ISO_YEAR, referenceISOYear); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, MONTH_DAY_BRAND, true); ++ ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: "".concat(result[Symbol.toStringTag], " <").concat(TemporalMonthDayToString(result), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ function CreateTemporalMonthDay(isoMonth, isoDay) { ++ var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GetISO8601Calendar(); ++ var referenceISOYear = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1972; ++ var TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%'); ++ var result = ObjectCreate$2(TemporalPlainMonthDay.prototype); ++ CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear); ++ return result; ++ } ++ function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) { ++ RejectISODate(isoYear, isoMonth, referenceISODay); ++ RejectYearMonthRange(isoYear, isoMonth); ++ CreateSlots(result); ++ SetSlot(result, ISO_YEAR, isoYear); ++ SetSlot(result, ISO_MONTH, isoMonth); ++ SetSlot(result, ISO_DAY, referenceISODay); ++ SetSlot(result, CALENDAR, calendar); ++ SetSlot(result, YEAR_MONTH_BRAND, true); ++ ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: "".concat(result[Symbol.toStringTag], " <").concat(TemporalYearMonthToString(result), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ function CreateTemporalYearMonth(isoYear, isoMonth) { ++ var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GetISO8601Calendar(); ++ var referenceISODay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; ++ var TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%'); ++ var result = ObjectCreate$2(TemporalPlainYearMonth.prototype); ++ CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay); ++ return result; ++ } ++ function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) { ++ ValidateEpochNanoseconds(epochNanoseconds); ++ CreateSlots(result); ++ SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds); ++ SetSlot(result, TIME_ZONE, timeZone); ++ SetSlot(result, CALENDAR, calendar); ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ var instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS)); ++ SetSlot(result, INSTANT, instant); ++ ++ { ++ Object.defineProperty(result, '_repr_', { ++ value: "".concat(result[Symbol.toStringTag], " <").concat(TemporalZonedDateTimeToString(result, 'auto'), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ function CreateTemporalZonedDateTime(epochNanoseconds, timeZone) { ++ var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GetISO8601Calendar(); ++ var TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%'); ++ var result = ObjectCreate$2(TemporalZonedDateTime.prototype); ++ CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar); ++ return result; ++ } ++ function GetISO8601Calendar() { ++ var TemporalCalendar = GetIntrinsic('%Temporal.Calendar%'); ++ return new TemporalCalendar('iso8601'); ++ } // TODO: should (can?) we make this generic so the field names are checked ++ // against the type that the calendar is a property of? ++ ++ function CalendarFields(calendar, fieldNamesParam) { ++ var fieldNames = fieldNamesParam; ++ ++ if (calendar.fields) { ++ fieldNames = calendar.fields(fieldNames); ++ } ++ ++ var result = []; ++ ++ var _iterator7 = _createForOfIteratorHelper(fieldNames), ++ _step7; ++ ++ try { ++ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { ++ var name = _step7.value; ++ if (typeof name !== 'string') throw new TypeError('bad return from calendar.fields()'); ++ ArrayPrototypePush$1.call(result, name); ++ } ++ } catch (err) { ++ _iterator7.e(err); ++ } finally { ++ _iterator7.f(); ++ } ++ ++ return result; ++ } ++ function CalendarMergeFields(calendar, fields, additionalFields) { ++ var calMergeFields = calendar.mergeFields; ++ ++ if (!calMergeFields) { ++ return _objectSpread2(_objectSpread2({}, fields), additionalFields); ++ } ++ ++ var result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]); ++ if (!IsObject(result)) throw new TypeError('bad return from calendar.mergeFields()'); ++ return result; ++ } ++ function CalendarDateAdd(calendar, date, duration, options, dateAddParam) { ++ var dateAdd = dateAddParam; ++ ++ if (dateAdd === undefined) { ++ dateAdd = calendar.dateAdd; ++ } ++ ++ var result = ReflectApply$1(dateAdd, calendar, [date, duration, options]); ++ if (!IsTemporalDate(result)) throw new TypeError('invalid result'); ++ return result; ++ } ++ ++ function CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) { ++ var dateUntil = dateUntilParam; ++ ++ if (dateUntil === undefined) { ++ dateUntil = calendar.dateUntil; ++ } ++ ++ var result = ReflectApply$1(dateUntil, calendar, [date, otherDate, options]); ++ if (!IsTemporalDuration(result)) throw new TypeError('invalid result'); ++ return result; ++ } ++ ++ function CalendarYear(calendar, dateLike) { ++ var result = calendar.year(dateLike); ++ ++ if (result === undefined) { ++ throw new RangeError('calendar year result must be an integer'); ++ } ++ ++ return ToIntegerThrowOnInfinity(result); ++ } ++ function CalendarMonth(calendar, dateLike) { ++ var result = calendar.month(dateLike); ++ ++ if (result === undefined) { ++ throw new RangeError('calendar month result must be a positive integer'); ++ } ++ ++ return ToPositiveInteger(result); ++ } ++ function CalendarMonthCode(calendar, dateLike) { ++ var result = calendar.monthCode(dateLike); ++ ++ if (result === undefined) { ++ throw new RangeError('calendar monthCode result must be a string'); ++ } ++ ++ return ToString(result); ++ } ++ function CalendarDay(calendar, dateLike) { ++ var result = calendar.day(dateLike); ++ ++ if (result === undefined) { ++ throw new RangeError('calendar day result must be a positive integer'); ++ } ++ ++ return ToPositiveInteger(result); ++ } ++ function CalendarEra(calendar, dateLike) { ++ var result = calendar.era(dateLike); ++ ++ if (result !== undefined) { ++ result = ToString(result); ++ } ++ ++ return result; ++ } ++ function CalendarEraYear(calendar, dateLike) { ++ var result = calendar.eraYear(dateLike); ++ ++ if (result !== undefined) { ++ result = ToIntegerThrowOnInfinity(result); ++ } ++ ++ return result; ++ } ++ function CalendarDayOfWeek(calendar, dateLike) { ++ return calendar.dayOfWeek(dateLike); ++ } ++ function CalendarDayOfYear(calendar, dateLike) { ++ return calendar.dayOfYear(dateLike); ++ } ++ function CalendarWeekOfYear(calendar, dateLike) { ++ return calendar.weekOfYear(dateLike); ++ } ++ function CalendarDaysInWeek(calendar, dateLike) { ++ return calendar.daysInWeek(dateLike); ++ } ++ function CalendarDaysInMonth(calendar, dateLike) { ++ return calendar.daysInMonth(dateLike); ++ } ++ function CalendarDaysInYear(calendar, dateLike) { ++ return calendar.daysInYear(dateLike); ++ } ++ function CalendarMonthsInYear(calendar, dateLike) { ++ return calendar.monthsInYear(dateLike); ++ } ++ function CalendarInLeapYear(calendar, dateLike) { ++ return calendar.inLeapYear(dateLike); ++ } ++ function ToTemporalCalendar(calendarLikeParam) { ++ var calendarLike = calendarLikeParam; ++ ++ if (IsObject(calendarLike)) { ++ if (HasSlot(calendarLike, CALENDAR)) return GetSlot(calendarLike, CALENDAR); ++ if (!('calendar' in calendarLike)) return calendarLike; ++ calendarLike = calendarLike.calendar; ++ if (IsObject(calendarLike) && !('calendar' in calendarLike)) return calendarLike; ++ } ++ ++ var identifier = ToString(calendarLike); ++ var TemporalCalendar = GetIntrinsic('%Temporal.Calendar%'); ++ if (IsBuiltinCalendar(identifier)) return new TemporalCalendar(identifier); ++ var calendar; ++ ++ try { ++ var _ParseISODateTime5 = ParseISODateTime(identifier); ++ ++ calendar = _ParseISODateTime5.calendar; ++ } catch (_unused6) { ++ throw new RangeError("Invalid calendar: ".concat(identifier)); ++ } ++ ++ if (!calendar) calendar = 'iso8601'; ++ return new TemporalCalendar(calendar); ++ } ++ ++ function GetTemporalCalendarWithISODefault(item) { ++ if (HasSlot(item, CALENDAR)) return GetSlot(item, CALENDAR); ++ var calendar = item.calendar; ++ if (calendar === undefined) return GetISO8601Calendar(); ++ return ToTemporalCalendar(calendar); ++ } ++ ++ function CalendarEquals(one, two) { ++ if (one === two) return true; ++ var cal1 = ToString(one); ++ var cal2 = ToString(two); ++ return cal1 === cal2; ++ } ++ function ConsolidateCalendars(one, two) { ++ if (one === two) return two; ++ var sOne = ToString(one); ++ var sTwo = ToString(two); ++ ++ if (sOne === sTwo || sOne === 'iso8601') { ++ return two; ++ } else if (sTwo === 'iso8601') { ++ return one; ++ } else { ++ throw new RangeError('irreconcilable calendars'); ++ } ++ } ++ function CalendarDateFromFields(calendar, fields, options) { ++ var result = calendar.dateFromFields(fields, options); ++ if (!IsTemporalDate(result)) throw new TypeError('invalid result'); ++ return result; ++ } ++ function CalendarYearMonthFromFields(calendar, fields, options) { ++ var result = calendar.yearMonthFromFields(fields, options); ++ if (!IsTemporalYearMonth(result)) throw new TypeError('invalid result'); ++ return result; ++ } ++ function CalendarMonthDayFromFields(calendar, fields, options) { ++ var result = calendar.monthDayFromFields(fields, options); ++ if (!IsTemporalMonthDay(result)) throw new TypeError('invalid result'); ++ return result; ++ } ++ function ToTemporalTimeZone(temporalTimeZoneLikeParam) { ++ var temporalTimeZoneLike = temporalTimeZoneLikeParam; ++ ++ if (IsObject(temporalTimeZoneLike)) { ++ if (IsTemporalZonedDateTime(temporalTimeZoneLike)) return GetSlot(temporalTimeZoneLike, TIME_ZONE); ++ if (!('timeZone' in temporalTimeZoneLike)) return temporalTimeZoneLike; ++ temporalTimeZoneLike = temporalTimeZoneLike.timeZone; ++ ++ if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) { ++ return temporalTimeZoneLike; ++ } ++ } ++ ++ var identifier = ToString(temporalTimeZoneLike); ++ var timeZone = ParseTemporalTimeZone(identifier); ++ var TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ return new TemporalTimeZone(timeZone); ++ } ++ function TimeZoneEquals(one, two) { ++ if (one === two) return true; ++ var tz1 = ToString(one); ++ var tz2 = ToString(two); ++ return tz1 === tz2; ++ } ++ function TemporalDateTimeToDate(dateTime) { ++ return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR)); ++ } ++ function TemporalDateTimeToTime(dateTime) { ++ var Time = GetIntrinsic('%Temporal.PlainTime%'); ++ return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ } ++ function GetOffsetNanosecondsFor(timeZone, instant) { ++ var getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor; ++ ++ if (typeof getOffsetNanosecondsFor !== 'function') { ++ throw new TypeError('getOffsetNanosecondsFor not callable'); ++ } ++ ++ var offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]); ++ ++ if (typeof offsetNs !== 'number') { ++ throw new TypeError('bad return from getOffsetNanosecondsFor'); ++ } ++ ++ if (!IsInteger(offsetNs) || MathAbs$1(offsetNs) > 86400e9) { ++ throw new RangeError('out-of-range return from getOffsetNanosecondsFor'); ++ } ++ ++ return offsetNs; ++ } ++ function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) { ++ var offsetNs = GetOffsetNanosecondsFor(timeZone, instant); ++ return FormatTimeZoneOffsetString(offsetNs); ++ } ++ function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) { ++ var ns = GetSlot(instant, EPOCHNANOSECONDS); ++ var offsetNs = GetOffsetNanosecondsFor(timeZone, instant); ++ ++ var _GetISOPartsFromEpoch = GetISOPartsFromEpoch(ns), ++ year = _GetISOPartsFromEpoch.year, ++ month = _GetISOPartsFromEpoch.month, ++ day = _GetISOPartsFromEpoch.day, ++ hour = _GetISOPartsFromEpoch.hour, ++ minute = _GetISOPartsFromEpoch.minute, ++ second = _GetISOPartsFromEpoch.second, ++ millisecond = _GetISOPartsFromEpoch.millisecond, ++ microsecond = _GetISOPartsFromEpoch.microsecond, ++ nanosecond = _GetISOPartsFromEpoch.nanosecond; ++ ++ var _BalanceISODateTime2 = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs); ++ ++ year = _BalanceISODateTime2.year; ++ month = _BalanceISODateTime2.month; ++ day = _BalanceISODateTime2.day; ++ hour = _BalanceISODateTime2.hour; ++ minute = _BalanceISODateTime2.minute; ++ second = _BalanceISODateTime2.second; ++ millisecond = _BalanceISODateTime2.millisecond; ++ microsecond = _BalanceISODateTime2.microsecond; ++ nanosecond = _BalanceISODateTime2.nanosecond; ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) { ++ var possibleInstants = GetPossibleInstantsFor(timeZone, dateTime); ++ return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation); ++ } ++ ++ function DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) { ++ var Instant = GetIntrinsic('%Temporal.Instant%'); ++ var numInstants = possibleInstants.length; ++ if (numInstants === 1) return possibleInstants[0]; ++ ++ if (numInstants) { ++ switch (disambiguation) { ++ case 'compatible': // fall through because 'compatible' means 'earlier' for "fall back" transitions ++ ++ case 'earlier': ++ return possibleInstants[0]; ++ ++ case 'later': ++ return possibleInstants[numInstants - 1]; ++ ++ case 'reject': ++ { ++ throw new RangeError('multiple instants found'); ++ } ++ } ++ } ++ ++ var year = GetSlot(dateTime, ISO_YEAR); ++ var month = GetSlot(dateTime, ISO_MONTH); ++ var day = GetSlot(dateTime, ISO_DAY); ++ var hour = GetSlot(dateTime, ISO_HOUR); ++ var minute = GetSlot(dateTime, ISO_MINUTE); ++ var second = GetSlot(dateTime, ISO_SECOND); ++ var millisecond = GetSlot(dateTime, ISO_MILLISECOND); ++ var microsecond = GetSlot(dateTime, ISO_MICROSECOND); ++ var nanosecond = GetSlot(dateTime, ISO_NANOSECOND); ++ var utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (utcns === null) throw new RangeError('DateTime outside of supported range'); ++ var dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS)); ++ var dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS)); ++ var offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore); ++ var offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter); ++ var nanoseconds = offsetAfter - offsetBefore; ++ ++ switch (disambiguation) { ++ case 'earlier': ++ { ++ var calendar = GetSlot(dateTime, CALENDAR); ++ var PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined); ++ var earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar); ++ return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0]; ++ } ++ ++ case 'compatible': // fall through because 'compatible' means 'later' for "spring forward" transitions ++ ++ case 'later': ++ { ++ var _calendar4 = GetSlot(dateTime, CALENDAR); ++ ++ var _PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ ++ var later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, _calendar4, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined); ++ var laterPlainDateTime = new _PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, _calendar4); ++ var possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime); ++ return possible[possible.length - 1]; ++ } ++ ++ case 'reject': ++ { ++ throw new RangeError('no such instant found'); ++ } ++ } ++ } ++ ++ function GetPossibleInstantsFor(timeZone, dateTime) { ++ var possibleInstants = timeZone.getPossibleInstantsFor(dateTime); ++ var result = []; ++ ++ var _iterator8 = _createForOfIteratorHelper(possibleInstants), ++ _step8; ++ ++ try { ++ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { ++ var instant = _step8.value; ++ ++ if (!IsTemporalInstant(instant)) { ++ throw new TypeError('bad return from getPossibleInstantsFor'); ++ } ++ ++ ArrayPrototypePush$1.call(result, instant); ++ } ++ } catch (err) { ++ _iterator8.e(err); ++ } finally { ++ _iterator8.f(); ++ } ++ ++ return result; ++ } ++ ++ function ISOYearString(year) { ++ var yearString; ++ ++ if (year < 0 || year > 9999) { ++ var sign = year < 0 ? '-' : '+'; ++ var yearNumber = MathAbs$1(year); ++ yearString = sign + "000000".concat(yearNumber).slice(-6); ++ } else { ++ yearString = "0000".concat(year).slice(-4); ++ } ++ ++ return yearString; ++ } ++ function ISODateTimePartString(part) { ++ return "00".concat(part).slice(-2); ++ } ++ function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) { ++ if (precision === 'minute') return ''; ++ var secs = ":".concat(ISODateTimePartString(second)); ++ var fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond; ++ var fraction; ++ ++ if (precision === 'auto') { ++ if (fractionNumber === 0) return secs; ++ fraction = "".concat(fractionNumber).padStart(9, '0'); ++ ++ while (fraction[fraction.length - 1] === '0') { ++ fraction = fraction.slice(0, -1); ++ } ++ } else { ++ if (precision === 0) return secs; ++ fraction = "".concat(fractionNumber).padStart(9, '0').slice(0, precision); ++ } ++ ++ return "".concat(secs, ".").concat(fraction); ++ } ++ function TemporalInstantToString(instant, timeZone, precision) { ++ var outputTimeZone = timeZone; ++ ++ if (outputTimeZone === undefined) { ++ var TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ outputTimeZone = new TemporalTimeZone('UTC'); ++ } ++ ++ var iso = GetISO8601Calendar(); ++ var dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso); ++ var year = ISOYearString(GetSlot(dateTime, ISO_YEAR)); ++ var month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH)); ++ var day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY)); ++ var hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR)); ++ var minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE)); ++ var seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision); ++ var timeZoneString = 'Z'; ++ ++ if (timeZone !== undefined) { ++ var offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant); ++ timeZoneString = FormatISOTimeZoneOffsetString(offsetNs); ++ } ++ ++ return "".concat(year, "-").concat(month, "-").concat(day, "T").concat(hour, ":").concat(minute).concat(seconds).concat(timeZoneString); ++ } ++ function TemporalDurationToString(duration) { ++ var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto'; ++ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; ++ ++ function formatNumber(num) { ++ if (num <= NumberMaxSafeInteger) return num.toString(10); ++ return JSBI.BigInt(num).toString(10); ++ } ++ ++ var years = GetSlot(duration, YEARS); ++ var months = GetSlot(duration, MONTHS); ++ var weeks = GetSlot(duration, WEEKS); ++ var days = GetSlot(duration, DAYS); ++ var hours = GetSlot(duration, HOURS); ++ var minutes = GetSlot(duration, MINUTES); ++ var seconds = GetSlot(duration, SECONDS); ++ var ms = GetSlot(duration, MILLISECONDS); ++ var µs = GetSlot(duration, MICROSECONDS); ++ var ns = GetSlot(duration, NANOSECONDS); ++ var sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns); ++ ++ if (options) { ++ var unit = options.unit, ++ increment = options.increment, ++ roundingMode = options.roundingMode; ++ ++ var _RoundDuration = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode); ++ ++ seconds = _RoundDuration.seconds; ++ ms = _RoundDuration.milliseconds; ++ µs = _RoundDuration.microseconds; ++ ns = _RoundDuration.nanoseconds; ++ } ++ ++ var dateParts = []; ++ if (years) dateParts.push("".concat(formatNumber(MathAbs$1(years)), "Y")); ++ if (months) dateParts.push("".concat(formatNumber(MathAbs$1(months)), "M")); ++ if (weeks) dateParts.push("".concat(formatNumber(MathAbs$1(weeks)), "W")); ++ if (days) dateParts.push("".concat(formatNumber(MathAbs$1(days)), "D")); ++ var timeParts = []; ++ if (hours) timeParts.push("".concat(formatNumber(MathAbs$1(hours)), "H")); ++ if (minutes) timeParts.push("".concat(formatNumber(MathAbs$1(minutes)), "M")); ++ var secondParts = []; ++ var total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0); ++ var nsBigInt, µsBigInt, msBigInt, secondsBigInt; ++ ++ var _divmod = divmod(total, THOUSAND); ++ ++ total = _divmod.quotient; ++ nsBigInt = _divmod.remainder; ++ ++ var _divmod2 = divmod(total, THOUSAND); ++ ++ total = _divmod2.quotient; ++ µsBigInt = _divmod2.remainder; ++ ++ var _divmod3 = divmod(total, THOUSAND); ++ ++ secondsBigInt = _divmod3.quotient; ++ msBigInt = _divmod3.remainder; ++ var fraction = MathAbs$1(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs$1(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs$1(JSBI.toNumber(nsBigInt)); ++ var decimalPart; ++ ++ if (precision === 'auto') { ++ if (fraction !== 0) { ++ decimalPart = "".concat(fraction).padStart(9, '0'); ++ ++ while (decimalPart[decimalPart.length - 1] === '0') { ++ decimalPart = decimalPart.slice(0, -1); ++ } ++ } ++ } else if (precision !== 0) { ++ decimalPart = "".concat(fraction).padStart(9, '0').slice(0, precision); ++ } ++ ++ if (decimalPart) secondParts.unshift('.', decimalPart); ++ ++ if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') { ++ secondParts.unshift(abs(secondsBigInt).toString()); ++ } ++ ++ if (secondParts.length) timeParts.push("".concat(secondParts.join(''), "S")); ++ if (timeParts.length) timeParts.unshift('T'); ++ if (!dateParts.length && !timeParts.length) return 'PT0S'; ++ return "".concat(sign < 0 ? '-' : '', "P").concat(dateParts.join('')).concat(timeParts.join('')); ++ } ++ function TemporalDateToString(date) { ++ var showCalendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto'; ++ var year = ISOYearString(GetSlot(date, ISO_YEAR)); ++ var month = ISODateTimePartString(GetSlot(date, ISO_MONTH)); ++ var day = ISODateTimePartString(GetSlot(date, ISO_DAY)); ++ var calendarID = ToString(GetSlot(date, CALENDAR)); ++ var calendar = FormatCalendarAnnotation(calendarID, showCalendar); ++ return "".concat(year, "-").concat(month, "-").concat(day).concat(calendar); ++ } ++ function TemporalDateTimeToString(dateTime, precision) { ++ var showCalendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'auto'; ++ var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined; ++ var year = GetSlot(dateTime, ISO_YEAR); ++ var month = GetSlot(dateTime, ISO_MONTH); ++ var day = GetSlot(dateTime, ISO_DAY); ++ var hour = GetSlot(dateTime, ISO_HOUR); ++ var minute = GetSlot(dateTime, ISO_MINUTE); ++ var second = GetSlot(dateTime, ISO_SECOND); ++ var millisecond = GetSlot(dateTime, ISO_MILLISECOND); ++ var microsecond = GetSlot(dateTime, ISO_MICROSECOND); ++ var nanosecond = GetSlot(dateTime, ISO_NANOSECOND); ++ ++ if (options) { ++ var unit = options.unit, ++ increment = options.increment, ++ roundingMode = options.roundingMode; ++ ++ var _RoundISODateTime = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode); ++ ++ year = _RoundISODateTime.year; ++ month = _RoundISODateTime.month; ++ day = _RoundISODateTime.day; ++ hour = _RoundISODateTime.hour; ++ minute = _RoundISODateTime.minute; ++ second = _RoundISODateTime.second; ++ millisecond = _RoundISODateTime.millisecond; ++ microsecond = _RoundISODateTime.microsecond; ++ nanosecond = _RoundISODateTime.nanosecond; ++ } ++ ++ var yearString = ISOYearString(year); ++ var monthString = ISODateTimePartString(month); ++ var dayString = ISODateTimePartString(day); ++ var hourString = ISODateTimePartString(hour); ++ var minuteString = ISODateTimePartString(minute); ++ var secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision); ++ var calendarID = ToString(GetSlot(dateTime, CALENDAR)); ++ var calendar = FormatCalendarAnnotation(calendarID, showCalendar); ++ return "".concat(yearString, "-").concat(monthString, "-").concat(dayString, "T").concat(hourString, ":").concat(minuteString).concat(secondsString).concat(calendar); ++ } ++ function TemporalMonthDayToString(monthDay) { ++ var showCalendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto'; ++ var month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH)); ++ var day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY)); ++ var resultString = "".concat(month, "-").concat(day); ++ var calendar = GetSlot(monthDay, CALENDAR); ++ var calendarID = ToString(calendar); ++ ++ if (showCalendar === 'always' || calendarID !== 'iso8601') { ++ var year = ISOYearString(GetSlot(monthDay, ISO_YEAR)); ++ resultString = "".concat(year, "-").concat(resultString); ++ } ++ ++ var calendarString = FormatCalendarAnnotation(calendarID, showCalendar); ++ if (calendarString) resultString += calendarString; ++ return resultString; ++ } ++ function TemporalYearMonthToString(yearMonth) { ++ var showCalendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto'; ++ var year = ISOYearString(GetSlot(yearMonth, ISO_YEAR)); ++ var month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH)); ++ var resultString = "".concat(year, "-").concat(month); ++ var calendar = GetSlot(yearMonth, CALENDAR); ++ var calendarID = ToString(calendar); ++ ++ if (showCalendar === 'always' || calendarID !== 'iso8601') { ++ var day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY)); ++ resultString += "-".concat(day); ++ } ++ ++ var calendarString = FormatCalendarAnnotation(calendarID, showCalendar); ++ if (calendarString) resultString += calendarString; ++ return resultString; ++ } ++ function TemporalZonedDateTimeToString(zdt, precision) { ++ var showCalendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'auto'; ++ var showTimeZone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'auto'; ++ var showOffset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'auto'; ++ var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined; ++ var instant = GetSlot(zdt, INSTANT); ++ ++ if (options) { ++ var unit = options.unit, ++ increment = options.increment, ++ roundingMode = options.roundingMode; ++ var ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode); ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ instant = new TemporalInstant(ns); ++ } ++ ++ var tz = GetSlot(zdt, TIME_ZONE); ++ var iso = GetISO8601Calendar(); ++ var dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso); ++ var year = ISOYearString(GetSlot(dateTime, ISO_YEAR)); ++ var month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH)); ++ var day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY)); ++ var hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR)); ++ var minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE)); ++ var seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision); ++ var result = "".concat(year, "-").concat(month, "-").concat(day, "T").concat(hour, ":").concat(minute).concat(seconds); ++ ++ if (showOffset !== 'never') { ++ var offsetNs = GetOffsetNanosecondsFor(tz, instant); ++ result += FormatISOTimeZoneOffsetString(offsetNs); ++ } ++ ++ if (showTimeZone !== 'never') result += "[".concat(tz, "]"); ++ var calendarID = ToString(GetSlot(zdt, CALENDAR)); ++ result += FormatCalendarAnnotation(calendarID, showCalendar); ++ return result; ++ } ++ function TestTimeZoneOffsetString(string) { ++ return OFFSET.test(StringCtor(string)); ++ } ++ function ParseTimeZoneOffsetString(string) { ++ var match = OFFSET.exec(StringCtor(string)); ++ ++ if (!match) { ++ throw new RangeError("invalid time zone offset: ".concat(string)); ++ } ++ ++ var sign = match[1] === '-' || match[1] === "\u2212" ? -1 : +1; ++ var hours = +match[2]; ++ var minutes = +(match[3] || 0); ++ var seconds = +(match[4] || 0); ++ var nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9); ++ return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds); ++ } ++ function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) { ++ if (TestTimeZoneOffsetString(timeZoneIdentifier)) { ++ var offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier); ++ return FormatTimeZoneOffsetString(offsetNs); ++ } ++ ++ var formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier)); ++ return formatter.resolvedOptions().timeZone; ++ } ++ function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) { ++ var _GetIANATimeZoneDateT = GetIANATimeZoneDateTimeParts(epochNanoseconds, id), ++ year = _GetIANATimeZoneDateT.year, ++ month = _GetIANATimeZoneDateT.month, ++ day = _GetIANATimeZoneDateT.day, ++ hour = _GetIANATimeZoneDateT.hour, ++ minute = _GetIANATimeZoneDateT.minute, ++ second = _GetIANATimeZoneDateT.second, ++ millisecond = _GetIANATimeZoneDateT.millisecond, ++ microsecond = _GetIANATimeZoneDateT.microsecond, ++ nanosecond = _GetIANATimeZoneDateT.nanosecond; ++ ++ var utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (utc === null) throw new RangeError('Date outside of supported range'); ++ return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds)); ++ } ++ ++ function FormatTimeZoneOffsetString(offsetNanosecondsParam) { ++ var sign = offsetNanosecondsParam < 0 ? '-' : '+'; ++ var offsetNanoseconds = MathAbs$1(offsetNanosecondsParam); ++ var nanoseconds = offsetNanoseconds % 1e9; ++ var seconds = MathFloor$1(offsetNanoseconds / 1e9) % 60; ++ var minutes = MathFloor$1(offsetNanoseconds / 60e9) % 60; ++ var hours = MathFloor$1(offsetNanoseconds / 3600e9); ++ var hourString = ISODateTimePartString(hours); ++ var minuteString = ISODateTimePartString(minutes); ++ var secondString = ISODateTimePartString(seconds); ++ var post = ''; ++ ++ if (nanoseconds) { ++ var fraction = "".concat(nanoseconds).padStart(9, '0'); ++ ++ while (fraction[fraction.length - 1] === '0') { ++ fraction = fraction.slice(0, -1); ++ } ++ ++ post = ":".concat(secondString, ".").concat(fraction); ++ } else if (seconds) { ++ post = ":".concat(secondString); ++ } ++ ++ return "".concat(sign).concat(hourString, ":").concat(minuteString).concat(post); ++ } ++ ++ function FormatISOTimeZoneOffsetString(offsetNanosecondsParam) { ++ var offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand')); ++ var sign = offsetNanoseconds < 0 ? '-' : '+'; ++ offsetNanoseconds = MathAbs$1(offsetNanoseconds); ++ var minutes = offsetNanoseconds / 60e9 % 60; ++ var hours = MathFloor$1(offsetNanoseconds / 3600e9); ++ var hourString = ISODateTimePartString(hours); ++ var minuteString = ISODateTimePartString(minutes); ++ return "".concat(sign).concat(hourString, ":").concat(minuteString); ++ } ++ ++ function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ // Note: Date.UTC() interprets one and two-digit years as being in the ++ // 20th century, so don't use it ++ var legacyDate = new Date(); ++ legacyDate.setUTCHours(hour, minute, second, millisecond); ++ legacyDate.setUTCFullYear(year, month - 1, day); ++ var ms = legacyDate.getTime(); ++ if (NumberIsNaN(ms)) return null; ++ var ns = JSBI.multiply(JSBI.BigInt(ms), MILLION); ++ ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND)); ++ ns = JSBI.add(ns, JSBI.BigInt(nanosecond)); ++ if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX)) return null; ++ return ns; ++ } ++ ++ function GetISOPartsFromEpoch(epochNanoseconds) { ++ var _divmod4 = divmod(epochNanoseconds, MILLION), ++ quotient = _divmod4.quotient, ++ remainder = _divmod4.remainder; ++ ++ var epochMilliseconds = JSBI.toNumber(quotient); ++ var nanos = JSBI.toNumber(remainder); ++ ++ if (nanos < 0) { ++ nanos += 1e6; ++ epochMilliseconds -= 1; ++ } ++ ++ var microsecond = MathFloor$1(nanos / 1e3) % 1e3; ++ var nanosecond = nanos % 1e3; ++ var item = new Date(epochMilliseconds); ++ var year = item.getUTCFullYear(); ++ var month = item.getUTCMonth() + 1; ++ var day = item.getUTCDate(); ++ var hour = item.getUTCHours(); ++ var minute = item.getUTCMinutes(); ++ var second = item.getUTCSeconds(); ++ var millisecond = item.getUTCMilliseconds(); ++ return { ++ epochMilliseconds: epochMilliseconds, ++ year: year, ++ month: month, ++ day: day, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } // ts-prune-ignore-next TODO: remove this after tests are converted to TS ++ ++ ++ function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) { ++ var _GetISOPartsFromEpoch2 = GetISOPartsFromEpoch(epochNanoseconds), ++ epochMilliseconds = _GetISOPartsFromEpoch2.epochMilliseconds, ++ millisecond = _GetISOPartsFromEpoch2.millisecond, ++ microsecond = _GetISOPartsFromEpoch2.microsecond, ++ nanosecond = _GetISOPartsFromEpoch2.nanosecond; ++ ++ var _GetFormatterParts = GetFormatterParts(id, epochMilliseconds), ++ year = _GetFormatterParts.year, ++ month = _GetFormatterParts.month, ++ day = _GetFormatterParts.day, ++ hour = _GetFormatterParts.hour, ++ minute = _GetFormatterParts.minute, ++ second = _GetFormatterParts.second; ++ ++ return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ ++ function maxJSBI(one, two) { ++ return JSBI.lessThan(one, two) ? two : one; ++ } ++ /** ++ * Our best guess at how far in advance new rules will be put into the TZDB for ++ * future offset transitions. We'll pick 10 years but can always revise it if ++ * we find that countries are being unusually proactive in their announcing ++ * of offset changes. ++ */ ++ ++ ++ function afterLatestPossibleTzdbRuleChange() { ++ return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS); ++ } ++ ++ function GetIANATimeZoneNextTransition(epochNanoseconds, id) { ++ // Decide how far in the future after `epochNanoseconds` we'll look for an ++ // offset change. There are two cases: ++ // 1. If it's a past date (or a date in the near future) then it's possible ++ // that the time zone may have newly added DST in the next few years. So ++ // we'll have to look from the provided time until a few years after the ++ // current system time. (Changes to DST policy are usually announced a few ++ // years in the future.) Note that the first DST anywhere started in 1847, ++ // so we'll start checks in 1847 instead of wasting cycles on years where ++ // there will never be transitions. ++ // 2. If it's a future date beyond the next few years, then we'll just assume ++ // that the latest DST policy in TZDB will still be in effect. In this ++ // case, we only need to look one year in the future to see if there are ++ // any DST transitions. We actually only need to look 9-10 months because ++ // DST has two transitions per year, but we'll use a year just to be safe. ++ var oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS); ++ var uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater); // The first transition (in any timezone) recorded in the TZDB was in 1847, so ++ // start there if an earlier date is supplied. ++ ++ var leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds); ++ var leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id); ++ var rightNanos = leftNanos; ++ var rightOffsetNs = leftOffsetNs; ++ ++ while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) { ++ rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS); ++ rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id); ++ ++ if (leftOffsetNs === rightOffsetNs) { ++ leftNanos = rightNanos; ++ } ++ } ++ ++ if (leftOffsetNs === rightOffsetNs) return null; ++ var result = bisect(function (epochNs) { ++ return GetIANATimeZoneOffsetNanoseconds(epochNs, id); ++ }, leftNanos, rightNanos, leftOffsetNs, rightOffsetNs); ++ return result; ++ } ++ function GetIANATimeZonePreviousTransition(epochNanoseconds, id) { ++ // If a time zone uses DST (at the time of `epochNanoseconds`), then we only ++ // have to look back one year to find a transition. But if it doesn't use DST, ++ // then we need to look all the way back to 1847 (the earliest rule in the ++ // TZDB) to see if it had other offset transitions in the past. Looping back ++ // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is ++ // also unnecessary because DST rules aren't put into the TZDB more than a few ++ // years in the future because the political changes in time zones happen with ++ // only a few years' warning. Therefore, if a far-future date is provided, ++ // then we'll run the check in two parts: ++ // 1. First, we'll look back for up to one year to see if the latest TZDB ++ // rules have DST. ++ // 2. If not, then we'll "fast-reverse" back to a few years later than the ++ // current system time, and then look back to 1847. This reduces the ++ // worst-case loop from 273K years to 175 years, for a ~1500x improvement ++ // in worst-case perf. ++ var afterLatestRule = afterLatestPossibleTzdbRuleChange(); ++ var isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule); ++ var lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION; ++ var rightNanos = JSBI.subtract(epochNanoseconds, ONE); ++ var rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id); ++ var leftNanos = rightNanos; ++ var leftOffsetNs = rightOffsetNs; ++ ++ while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) { ++ leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS); ++ leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id); ++ ++ if (rightOffsetNs === leftOffsetNs) { ++ rightNanos = leftNanos; ++ } ++ } ++ ++ if (rightOffsetNs === leftOffsetNs) { ++ if (isFarFuture) { ++ // There was no DST after looking back one year, which means that the most ++ // recent TZDB rules don't have any recurring transitions. To check for ++ // transitions in older rules, back up to a few years after the current ++ // date and then look all the way back to 1847. Note that we move back one ++ // day from the latest possible rule so that when the recursion runs it ++ // won't consider the new time to be "far future" because the system clock ++ // has advanced in the meantime. ++ var newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS); ++ return GetIANATimeZonePreviousTransition(newTimeToCheck, id); ++ } ++ ++ return null; ++ } ++ ++ var result = bisect(function (epochNs) { ++ return GetIANATimeZoneOffsetNanoseconds(epochNs, id); ++ }, leftNanos, rightNanos, leftOffsetNs, rightOffsetNs); ++ return result; ++ } // ts-prune-ignore-next TODO: remove this after tests are converted to TS ++ ++ function parseFromEnUsFormat(datetime) { ++ var parts = datetime.split(/[^\w]+/); ++ ++ if (parts.length !== 7) { ++ throw new RangeError("expected 7 parts in \"".concat(datetime)); ++ } ++ ++ var month = +parts[0]; ++ var day = +parts[1]; ++ var year = +parts[2]; ++ var era = parts[3].toUpperCase(); ++ ++ if (era === 'B' || era === 'BC') { ++ year = -year + 1; ++ } else if (era !== 'A' && era !== 'AD') { ++ throw new RangeError("Unknown era ".concat(era, " in \"").concat(datetime)); ++ } ++ ++ var hour = +parts[4]; ++ ++ if (hour === 24) { ++ // bugs.chromium.org/p/chromium/issues/detail?id=1045791 ++ hour = 0; ++ } ++ ++ var minute = +parts[5]; ++ var second = +parts[6]; ++ ++ if (!NumberIsFinite(year) || !NumberIsFinite(month) || !NumberIsFinite(day) || !NumberIsFinite(hour) || !NumberIsFinite(minute) || !NumberIsFinite(second)) { ++ throw new RangeError("Invalid number in \"".concat(datetime)); ++ } ++ ++ return { ++ year: year, ++ month: month, ++ day: day, ++ hour: hour, ++ minute: minute, ++ second: second ++ }; ++ } // ts-prune-ignore-next TODO: remove this after tests are converted to TS ++ ++ function GetFormatterParts(timeZone, epochMilliseconds) { ++ var formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone); // Using `format` instead of `formatToParts` for compatibility with older clients ++ ++ var datetime = formatter.format(new Date(epochMilliseconds)); ++ return parseFromEnUsFormat(datetime); ++ } ++ function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ var ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond); ++ if (ns === null) throw new RangeError('DateTime outside of supported range'); ++ var nsEarlier = JSBI.subtract(ns, DAY_NANOS); ++ if (JSBI.lessThan(nsEarlier, NS_MIN)) nsEarlier = ns; ++ var nsLater = JSBI.add(ns, DAY_NANOS); ++ if (JSBI.greaterThan(nsLater, NS_MAX)) nsLater = ns; ++ var earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id); ++ var latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id); ++ var found = earliest === latest ? [earliest] : [earliest, latest]; ++ return found.map(function (offsetNanoseconds) { ++ var epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds)); ++ var parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id); ++ ++ if (year !== parts.year || month !== parts.month || day !== parts.day || hour !== parts.hour || minute !== parts.minute || second !== parts.second || millisecond !== parts.millisecond || microsecond !== parts.microsecond || nanosecond !== parts.nanosecond) { ++ return undefined; ++ } ++ ++ return epochNanoseconds; ++ }).filter(function (x) { ++ return x !== undefined; ++ }); ++ } ++ function LeapYear(year) { ++ if (undefined === year) return false; ++ var isDiv4 = year % 4 === 0; ++ var isDiv100 = year % 100 === 0; ++ var isDiv400 = year % 400 === 0; ++ return isDiv4 && (!isDiv100 || isDiv400); ++ } ++ function ISODaysInMonth(year, month) { ++ var DoM = { ++ standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], ++ leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ++ }; ++ return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1]; ++ } ++ function DayOfWeek(year, month, day) { ++ var m = month + (month < 3 ? 10 : -2); ++ var Y = year - (month < 3 ? 1 : 0); ++ var c = MathFloor$1(Y / 100); ++ var y = Y - c * 100; ++ var d = day; ++ var pD = d; ++ var pM = MathFloor$1(2.6 * m - 0.2); ++ var pY = y + MathFloor$1(y / 4); ++ var pC = MathFloor$1(c / 4) - 2 * c; ++ var dow = (pD + pM + pY + pC) % 7; ++ return dow + (dow <= 0 ? 7 : 0); ++ } ++ function DayOfYear(year, month, day) { ++ var days = day; ++ ++ for (var m = month - 1; m > 0; m--) { ++ days += ISODaysInMonth(year, m); ++ } ++ ++ return days; ++ } ++ function WeekOfYear(year, month, day) { ++ var doy = DayOfYear(year, month, day); ++ var dow = DayOfWeek(year, month, day) || 7; ++ var doj = DayOfWeek(year, 1, 1); ++ var week = MathFloor$1((doy - dow + 10) / 7); ++ ++ if (week < 1) { ++ if (doj === 5 || doj === 6 && LeapYear(year - 1)) { ++ return 53; ++ } else { ++ return 52; ++ } ++ } ++ ++ if (week === 53) { ++ if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) { ++ return 1; ++ } ++ } ++ ++ return week; ++ } ++ function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) { ++ for (var _i4 = 0, _arr2 = [y, mon, w, d, h, min, s, ms, µs, ns]; _i4 < _arr2.length; _i4++) { ++ var prop = _arr2[_i4]; ++ if (prop !== 0) return prop < 0 ? -1 : 1; ++ } ++ ++ return 0; ++ } ++ ++ function BalanceISOYearMonth(yearParam, monthParam) { ++ var year = yearParam; ++ var month = monthParam; ++ if (!NumberIsFinite(year) || !NumberIsFinite(month)) throw new RangeError('infinity is out of range'); ++ month -= 1; ++ year += MathFloor$1(month / 12); ++ month %= 12; ++ if (month < 0) month += 12; ++ month += 1; ++ return { ++ year: year, ++ month: month ++ }; ++ } ++ ++ function BalanceISODate(yearParam, monthParam, dayParam) { ++ var year = yearParam; ++ var month = monthParam; ++ var day = dayParam; ++ if (!NumberIsFinite(day)) throw new RangeError('infinity is out of range'); ++ ++ var _BalanceISOYearMonth = BalanceISOYearMonth(year, month); ++ ++ year = _BalanceISOYearMonth.year; ++ month = _BalanceISOYearMonth.month; ++ var daysInYear = 0; ++ var testYear = month > 2 ? year : year - 1; ++ ++ while (daysInYear = LeapYear(testYear) ? 366 : 365, day < -daysInYear) { ++ year -= 1; ++ testYear -= 1; ++ day += daysInYear; ++ } ++ ++ testYear += 1; ++ ++ while (daysInYear = LeapYear(testYear) ? 366 : 365, day > daysInYear) { ++ year += 1; ++ testYear += 1; ++ day -= daysInYear; ++ } ++ ++ while (day < 1) { ++ var _BalanceISOYearMonth2 = BalanceISOYearMonth(year, month - 1); ++ ++ year = _BalanceISOYearMonth2.year; ++ month = _BalanceISOYearMonth2.month; ++ day += ISODaysInMonth(year, month); ++ } ++ ++ while (day > ISODaysInMonth(year, month)) { ++ day -= ISODaysInMonth(year, month); ++ ++ var _BalanceISOYearMonth3 = BalanceISOYearMonth(year, month + 1); ++ ++ year = _BalanceISOYearMonth3.year; ++ month = _BalanceISOYearMonth3.month; ++ } ++ ++ return { ++ year: year, ++ month: month, ++ day: day ++ }; ++ } ++ ++ function BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ var _BalanceTime = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam), ++ deltaDays = _BalanceTime.deltaDays, ++ hour = _BalanceTime.hour, ++ minute = _BalanceTime.minute, ++ second = _BalanceTime.second, ++ millisecond = _BalanceTime.millisecond, ++ microsecond = _BalanceTime.microsecond, ++ nanosecond = _BalanceTime.nanosecond; ++ ++ var _BalanceISODate = BalanceISODate(yearParam, monthParam, dayParam + deltaDays), ++ year = _BalanceISODate.year, ++ month = _BalanceISODate.month, ++ day = _BalanceISODate.day; ++ ++ return { ++ year: year, ++ month: month, ++ day: day, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ ++ function BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ var hour = hourParam; ++ var minute = minuteParam; ++ var second = secondParam; ++ var millisecond = millisecondParam; ++ var microsecond = microsecondParam; ++ var nanosecond = nanosecondParam; ++ ++ if (!NumberIsFinite(hour) || !NumberIsFinite(minute) || !NumberIsFinite(second) || !NumberIsFinite(millisecond) || !NumberIsFinite(microsecond) || !NumberIsFinite(nanosecond)) { ++ throw new RangeError('infinity is out of range'); ++ } ++ ++ microsecond += MathFloor$1(nanosecond / 1000); ++ nanosecond = NonNegativeModulo(nanosecond, 1000); ++ millisecond += MathFloor$1(microsecond / 1000); ++ microsecond = NonNegativeModulo(microsecond, 1000); ++ second += MathFloor$1(millisecond / 1000); ++ millisecond = NonNegativeModulo(millisecond, 1000); ++ minute += MathFloor$1(second / 60); ++ second = NonNegativeModulo(second, 60); ++ hour += MathFloor$1(minute / 60); ++ minute = NonNegativeModulo(minute, 60); ++ var deltaDays = MathFloor$1(hour / 24); ++ hour = NonNegativeModulo(hour, 24); ++ return { ++ deltaDays: deltaDays, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ ++ function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) { ++ var days = JSBI.BigInt(daysParam); ++ var nanoseconds = JSBI.BigInt(nanosecondsParam); ++ if (daysParam !== 0) nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift)); ++ var hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24))); ++ var minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY)); ++ var seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY)); ++ var milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND)); ++ var microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND)); ++ return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND)); ++ } ++ ++ function NanosecondsToDays(nanosecondsParam, relativeTo) { ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ var sign = MathSign(JSBI.toNumber(nanosecondsParam)); ++ var nanoseconds = JSBI.BigInt(nanosecondsParam); ++ var dayLengthNs = 86400e9; ++ if (sign === 0) return { ++ days: 0, ++ nanoseconds: ZERO, ++ dayLengthNs: dayLengthNs ++ }; ++ ++ if (!IsTemporalZonedDateTime(relativeTo)) { ++ var _days; ++ ++ var _divmod5 = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)); ++ ++ _days = _divmod5.quotient; ++ nanoseconds = _divmod5.remainder; ++ return { ++ days: JSBI.toNumber(_days), ++ nanoseconds: nanoseconds, ++ dayLengthNs: dayLengthNs ++ }; ++ } ++ ++ var startNs = GetSlot(relativeTo, EPOCHNANOSECONDS); ++ var start = GetSlot(relativeTo, INSTANT); ++ var endNs = JSBI.add(startNs, nanoseconds); ++ var end = new TemporalInstant(endNs); ++ var timeZone = GetSlot(relativeTo, TIME_ZONE); ++ var calendar = GetSlot(relativeTo, CALENDAR); // Find the difference in days only. ++ ++ var dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar); ++ var dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar); ++ ++ var _DifferenceISODateTim = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate$2(null)), ++ days = _DifferenceISODateTim.days; ++ ++ var intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0); // may disambiguate ++ // If clock time after addition was in the middle of a skipped period, the ++ // endpoint was disambiguated to a later clock time. So it's possible that ++ // the resulting disambiguated result is later than endNs. If so, then back ++ // up one day and try again. Repeat if necessary (some transitions are ++ // > 24 hours) until either there's zero days left or the date duration is ++ // back inside the period where it belongs. Note that this case only can ++ // happen for positive durations because the only direction that ++ // `disambiguation: 'compatible'` can change clock time is forwards. ++ ++ if (sign === 1) { ++ while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) { ++ --days; ++ intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0); // may do disambiguation ++ } ++ } ++ ++ nanoseconds = JSBI.subtract(endNs, intermediateNs); ++ var isOverflow = false; ++ var relativeInstant = new TemporalInstant(intermediateNs); ++ ++ do { ++ // calculate length of the next day (day that contains the time remainder) ++ var oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0); ++ var relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS); ++ dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs)); ++ isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO); ++ ++ if (isOverflow) { ++ nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)); ++ relativeInstant = new TemporalInstant(oneDayFartherNs); ++ days += sign; ++ } ++ } while (isOverflow); ++ ++ return { ++ days: days, ++ nanoseconds: nanoseconds, ++ dayLengthNs: MathAbs$1(dayLengthNs) ++ }; ++ } ++ ++ function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit) { ++ var relativeTo = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : undefined; ++ var days = daysParam; ++ var nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt; ++ ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ var endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam); ++ var startNs = GetSlot(relativeTo, EPOCHNANOSECONDS); ++ nanosecondsBigInt = JSBI.subtract(endNs, startNs); ++ } else { ++ nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0); ++ } ++ ++ if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') { ++ var _NanosecondsToDays = NanosecondsToDays(nanosecondsBigInt, relativeTo); ++ ++ days = _NanosecondsToDays.days; ++ nanosecondsBigInt = _NanosecondsToDays.nanoseconds; ++ } else { ++ days = 0; ++ } ++ ++ var sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1; ++ nanosecondsBigInt = abs(nanosecondsBigInt); ++ microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO; ++ ++ switch (largestUnit) { ++ case 'year': ++ case 'month': ++ case 'week': ++ case 'day': ++ case 'hour': ++ var _divmod6 = divmod(nanosecondsBigInt, THOUSAND); ++ ++ microsecondsBigInt = _divmod6.quotient; ++ nanosecondsBigInt = _divmod6.remainder; ++ ++ var _divmod7 = divmod(microsecondsBigInt, THOUSAND); ++ ++ millisecondsBigInt = _divmod7.quotient; ++ microsecondsBigInt = _divmod7.remainder; ++ ++ var _divmod8 = divmod(millisecondsBigInt, THOUSAND); ++ ++ secondsBigInt = _divmod8.quotient; ++ millisecondsBigInt = _divmod8.remainder; ++ ++ var _divmod9 = divmod(secondsBigInt, SIXTY); ++ ++ minutesBigInt = _divmod9.quotient; ++ secondsBigInt = _divmod9.remainder; ++ ++ var _divmod10 = divmod(minutesBigInt, SIXTY); ++ ++ hoursBigInt = _divmod10.quotient; ++ minutesBigInt = _divmod10.remainder; ++ break; ++ ++ case 'minute': ++ var _divmod11 = divmod(nanosecondsBigInt, THOUSAND); ++ ++ microsecondsBigInt = _divmod11.quotient; ++ nanosecondsBigInt = _divmod11.remainder; ++ ++ var _divmod12 = divmod(microsecondsBigInt, THOUSAND); ++ ++ millisecondsBigInt = _divmod12.quotient; ++ microsecondsBigInt = _divmod12.remainder; ++ ++ var _divmod13 = divmod(millisecondsBigInt, THOUSAND); ++ ++ secondsBigInt = _divmod13.quotient; ++ millisecondsBigInt = _divmod13.remainder; ++ ++ var _divmod14 = divmod(secondsBigInt, SIXTY); ++ ++ minutesBigInt = _divmod14.quotient; ++ secondsBigInt = _divmod14.remainder; ++ break; ++ ++ case 'second': ++ var _divmod15 = divmod(nanosecondsBigInt, THOUSAND); ++ ++ microsecondsBigInt = _divmod15.quotient; ++ nanosecondsBigInt = _divmod15.remainder; ++ ++ var _divmod16 = divmod(microsecondsBigInt, THOUSAND); ++ ++ millisecondsBigInt = _divmod16.quotient; ++ microsecondsBigInt = _divmod16.remainder; ++ ++ var _divmod17 = divmod(millisecondsBigInt, THOUSAND); ++ ++ secondsBigInt = _divmod17.quotient; ++ millisecondsBigInt = _divmod17.remainder; ++ break; ++ ++ case 'millisecond': ++ var _divmod18 = divmod(nanosecondsBigInt, THOUSAND); ++ ++ microsecondsBigInt = _divmod18.quotient; ++ nanosecondsBigInt = _divmod18.remainder; ++ ++ var _divmod19 = divmod(microsecondsBigInt, THOUSAND); ++ ++ millisecondsBigInt = _divmod19.quotient; ++ microsecondsBigInt = _divmod19.remainder; ++ break; ++ ++ case 'microsecond': ++ var _divmod20 = divmod(nanosecondsBigInt, THOUSAND); ++ ++ microsecondsBigInt = _divmod20.quotient; ++ nanosecondsBigInt = _divmod20.remainder; ++ break; ++ ++ case 'nanosecond': ++ break; ++ ++ default: ++ throw new Error('assert not reached'); ++ } ++ ++ var hours = JSBI.toNumber(hoursBigInt) * sign; ++ var minutes = JSBI.toNumber(minutesBigInt) * sign; ++ var seconds = JSBI.toNumber(secondsBigInt) * sign; ++ var milliseconds = JSBI.toNumber(millisecondsBigInt) * sign; ++ var microseconds = JSBI.toNumber(microsecondsBigInt) * sign; ++ var nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign; ++ return { ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) { ++ var years = yearsParam; ++ var months = monthsParam; ++ var weeks = weeksParam; ++ var days = daysParam; ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ var sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ var calendar; ++ var relativeTo; ++ ++ if (relativeToParam) { ++ relativeTo = ToTemporalDate(relativeToParam); ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ ++ var oneYear = new TemporalDuration(sign); ++ var oneMonth = new TemporalDuration(0, sign); ++ var oneWeek = new TemporalDuration(0, 0, sign); ++ ++ switch (largestUnit) { ++ case 'year': ++ // no-op ++ break; ++ ++ case 'month': ++ { ++ if (!calendar) throw new RangeError('a starting point is required for months balancing'); // balance years down to months ++ ++ var dateAdd = calendar.dateAdd; ++ var dateUntil = calendar.dateUntil; ++ var relativeToDateOnly = relativeTo; ++ ++ while (MathAbs$1(years) > 0) { ++ var newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd); ++ var untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ var untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil); ++ var oneYearMonths = GetSlot(untilResult, MONTHS); ++ relativeToDateOnly = newRelativeTo; ++ months += oneYearMonths; ++ years -= sign; ++ } ++ } ++ break; ++ ++ case 'week': ++ if (!calendar) throw new RangeError('a starting point is required for weeks balancing'); // balance years down to days ++ ++ while (MathAbs$1(years) > 0) { ++ var oneYearDays = void 0; ++ ++ var _MoveRelativeDate = MoveRelativeDate(calendar, relativeTo, oneYear); ++ ++ relativeTo = _MoveRelativeDate.relativeTo; ++ oneYearDays = _MoveRelativeDate.days; ++ days += oneYearDays; ++ years -= sign; ++ } // balance months down to days ++ ++ ++ while (MathAbs$1(months) > 0) { ++ var oneMonthDays = void 0; ++ ++ var _MoveRelativeDate2 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ relativeTo = _MoveRelativeDate2.relativeTo; ++ oneMonthDays = _MoveRelativeDate2.days; ++ days += oneMonthDays; ++ months -= sign; ++ } ++ ++ break; ++ ++ default: ++ // balance years down to days ++ while (MathAbs$1(years) > 0) { ++ if (!calendar) throw new RangeError('a starting point is required for balancing calendar units'); ++ ++ var _oneYearDays = void 0; ++ ++ var _MoveRelativeDate3 = MoveRelativeDate(calendar, relativeTo, oneYear); ++ ++ relativeTo = _MoveRelativeDate3.relativeTo; ++ _oneYearDays = _MoveRelativeDate3.days; ++ days += _oneYearDays; ++ years -= sign; ++ } // balance months down to days ++ ++ ++ while (MathAbs$1(months) > 0) { ++ if (!calendar) throw new RangeError('a starting point is required for balancing calendar units'); ++ ++ var _oneMonthDays = void 0; ++ ++ var _MoveRelativeDate4 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ relativeTo = _MoveRelativeDate4.relativeTo; ++ _oneMonthDays = _MoveRelativeDate4.days; ++ days += _oneMonthDays; ++ months -= sign; ++ } // balance weeks down to days ++ ++ ++ while (MathAbs$1(weeks) > 0) { ++ if (!calendar) throw new RangeError('a starting point is required for balancing calendar units'); ++ var oneWeekDays = void 0; ++ ++ var _MoveRelativeDate5 = MoveRelativeDate(calendar, relativeTo, oneWeek); ++ ++ relativeTo = _MoveRelativeDate5.relativeTo; ++ oneWeekDays = _MoveRelativeDate5.days; ++ days += oneWeekDays; ++ weeks -= sign; ++ } ++ ++ break; ++ } ++ ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days ++ }; ++ } ++ function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) { ++ var years = yearsParam; ++ var months = monthsParam; ++ var weeks = weeksParam; ++ var days = daysParam; ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ var sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ if (sign === 0) return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days ++ }; ++ var calendar; ++ var relativeTo; ++ ++ if (relativeToParam) { ++ relativeTo = ToTemporalDate(relativeToParam); ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } ++ ++ var oneYear = new TemporalDuration(sign); ++ var oneMonth = new TemporalDuration(0, sign); ++ var oneWeek = new TemporalDuration(0, 0, sign); ++ ++ switch (largestUnit) { ++ case 'year': ++ { ++ if (!calendar) throw new RangeError('a starting point is required for years balancing'); // balance days up to years ++ ++ var newRelativeTo, oneYearDays; ++ ++ var _MoveRelativeDate6 = MoveRelativeDate(calendar, relativeTo, oneYear); ++ ++ newRelativeTo = _MoveRelativeDate6.relativeTo; ++ oneYearDays = _MoveRelativeDate6.days; ++ ++ while (MathAbs$1(days) >= MathAbs$1(oneYearDays)) { ++ days -= oneYearDays; ++ years += sign; ++ relativeTo = newRelativeTo; ++ ++ var _MoveRelativeDate7 = MoveRelativeDate(calendar, relativeTo, oneYear); ++ ++ newRelativeTo = _MoveRelativeDate7.relativeTo; ++ oneYearDays = _MoveRelativeDate7.days; ++ } // balance days up to months ++ ++ ++ var oneMonthDays; ++ ++ var _MoveRelativeDate8 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ newRelativeTo = _MoveRelativeDate8.relativeTo; ++ oneMonthDays = _MoveRelativeDate8.days; ++ ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ days -= oneMonthDays; ++ months += sign; ++ relativeTo = newRelativeTo; ++ ++ var _MoveRelativeDate9 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ newRelativeTo = _MoveRelativeDate9.relativeTo; ++ oneMonthDays = _MoveRelativeDate9.days; ++ } // balance months up to years ++ ++ ++ var dateAdd = calendar.dateAdd; ++ newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd); ++ var dateUntil = calendar.dateUntil; ++ var untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'month'; ++ var untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil); ++ var oneYearMonths = GetSlot(untilResult, MONTHS); ++ ++ while (MathAbs$1(months) >= MathAbs$1(oneYearMonths)) { ++ months -= oneYearMonths; ++ years += sign; ++ relativeTo = newRelativeTo; ++ newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd); ++ ++ var _untilOptions = ObjectCreate$2(null); ++ ++ _untilOptions.largestUnit = 'month'; ++ untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, _untilOptions, dateUntil); ++ oneYearMonths = GetSlot(untilResult, MONTHS); ++ } ++ ++ break; ++ } ++ ++ case 'month': ++ { ++ if (!calendar) throw new RangeError('a starting point is required for months balancing'); // balance days up to months ++ ++ var _newRelativeTo, _oneMonthDays2; ++ ++ var _MoveRelativeDate10 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ _newRelativeTo = _MoveRelativeDate10.relativeTo; ++ _oneMonthDays2 = _MoveRelativeDate10.days; ++ ++ while (MathAbs$1(days) >= MathAbs$1(_oneMonthDays2)) { ++ days -= _oneMonthDays2; ++ months += sign; ++ relativeTo = _newRelativeTo; ++ ++ var _MoveRelativeDate11 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ _newRelativeTo = _MoveRelativeDate11.relativeTo; ++ _oneMonthDays2 = _MoveRelativeDate11.days; ++ } ++ ++ break; ++ } ++ ++ case 'week': ++ { ++ if (!calendar) throw new RangeError('a starting point is required for weeks balancing'); // balance days up to weeks ++ ++ var _newRelativeTo2, oneWeekDays; ++ ++ var _MoveRelativeDate12 = MoveRelativeDate(calendar, relativeTo, oneWeek); ++ ++ _newRelativeTo2 = _MoveRelativeDate12.relativeTo; ++ oneWeekDays = _MoveRelativeDate12.days; ++ ++ while (MathAbs$1(days) >= MathAbs$1(oneWeekDays)) { ++ days -= oneWeekDays; ++ weeks += sign; ++ relativeTo = _newRelativeTo2; ++ ++ var _MoveRelativeDate13 = MoveRelativeDate(calendar, relativeTo, oneWeek); ++ ++ _newRelativeTo2 = _MoveRelativeDate13.relativeTo; ++ oneWeekDays = _MoveRelativeDate13.days; ++ } ++ ++ break; ++ } ++ } ++ ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days ++ }; ++ } ++ function CalculateOffsetShift(relativeTo, y, mon, w, d) { ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ var instant = GetSlot(relativeTo, INSTANT); ++ var timeZone = GetSlot(relativeTo, TIME_ZONE); ++ var calendar = GetSlot(relativeTo, CALENDAR); ++ var offsetBefore = GetOffsetNanosecondsFor(timeZone, instant); ++ var after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0); ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ var instantAfter = new TemporalInstant(after); ++ var offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter); ++ return offsetAfter - offsetBefore; ++ } ++ ++ return 0; ++ } ++ function CreateNegatedTemporalDuration(duration) { ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS)); ++ } ++ function ConstrainToRange(value, min, max) { ++ // Math.Max accepts undefined values and returns NaN. Undefined values are ++ // used for optional params in the method below. ++ return MathMin(max, MathMax(min, value)); ++ } ++ ++ function ConstrainISODate(year, monthParam, dayParam) { ++ var month = ConstrainToRange(monthParam, 1, 12); ++ var day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month)); ++ return { ++ year: year, ++ month: month, ++ day: day ++ }; ++ } ++ ++ function ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) { ++ var hour = ConstrainToRange(hourParam, 0, 23); ++ var minute = ConstrainToRange(minuteParam, 0, 59); ++ var second = ConstrainToRange(secondParam, 0, 59); ++ var millisecond = ConstrainToRange(millisecondParam, 0, 999); ++ var microsecond = ConstrainToRange(microsecondParam, 0, 999); ++ var nanosecond = ConstrainToRange(nanosecondParam, 0, 999); ++ return { ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ ++ function RejectToRange(value, min, max) { ++ if (value < min || value > max) throw new RangeError("value out of range: ".concat(min, " <= ").concat(value, " <= ").concat(max)); ++ } ++ ++ function RejectISODate(year, month, day) { ++ RejectToRange(month, 1, 12); ++ RejectToRange(day, 1, ISODaysInMonth(year, month)); ++ } ++ ++ function RejectDateRange(year, month, day) { ++ // Noon avoids trouble at edges of DateTime range (excludes midnight) ++ RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0); ++ } ++ ++ function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectToRange(hour, 0, 23); ++ RejectToRange(minute, 0, 59); ++ RejectToRange(second, 0, 59); ++ RejectToRange(millisecond, 0, 999); ++ RejectToRange(microsecond, 0, 999); ++ RejectToRange(nanosecond, 0, 999); ++ } ++ ++ function RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectISODate(year, month, day); ++ RejectTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ ++ function RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) { ++ RejectToRange(year, YEAR_MIN, YEAR_MAX); // Reject any DateTime 24 hours or more outside the Instant range ++ ++ if (year === YEAR_MIN && null == GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1) || year === YEAR_MAX && null == GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1)) { ++ throw new RangeError('DateTime outside of supported range'); ++ } ++ } ++ ++ function ValidateEpochNanoseconds(epochNanoseconds) { ++ if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) { ++ throw new RangeError('Instant outside of supported range'); ++ } ++ } ++ ++ function RejectYearMonthRange(year, month) { ++ RejectToRange(year, YEAR_MIN, YEAR_MAX); ++ ++ if (year === YEAR_MIN) { ++ RejectToRange(month, 4, 12); ++ } else if (year === YEAR_MAX) { ++ RejectToRange(month, 1, 9); ++ } ++ } ++ ++ function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) { ++ var sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns); ++ ++ for (var _i5 = 0, _arr3 = [y, mon, w, d, h, min, s, ms, µs, ns]; _i5 < _arr3.length; _i5++) { ++ var prop = _arr3[_i5]; ++ if (!NumberIsFinite(prop)) throw new RangeError('infinite values not allowed as duration fields'); ++ var propSign = MathSign(prop); ++ if (propSign !== 0 && propSign !== sign) throw new RangeError('mixed-sign values not allowed as duration fields'); ++ } ++ } ++ function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) { ++ switch (largestUnit) { ++ case 'year': ++ case 'month': ++ { ++ var sign = -CompareISODate(y1, m1, d1, y2, m2, d2); ++ if (sign === 0) return { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0 ++ }; ++ var start = { ++ year: y1, ++ month: m1, ++ day: d1 ++ }; ++ var end = { ++ year: y2, ++ month: m2, ++ day: d2 ++ }; ++ var years = end.year - start.year; ++ var mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain'); ++ var midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2); ++ ++ if (midSign === 0) { ++ return largestUnit === 'year' ? { ++ years: years, ++ months: 0, ++ weeks: 0, ++ days: 0 ++ } : { ++ years: 0, ++ months: years * 12, ++ weeks: 0, ++ days: 0 ++ }; ++ } ++ ++ var months = end.month - start.month; ++ ++ if (midSign !== sign) { ++ years -= sign; ++ months += sign * 12; ++ } ++ ++ mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain'); ++ midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2); ++ ++ if (midSign === 0) { ++ return largestUnit === 'year' ? { ++ years: years, ++ months: months, ++ weeks: 0, ++ days: 0 ++ } : { ++ years: 0, ++ months: months + years * 12, ++ weeks: 0, ++ days: 0 ++ }; ++ } ++ ++ if (midSign !== sign) { ++ // The end date is later in the month than mid date (or earlier for ++ // negative durations). Back up one month. ++ months -= sign; ++ ++ if (months === -sign) { ++ years -= sign; ++ months = 11 * sign; ++ } ++ ++ mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain'); ++ } ++ ++ var days = 0; // If we get here, months and years are correct (no overflow), and `mid` ++ // is within the range from `start` to `end`. To count the days between ++ // `mid` and `end`, there are 3 cases: ++ // 1) same month: use simple subtraction ++ // 2) end is previous month from intermediate (negative duration) ++ // 3) end is next month from intermediate (positive duration) ++ ++ if (mid.month === end.month) { ++ // 1) same month: use simple subtraction ++ days = end.day - mid.day; ++ } else if (sign < 0) { ++ // 2) end is previous month from intermediate (negative duration) ++ // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2 ++ days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day); ++ } else { ++ // 3) end is next month from intermediate (positive duration) ++ // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3 ++ days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day); ++ } ++ ++ if (largestUnit === 'month') { ++ months += years * 12; ++ years = 0; ++ } ++ ++ return { ++ years: years, ++ months: months, ++ weeks: 0, ++ days: days ++ }; ++ } ++ ++ case 'week': ++ case 'day': ++ { ++ var larger, smaller, _sign; ++ ++ if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) { ++ smaller = { ++ year: y1, ++ month: m1, ++ day: d1 ++ }; ++ larger = { ++ year: y2, ++ month: m2, ++ day: d2 ++ }; ++ _sign = 1; ++ } else { ++ smaller = { ++ year: y2, ++ month: m2, ++ day: d2 ++ }; ++ larger = { ++ year: y1, ++ month: m1, ++ day: d1 ++ }; ++ _sign = -1; ++ } ++ ++ var _days2 = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day); ++ ++ for (var year = smaller.year; year < larger.year; ++year) { ++ _days2 += LeapYear(year) ? 366 : 365; ++ } ++ ++ var weeks = 0; ++ ++ if (largestUnit === 'week') { ++ weeks = MathFloor$1(_days2 / 7); ++ _days2 %= 7; ++ } ++ ++ weeks *= _sign; ++ _days2 *= _sign; ++ return { ++ years: 0, ++ months: 0, ++ weeks: weeks, ++ days: _days2 ++ }; ++ } ++ ++ default: ++ throw new Error('assert not reached'); ++ } ++ } ++ ++ function DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) { ++ var hours = h2 - h1; ++ var minutes = min2 - min1; ++ var seconds = s2 - s1; ++ var milliseconds = ms2 - ms1; ++ var microseconds = µs2 - µs1; ++ var nanoseconds = ns2 - ns1; ++ var sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ hours *= sign; ++ minutes *= sign; ++ seconds *= sign; ++ milliseconds *= sign; ++ microseconds *= sign; ++ nanoseconds *= sign; ++ var deltaDays = 0; ++ ++ var _BalanceTime2 = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ ++ deltaDays = _BalanceTime2.deltaDays; ++ hours = _BalanceTime2.hour; ++ minutes = _BalanceTime2.minute; ++ seconds = _BalanceTime2.second; ++ milliseconds = _BalanceTime2.millisecond; ++ microseconds = _BalanceTime2.microsecond; ++ nanoseconds = _BalanceTime2.nanosecond; ++ if (deltaDays != 0) throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0'); ++ hours *= sign; ++ minutes *= sign; ++ seconds *= sign; ++ milliseconds *= sign; ++ microseconds *= sign; ++ nanoseconds *= sign; ++ return { ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ ++ function DifferenceInstant(ns1, ns2, increment, unit, roundingMode) { ++ var diff = JSBI.subtract(ns2, ns1); ++ var remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9)); ++ var wholeDays = JSBI.subtract(diff, remainder); ++ var roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode); ++ var roundedDiff = JSBI.add(wholeDays, roundedRemainder); ++ var nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND)); ++ var microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND)); ++ var milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND)); ++ var seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION)); ++ return { ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ ++ function DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) { ++ var y1 = y1Param; ++ var mon1 = mon1Param; ++ var d1 = d1Param; ++ ++ var _DifferenceTime = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2), ++ hours = _DifferenceTime.hours, ++ minutes = _DifferenceTime.minutes, ++ seconds = _DifferenceTime.seconds, ++ milliseconds = _DifferenceTime.milliseconds, ++ microseconds = _DifferenceTime.microseconds, ++ nanoseconds = _DifferenceTime.nanoseconds; ++ ++ var timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ var dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1); ++ ++ if (dateSign === -timeSign) { ++ var _BalanceISODate2 = BalanceISODate(y1, mon1, d1 - timeSign); ++ ++ y1 = _BalanceISODate2.year; ++ mon1 = _BalanceISODate2.month; ++ d1 = _BalanceISODate2.day; ++ ++ var _BalanceDuration = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ hours = _BalanceDuration.hours; ++ minutes = _BalanceDuration.minutes; ++ seconds = _BalanceDuration.seconds; ++ milliseconds = _BalanceDuration.milliseconds; ++ microseconds = _BalanceDuration.microseconds; ++ nanoseconds = _BalanceDuration.nanoseconds; ++ } ++ ++ var date1 = CreateTemporalDate(y1, mon1, d1, calendar); ++ var date2 = CreateTemporalDate(y2, mon2, d2, calendar); ++ var dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit); ++ var untilOptions = MergeLargestUnitOption(options, dateLargestUnit); // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped? ++ // Type 'SmallestUnit | undefined' is not assignable to type ++ // 'SmallestUnit<"year" | "month" | "day" | "week"> | undefined'. ++ // Type '"hour"' is not assignable to type ++ // 'SmallestUnit<"year" | "month" | "day" | "week"> | undefined'.ts(2345) ++ ++ var _CalendarDateUntil = CalendarDateUntil(calendar, date1, date2, untilOptions), ++ years = _CalendarDateUntil.years, ++ months = _CalendarDateUntil.months, ++ weeks = _CalendarDateUntil.weeks, ++ days = _CalendarDateUntil.days; // Signs of date part and time part may not agree; balance them together ++ ++ ++ var _BalanceDuration2 = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ days = _BalanceDuration2.days; ++ hours = _BalanceDuration2.hours; ++ minutes = _BalanceDuration2.minutes; ++ seconds = _BalanceDuration2.seconds; ++ milliseconds = _BalanceDuration2.milliseconds; ++ microseconds = _BalanceDuration2.microseconds; ++ nanoseconds = _BalanceDuration2.nanoseconds; ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ ++ function DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) { ++ var nsDiff = JSBI.subtract(ns2, ns1); ++ ++ if (JSBI.equal(nsDiff, ZERO)) { ++ return { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0, ++ hours: 0, ++ minutes: 0, ++ seconds: 0, ++ milliseconds: 0, ++ microseconds: 0, ++ nanoseconds: 0 ++ }; ++ } // Find the difference in dates only. ++ ++ ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ var start = new TemporalInstant(ns1); ++ var end = new TemporalInstant(ns2); ++ var dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar); ++ var dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar); ++ ++ var _DifferenceISODateTim2 = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options), ++ years = _DifferenceISODateTim2.years, ++ months = _DifferenceISODateTim2.months, ++ weeks = _DifferenceISODateTim2.weeks, ++ days = _DifferenceISODateTim2.days; ++ ++ var intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0); // may disambiguate ++ ++ var timeRemainderNs = JSBI.subtract(ns2, intermediateNs); ++ var intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar); ++ ++ var _NanosecondsToDays2 = NanosecondsToDays(timeRemainderNs, intermediate); ++ ++ timeRemainderNs = _NanosecondsToDays2.nanoseconds; ++ days = _NanosecondsToDays2.days; ++ ++ // Finally, merge the date and time durations and return the merged result. ++ var _BalanceDuration3 = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'), ++ hours = _BalanceDuration3.hours, ++ minutes = _BalanceDuration3.minutes, ++ seconds = _BalanceDuration3.seconds, ++ milliseconds = _BalanceDuration3.milliseconds, ++ microseconds = _BalanceDuration3.microseconds, ++ nanoseconds = _BalanceDuration3.nanoseconds; ++ ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } // TODO: does it make sense to explicitly union the other and options types for each operation? ++ ++ ++ function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) { ++ var other = ToTemporalInstant(otherParam); ++ var first, second; ++ ++ if (operation === 'until') { ++ first = instant; ++ second = other; ++ } else { ++ first = other; ++ second = instant; ++ } ++ ++ var options = GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond'); ++ var defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto'); ++ if (largestUnit === 'auto') largestUnit = defaultLargestUnit; ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ var MAX_DIFFERENCE_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ var roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false); ++ var onens = GetSlot(first, EPOCHNANOSECONDS); ++ var twons = GetSlot(second, EPOCHNANOSECONDS); ++ ++ var _DifferenceInstant = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode), ++ seconds = _DifferenceInstant.seconds, ++ milliseconds = _DifferenceInstant.milliseconds, ++ microseconds = _DifferenceInstant.microseconds, ++ nanoseconds = _DifferenceInstant.nanoseconds; ++ ++ var hours, minutes; ++ ++ var _BalanceDuration4 = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ hours = _BalanceDuration4.hours; ++ minutes = _BalanceDuration4.minutes; ++ seconds = _BalanceDuration4.seconds; ++ milliseconds = _BalanceDuration4.milliseconds; ++ microseconds = _BalanceDuration4.microseconds; ++ nanoseconds = _BalanceDuration4.nanoseconds; ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) { ++ var sign = operation === 'since' ? -1 : 1; ++ var other = ToTemporalDate(otherParam); ++ var calendar = GetSlot(plainDate, CALENDAR); ++ var otherCalendar = GetSlot(other, CALENDAR); ++ var calendarId = ToString(calendar); ++ var otherCalendarId = ToString(otherCalendar); ++ ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError("cannot compute difference between dates of ".concat(calendarId, " and ").concat(otherCalendarId, " calendars")); ++ } ++ ++ var options = GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day'); ++ var defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'auto') largestUnit = defaultLargestUnit; ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode); ++ var roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false); ++ var untilOptions = MergeLargestUnitOption(options, largestUnit); ++ ++ var _CalendarDateUntil2 = CalendarDateUntil(calendar, plainDate, other, untilOptions), ++ years = _CalendarDateUntil2.years, ++ months = _CalendarDateUntil2.months, ++ weeks = _CalendarDateUntil2.weeks, ++ days = _CalendarDateUntil2.days; ++ ++ if (smallestUnit !== 'day' || roundingIncrement !== 1) { ++ var _RoundDuration2 = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate); ++ ++ years = _RoundDuration2.years; ++ months = _RoundDuration2.months; ++ weeks = _RoundDuration2.weeks; ++ days = _RoundDuration2.days; ++ } ++ ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0); ++ } ++ function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) { ++ var sign = operation === 'since' ? -1 : 1; ++ var other = ToTemporalDateTime(otherParam); ++ var calendar = GetSlot(plainDateTime, CALENDAR); ++ var otherCalendar = GetSlot(other, CALENDAR); ++ var calendarId = ToString(calendar); ++ var otherCalendarId = ToString(otherCalendar); ++ ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError("cannot compute difference between dates of ".concat(calendarId, " and ").concat(otherCalendarId, " calendars")); ++ } ++ ++ var options = GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond'); ++ var defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto'); ++ if (largestUnit === 'auto') largestUnit = defaultLargestUnit; ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode); ++ var roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ ++ var _DifferenceISODateTim3 = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options), ++ years = _DifferenceISODateTim3.years, ++ months = _DifferenceISODateTim3.months, ++ weeks = _DifferenceISODateTim3.weeks, ++ days = _DifferenceISODateTim3.days, ++ hours = _DifferenceISODateTim3.hours, ++ minutes = _DifferenceISODateTim3.minutes, ++ seconds = _DifferenceISODateTim3.seconds, ++ milliseconds = _DifferenceISODateTim3.milliseconds, ++ microseconds = _DifferenceISODateTim3.microseconds, ++ nanoseconds = _DifferenceISODateTim3.nanoseconds; ++ ++ var relativeTo = TemporalDateTimeToDate(plainDateTime); ++ ++ var _RoundDuration3 = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo); ++ ++ years = _RoundDuration3.years; ++ months = _RoundDuration3.months; ++ weeks = _RoundDuration3.weeks; ++ days = _RoundDuration3.days; ++ hours = _RoundDuration3.hours; ++ minutes = _RoundDuration3.minutes; ++ seconds = _RoundDuration3.seconds; ++ milliseconds = _RoundDuration3.milliseconds; ++ microseconds = _RoundDuration3.microseconds; ++ nanoseconds = _RoundDuration3.nanoseconds; ++ ++ var _BalanceDuration5 = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ days = _BalanceDuration5.days; ++ hours = _BalanceDuration5.hours; ++ minutes = _BalanceDuration5.minutes; ++ seconds = _BalanceDuration5.seconds; ++ milliseconds = _BalanceDuration5.milliseconds; ++ microseconds = _BalanceDuration5.microseconds; ++ nanoseconds = _BalanceDuration5.nanoseconds; ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ } ++ function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) { ++ var sign = operation === 'since' ? -1 : 1; ++ var other = ToTemporalTime(otherParam); ++ var options = GetOptionsObject(optionsParam); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto'); ++ if (largestUnit === 'auto') largestUnit = 'hour'; ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond'); ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode); ++ var MAX_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ var roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false); ++ ++ var _DifferenceTime2 = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND)), ++ hours = _DifferenceTime2.hours, ++ minutes = _DifferenceTime2.minutes, ++ seconds = _DifferenceTime2.seconds, ++ milliseconds = _DifferenceTime2.milliseconds, ++ microseconds = _DifferenceTime2.microseconds, ++ nanoseconds = _DifferenceTime2.nanoseconds; ++ ++ var _RoundDuration4 = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode); ++ ++ hours = _RoundDuration4.hours; ++ minutes = _RoundDuration4.minutes; ++ seconds = _RoundDuration4.seconds; ++ milliseconds = _RoundDuration4.milliseconds; ++ microseconds = _RoundDuration4.microseconds; ++ nanoseconds = _RoundDuration4.nanoseconds; ++ ++ var _BalanceDuration6 = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ hours = _BalanceDuration6.hours; ++ minutes = _BalanceDuration6.minutes; ++ seconds = _BalanceDuration6.seconds; ++ milliseconds = _BalanceDuration6.milliseconds; ++ microseconds = _BalanceDuration6.microseconds; ++ nanoseconds = _BalanceDuration6.nanoseconds; ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ } ++ function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) { ++ var sign = operation === 'since' ? -1 : 1; ++ var other = ToTemporalYearMonth(otherParam); ++ var calendar = GetSlot(yearMonth, CALENDAR); ++ var otherCalendar = GetSlot(other, CALENDAR); ++ var calendarID = ToString(calendar); ++ var otherCalendarID = ToString(otherCalendar); ++ ++ if (calendarID !== otherCalendarID) { ++ throw new RangeError("cannot compute difference between months of ".concat(calendarID, " and ").concat(otherCalendarID, " calendars")); ++ } ++ ++ var options = GetOptionsObject(optionsParam); ++ var ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce(function (allowed, _ref8) { ++ var _ref9 = _slicedToArray(_ref8, 3), ++ p = _ref9[0], ++ s = _ref9[1], ++ c = _ref9[2]; ++ ++ if (c === 'date' && s !== 'week' && s !== 'day') allowed.push(s, p); ++ return allowed; ++ }, []); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month'); ++ ++ if (smallestUnit === 'week' || smallestUnit === 'day') { ++ throw new RangeError("smallestUnit must be one of ".concat(ALLOWED_UNITS.join(', '), ", not ").concat(smallestUnit)); ++ } ++ ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ ++ if (largestUnit === 'week' || largestUnit === 'day') { ++ throw new RangeError("largestUnit must be one of ".concat(ALLOWED_UNITS.join(', '), ", not ").concat(largestUnit)); ++ } ++ ++ if (largestUnit === 'auto') largestUnit = 'year'; ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode); ++ var roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false); ++ var fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ var otherFields = PrepareTemporalFields(other, fieldNames, []); ++ otherFields.day = 1; ++ var thisFields = PrepareTemporalFields(yearMonth, fieldNames, []); ++ thisFields.day = 1; // The calls to PrepareTemporalFields don't mark day as a required property, ++ // and TS doesn't automatically narrow the type of the object because of the ++ // assignments above, so we must "cast" the inputs. ++ ++ var otherDate = CalendarDateFromFields(calendar, otherFields); ++ var thisDate = CalendarDateFromFields(calendar, thisFields); ++ var untilOptions = MergeLargestUnitOption(options, largestUnit); ++ ++ var _CalendarDateUntil3 = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions), ++ years = _CalendarDateUntil3.years, ++ months = _CalendarDateUntil3.months; ++ ++ if (smallestUnit !== 'month' || roundingIncrement !== 1) { ++ var _RoundDuration5 = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate); ++ ++ years = _RoundDuration5.years; ++ months = _RoundDuration5.months; ++ } ++ ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0); ++ } ++ function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) { ++ var sign = operation === 'since' ? -1 : 1; ++ var other = ToTemporalZonedDateTime(otherParam); ++ var calendar = GetSlot(zonedDateTime, CALENDAR); ++ var otherCalendar = GetSlot(other, CALENDAR); ++ var calendarId = ToString(calendar); ++ var otherCalendarId = ToString(otherCalendar); ++ ++ if (calendarId !== otherCalendarId) { ++ throw new RangeError("cannot compute difference between dates of ".concat(calendarId, " and ").concat(otherCalendarId, " calendars")); ++ } ++ ++ var options = GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond'); ++ var defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto'); ++ if (largestUnit === 'auto') largestUnit = defaultLargestUnit; ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ if (operation === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode); ++ var roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ var ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS); ++ var ns2 = GetSlot(other, EPOCHNANOSECONDS); ++ var years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds; ++ ++ if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') { ++ // The user is only asking for a time difference, so return difference of instants. ++ years = 0; ++ months = 0; ++ weeks = 0; ++ days = 0; ++ ++ var _DifferenceInstant2 = DifferenceInstant(ns1, ns2, roundingIncrement, // TODO this doesn't type-check as it includes >= day-size units ++ // This is probably safe as the typing for ToSmallestTemporalUnit isn't ++ // very good. ++ smallestUnit, roundingMode); ++ ++ seconds = _DifferenceInstant2.seconds; ++ milliseconds = _DifferenceInstant2.milliseconds; ++ microseconds = _DifferenceInstant2.microseconds; ++ nanoseconds = _DifferenceInstant2.nanoseconds; ++ ++ var _BalanceDuration7 = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ hours = _BalanceDuration7.hours; ++ minutes = _BalanceDuration7.minutes; ++ seconds = _BalanceDuration7.seconds; ++ milliseconds = _BalanceDuration7.milliseconds; ++ microseconds = _BalanceDuration7.microseconds; ++ nanoseconds = _BalanceDuration7.nanoseconds; ++ } else { ++ var timeZone = GetSlot(zonedDateTime, TIME_ZONE); ++ ++ if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) { ++ throw new RangeError("When calculating difference between time zones, largestUnit must be 'hours' " + 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'); ++ } ++ ++ var untilOptions = MergeLargestUnitOption(options, largestUnit); ++ ++ var _DifferenceZonedDateT = DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions); ++ ++ years = _DifferenceZonedDateT.years; ++ months = _DifferenceZonedDateT.months; ++ weeks = _DifferenceZonedDateT.weeks; ++ days = _DifferenceZonedDateT.days; ++ hours = _DifferenceZonedDateT.hours; ++ minutes = _DifferenceZonedDateT.minutes; ++ seconds = _DifferenceZonedDateT.seconds; ++ milliseconds = _DifferenceZonedDateT.milliseconds; ++ microseconds = _DifferenceZonedDateT.microseconds; ++ nanoseconds = _DifferenceZonedDateT.nanoseconds; ++ ++ var _RoundDuration6 = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime); ++ ++ years = _RoundDuration6.years; ++ months = _RoundDuration6.months; ++ weeks = _RoundDuration6.weeks; ++ days = _RoundDuration6.days; ++ hours = _RoundDuration6.hours; ++ minutes = _RoundDuration6.minutes; ++ seconds = _RoundDuration6.seconds; ++ milliseconds = _RoundDuration6.milliseconds; ++ microseconds = _RoundDuration6.microseconds; ++ nanoseconds = _RoundDuration6.nanoseconds; ++ ++ var _AdjustRoundedDuratio = AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime); ++ ++ years = _AdjustRoundedDuratio.years; ++ months = _AdjustRoundedDuratio.months; ++ weeks = _AdjustRoundedDuratio.weeks; ++ days = _AdjustRoundedDuratio.days; ++ hours = _AdjustRoundedDuratio.hours; ++ minutes = _AdjustRoundedDuratio.minutes; ++ seconds = _AdjustRoundedDuratio.seconds; ++ milliseconds = _AdjustRoundedDuratio.milliseconds; ++ microseconds = _AdjustRoundedDuratio.microseconds; ++ nanoseconds = _AdjustRoundedDuratio.nanoseconds; ++ } ++ ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ } ++ function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) { ++ var year = yearParam; ++ var month = monthParam; ++ var day = dayParam; ++ var years = yearsParam; ++ var months = monthsParam; ++ var weeks = weeksParam; ++ var days = daysParam; ++ year += years; ++ month += months; ++ ++ var _BalanceISOYearMonth4 = BalanceISOYearMonth(year, month); ++ ++ year = _BalanceISOYearMonth4.year; ++ month = _BalanceISOYearMonth4.month; ++ ++ var _RegulateISODate = RegulateISODate(year, month, day, overflow); ++ ++ year = _RegulateISODate.year; ++ month = _RegulateISODate.month; ++ day = _RegulateISODate.day; ++ days += 7 * weeks; ++ day += days; ++ ++ var _BalanceISODate3 = BalanceISODate(year, month, day); ++ ++ year = _BalanceISODate3.year; ++ month = _BalanceISODate3.month; ++ day = _BalanceISODate3.day; ++ return { ++ year: year, ++ month: month, ++ day: day ++ }; ++ } ++ ++ function AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) { ++ var hour = hourParam; ++ var minute = minuteParam; ++ var second = secondParam; ++ var millisecond = millisecondParam; ++ var microsecond = microsecondParam; ++ var nanosecond = nanosecondParam; ++ hour += hours; ++ minute += minutes; ++ second += seconds; ++ millisecond += milliseconds; ++ microsecond += microseconds; ++ nanosecond += nanoseconds; ++ var deltaDays = 0; ++ ++ var _BalanceTime3 = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ ++ deltaDays = _BalanceTime3.deltaDays; ++ hour = _BalanceTime3.hour; ++ minute = _BalanceTime3.minute; ++ second = _BalanceTime3.second; ++ millisecond = _BalanceTime3.millisecond; ++ microsecond = _BalanceTime3.microsecond; ++ nanosecond = _BalanceTime3.nanosecond; ++ return { ++ deltaDays: deltaDays, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ ++ function AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) { ++ var largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1); ++ var largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2); ++ var largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2); ++ var years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds; ++ ++ if (!relativeTo) { ++ if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') { ++ throw new RangeError('relativeTo is required for years, months, or weeks arithmetic'); ++ } ++ ++ years = months = weeks = 0; ++ ++ var _BalanceDuration8 = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit); ++ ++ days = _BalanceDuration8.days; ++ hours = _BalanceDuration8.hours; ++ minutes = _BalanceDuration8.minutes; ++ seconds = _BalanceDuration8.seconds; ++ milliseconds = _BalanceDuration8.milliseconds; ++ microseconds = _BalanceDuration8.microseconds; ++ nanoseconds = _BalanceDuration8.nanoseconds; ++ } else if (IsTemporalDate(relativeTo)) { ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ var calendar = GetSlot(relativeTo, CALENDAR); ++ var dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0); ++ var dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0); ++ var dateAdd = calendar.dateAdd; ++ var intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd); ++ var end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd); ++ var dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit); ++ var differenceOptions = ObjectCreate$2(null); ++ differenceOptions.largestUnit = dateLargestUnit; ++ ++ var _CalendarDateUntil4 = CalendarDateUntil(calendar, relativeTo, end, differenceOptions); ++ ++ years = _CalendarDateUntil4.years; ++ months = _CalendarDateUntil4.months; ++ weeks = _CalendarDateUntil4.weeks; ++ days = _CalendarDateUntil4.days; ++ ++ var _BalanceDuration9 = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit); ++ ++ days = _BalanceDuration9.days; ++ hours = _BalanceDuration9.hours; ++ minutes = _BalanceDuration9.minutes; ++ seconds = _BalanceDuration9.seconds; ++ milliseconds = _BalanceDuration9.milliseconds; ++ microseconds = _BalanceDuration9.microseconds; ++ nanoseconds = _BalanceDuration9.nanoseconds; ++ } else { ++ // relativeTo is a ZonedDateTime ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ var timeZone = GetSlot(relativeTo, TIME_ZONE); ++ ++ var _calendar5 = GetSlot(relativeTo, CALENDAR); ++ ++ var intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, _calendar5, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1); ++ var endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, _calendar5, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2); ++ ++ if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') { ++ // The user is only asking for a time difference, so return difference of instants. ++ years = 0; ++ months = 0; ++ weeks = 0; ++ days = 0; ++ ++ var _DifferenceInstant3 = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'); ++ ++ seconds = _DifferenceInstant3.seconds; ++ milliseconds = _DifferenceInstant3.milliseconds; ++ microseconds = _DifferenceInstant3.microseconds; ++ nanoseconds = _DifferenceInstant3.nanoseconds; ++ ++ var _BalanceDuration10 = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit); ++ ++ hours = _BalanceDuration10.hours; ++ minutes = _BalanceDuration10.minutes; ++ seconds = _BalanceDuration10.seconds; ++ milliseconds = _BalanceDuration10.milliseconds; ++ microseconds = _BalanceDuration10.microseconds; ++ nanoseconds = _BalanceDuration10.nanoseconds; ++ } else { ++ var _DifferenceZonedDateT2 = DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, _calendar5, largestUnit, ObjectCreate$2(null)); ++ ++ years = _DifferenceZonedDateT2.years; ++ months = _DifferenceZonedDateT2.months; ++ weeks = _DifferenceZonedDateT2.weeks; ++ days = _DifferenceZonedDateT2.days; ++ hours = _DifferenceZonedDateT2.hours; ++ minutes = _DifferenceZonedDateT2.minutes; ++ seconds = _DifferenceZonedDateT2.seconds; ++ milliseconds = _DifferenceZonedDateT2.milliseconds; ++ microseconds = _DifferenceZonedDateT2.microseconds; ++ nanoseconds = _DifferenceZonedDateT2.nanoseconds; ++ } ++ } ++ ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ ++ function AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) { ++ var sum = ZERO; ++ sum = JSBI.add(sum, JSBI.BigInt(ns)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION)); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9))); ++ sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9))); ++ var result = JSBI.add(epochNanoseconds, sum); ++ ValidateEpochNanoseconds(result); ++ return result; ++ } ++ ++ function AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) { ++ var days = daysParam; // Add the time part ++ ++ var _AddTime = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds), ++ deltaDays = _AddTime.deltaDays, ++ hour = _AddTime.hour, ++ minute = _AddTime.minute, ++ second = _AddTime.second, ++ millisecond = _AddTime.millisecond, ++ microsecond = _AddTime.microsecond, ++ nanosecond = _AddTime.nanosecond; ++ ++ days += deltaDays; // Delegate the date part addition to the calendar ++ ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ var datePart = CreateTemporalDate(year, month, day, calendar); ++ var dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ var addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options); ++ return { ++ year: GetSlot(addedDate, ISO_YEAR), ++ month: GetSlot(addedDate, ISO_MONTH), ++ day: GetSlot(addedDate, ISO_DAY), ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ ++ function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) { ++ // If only time is to be added, then use Instant math. It's not OK to fall ++ // through to the date/time code below because compatible disambiguation in ++ // the PlainDateTime=>Instant conversion will change the offset of any ++ // ZonedDateTime in the repeated clock time after a backwards transition. ++ // When adding/subtracting time units and not dates, this disambiguation is ++ // not expected and so is avoided below via a fast path for time-only ++ // arithmetic. ++ // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`. ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ ++ if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) { ++ return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns); ++ } // RFC 5545 requires the date portion to be added in calendar days and the ++ // time portion to be added in exact time. ++ ++ ++ var dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar); ++ var datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar); ++ var dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ var addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options); ++ var dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar); // Note that 'compatible' is used below because this disambiguation behavior ++ // is required by RFC 5545. ++ ++ var instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible'); ++ return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns); ++ } ++ function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) { ++ var sign = operation === 'subtract' ? -1 : 1; ++ ++ var _ToTemporalDurationRe2 = ToTemporalDurationRecord(other), ++ years = _ToTemporalDurationRe2.years, ++ months = _ToTemporalDurationRe2.months, ++ weeks = _ToTemporalDurationRe2.weeks, ++ days = _ToTemporalDurationRe2.days, ++ hours = _ToTemporalDurationRe2.hours, ++ minutes = _ToTemporalDurationRe2.minutes, ++ seconds = _ToTemporalDurationRe2.seconds, ++ milliseconds = _ToTemporalDurationRe2.milliseconds, ++ microseconds = _ToTemporalDurationRe2.microseconds, ++ nanoseconds = _ToTemporalDurationRe2.nanoseconds; ++ ++ var options = GetOptionsObject(optionsParam); ++ var relativeTo = ToRelativeTemporalObject(options); ++ ++ var _AddDuration = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo); ++ ++ years = _AddDuration.years; ++ months = _AddDuration.months; ++ weeks = _AddDuration.weeks; ++ days = _AddDuration.days; ++ hours = _AddDuration.hours; ++ minutes = _AddDuration.minutes; ++ seconds = _AddDuration.seconds; ++ milliseconds = _AddDuration.milliseconds; ++ microseconds = _AddDuration.microseconds; ++ nanoseconds = _AddDuration.nanoseconds; ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) { ++ var sign = operation === 'subtract' ? -1 : 1; ++ ++ var _ToLimitedTemporalDur = ToLimitedTemporalDuration(durationLike, ['years', 'months', 'weeks', 'days']), ++ hours = _ToLimitedTemporalDur.hours, ++ minutes = _ToLimitedTemporalDur.minutes, ++ seconds = _ToLimitedTemporalDur.seconds, ++ milliseconds = _ToLimitedTemporalDur.milliseconds, ++ microseconds = _ToLimitedTemporalDur.microseconds, ++ nanoseconds = _ToLimitedTemporalDur.nanoseconds; ++ ++ var ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds); ++ var Instant = GetIntrinsic('%Temporal.Instant%'); ++ return new Instant(ns); ++ } ++ function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) { ++ var sign = operation === 'subtract' ? -1 : 1; ++ ++ var _ToTemporalDurationRe3 = ToTemporalDurationRecord(durationLike), ++ years = _ToTemporalDurationRe3.years, ++ months = _ToTemporalDurationRe3.months, ++ weeks = _ToTemporalDurationRe3.weeks, ++ days = _ToTemporalDurationRe3.days, ++ hours = _ToTemporalDurationRe3.hours, ++ minutes = _ToTemporalDurationRe3.minutes, ++ seconds = _ToTemporalDurationRe3.seconds, ++ milliseconds = _ToTemporalDurationRe3.milliseconds, ++ microseconds = _ToTemporalDurationRe3.microseconds, ++ nanoseconds = _ToTemporalDurationRe3.nanoseconds; ++ ++ var options = GetOptionsObject(optionsParam); ++ var calendar = GetSlot(dateTime, CALENDAR); ++ ++ var _AddDateTime = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options), ++ year = _AddDateTime.year, ++ month = _AddDateTime.month, ++ day = _AddDateTime.day, ++ hour = _AddDateTime.hour, ++ minute = _AddDateTime.minute, ++ second = _AddDateTime.second, ++ millisecond = _AddDateTime.millisecond, ++ microsecond = _AddDateTime.microsecond, ++ nanosecond = _AddDateTime.nanosecond; ++ ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) { ++ var sign = operation === 'subtract' ? -1 : 1; ++ ++ var _ToTemporalDurationRe4 = ToTemporalDurationRecord(durationLike), ++ hours = _ToTemporalDurationRe4.hours, ++ minutes = _ToTemporalDurationRe4.minutes, ++ seconds = _ToTemporalDurationRe4.seconds, ++ milliseconds = _ToTemporalDurationRe4.milliseconds, ++ microseconds = _ToTemporalDurationRe4.microseconds, ++ nanoseconds = _ToTemporalDurationRe4.nanoseconds; ++ ++ var _AddTime2 = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds), ++ hour = _AddTime2.hour, ++ minute = _AddTime2.minute, ++ second = _AddTime2.second, ++ millisecond = _AddTime2.millisecond, ++ microsecond = _AddTime2.microsecond, ++ nanosecond = _AddTime2.nanosecond; ++ ++ var _RegulateTime3 = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'); ++ ++ hour = _RegulateTime3.hour; ++ minute = _RegulateTime3.minute; ++ second = _RegulateTime3.second; ++ millisecond = _RegulateTime3.millisecond; ++ microsecond = _RegulateTime3.microsecond; ++ nanosecond = _RegulateTime3.nanosecond; ++ var PlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) { ++ var duration = ToTemporalDurationRecord(durationLike); ++ ++ if (operation === 'subtract') { ++ duration = { ++ years: -duration.years, ++ months: -duration.months, ++ weeks: -duration.weeks, ++ days: -duration.days, ++ hours: -duration.hours, ++ minutes: -duration.minutes, ++ seconds: -duration.seconds, ++ milliseconds: -duration.milliseconds, ++ microseconds: -duration.microseconds, ++ nanoseconds: -duration.nanoseconds ++ }; ++ } ++ ++ var _duration = duration, ++ years = _duration.years, ++ months = _duration.months, ++ weeks = _duration.weeks, ++ days = _duration.days, ++ hours = _duration.hours, ++ minutes = _duration.minutes, ++ seconds = _duration.seconds, ++ milliseconds = _duration.milliseconds, ++ microseconds = _duration.microseconds, ++ nanoseconds = _duration.nanoseconds; ++ ++ var _BalanceDuration11 = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'); ++ ++ days = _BalanceDuration11.days; ++ var options = GetOptionsObject(optionsParam); ++ var calendar = GetSlot(yearMonth, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ var fields = PrepareTemporalFields(yearMonth, fieldNames, []); ++ var sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1; // PrepareTemporalFields returns a type where 'day' is potentially undefined, ++ // and TS doesn't narrow the type as a result of the assignment above, so we ++ // cast the fields input to the new type. ++ ++ var startDate = CalendarDateFromFields(calendar, fields); ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ var durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ var optionsCopy = ObjectAssign$2(ObjectCreate$2(null), options); ++ var addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options); ++ var addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy); ++ } ++ function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) { ++ var sign = operation === 'subtract' ? -1 : 1; ++ ++ var _ToTemporalDurationRe5 = ToTemporalDurationRecord(durationLike), ++ years = _ToTemporalDurationRe5.years, ++ months = _ToTemporalDurationRe5.months, ++ weeks = _ToTemporalDurationRe5.weeks, ++ days = _ToTemporalDurationRe5.days, ++ hours = _ToTemporalDurationRe5.hours, ++ minutes = _ToTemporalDurationRe5.minutes, ++ seconds = _ToTemporalDurationRe5.seconds, ++ milliseconds = _ToTemporalDurationRe5.milliseconds, ++ microseconds = _ToTemporalDurationRe5.microseconds, ++ nanoseconds = _ToTemporalDurationRe5.nanoseconds; ++ ++ var options = GetOptionsObject(optionsParam); ++ var timeZone = GetSlot(zonedDateTime, TIME_ZONE); ++ var calendar = GetSlot(zonedDateTime, CALENDAR); ++ var epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar); ++ } ++ ++ function RoundNumberToIncrement(quantity, increment, mode) { ++ if (increment === 1) return quantity; ++ ++ var _divmod21 = divmod(quantity, JSBI.BigInt(increment)), ++ quotient = _divmod21.quotient, ++ remainder = _divmod21.remainder; ++ ++ if (JSBI.equal(remainder, ZERO)) return quantity; ++ var sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1; ++ ++ switch (mode) { ++ case 'ceil': ++ if (sign > 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign)); ++ break; ++ ++ case 'floor': ++ if (sign < 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign)); ++ break; ++ ++ case 'trunc': ++ // no change needed, because divmod is a truncation ++ break; ++ ++ case 'halfExpand': ++ // "half up away from zero" ++ if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) { ++ quotient = JSBI.add(quotient, JSBI.BigInt(sign)); ++ } ++ ++ break; ++ } ++ ++ return JSBI.multiply(quotient, JSBI.BigInt(increment)); ++ } ++ ++ function RoundInstant(epochNs, increment, unit, roundingMode) { ++ // Note: NonNegativeModulo, but with BigInt ++ var remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9)); ++ if (JSBI.lessThan(remainder, ZERO)) remainder = JSBI.add(remainder, JSBI.BigInt(86400e9)); ++ var wholeDays = JSBI.subtract(epochNs, remainder); ++ var roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode); ++ return JSBI.add(wholeDays, roundedRemainder); ++ } ++ function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode) { ++ var dayLengthNs = arguments.length > 12 && arguments[12] !== undefined ? arguments[12] : 86400e9; ++ ++ var _RoundTime = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs), ++ deltaDays = _RoundTime.deltaDays, ++ hour = _RoundTime.hour, ++ minute = _RoundTime.minute, ++ second = _RoundTime.second, ++ millisecond = _RoundTime.millisecond, ++ microsecond = _RoundTime.microsecond, ++ nanosecond = _RoundTime.nanosecond; ++ ++ var _BalanceISODate4 = BalanceISODate(yearParam, monthParam, dayParam + deltaDays), ++ year = _BalanceISODate4.year, ++ month = _BalanceISODate4.month, ++ day = _BalanceISODate4.day; ++ ++ return { ++ year: year, ++ month: month, ++ day: day, ++ hour: hour, ++ minute: minute, ++ second: second, ++ millisecond: millisecond, ++ microsecond: microsecond, ++ nanosecond: nanosecond ++ }; ++ } ++ function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode) { ++ var dayLengthNs = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 86400e9; ++ var quantity = ZERO; ++ ++ switch (unit) { ++ case 'day': ++ case 'hour': ++ quantity = JSBI.BigInt(hour); ++ // fall through ++ ++ case 'minute': ++ quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute)); ++ // fall through ++ ++ case 'second': ++ quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second)); ++ // fall through ++ ++ case 'millisecond': ++ quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond)); ++ // fall through ++ ++ case 'microsecond': ++ quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond)); ++ // fall through ++ ++ case 'nanosecond': ++ quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond)); ++ } ++ ++ var nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit]; ++ var rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode); ++ var result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit))); ++ ++ switch (unit) { ++ case 'day': ++ return { ++ deltaDays: result, ++ hour: 0, ++ minute: 0, ++ second: 0, ++ millisecond: 0, ++ microsecond: 0, ++ nanosecond: 0 ++ }; ++ ++ case 'hour': ++ return BalanceTime(result, 0, 0, 0, 0, 0); ++ ++ case 'minute': ++ return BalanceTime(hour, result, 0, 0, 0, 0); ++ ++ case 'second': ++ return BalanceTime(hour, minute, result, 0, 0, 0); ++ ++ case 'millisecond': ++ return BalanceTime(hour, minute, second, result, 0, 0); ++ ++ case 'microsecond': ++ return BalanceTime(hour, minute, second, millisecond, result, 0); ++ ++ case 'nanosecond': ++ return BalanceTime(hour, minute, second, millisecond, microsecond, result); ++ ++ default: ++ throw new Error("Invalid unit ".concat(unit)); ++ } ++ } ++ ++ function DaysUntil(earlier, later) { ++ return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days; ++ } ++ ++ function MoveRelativeDate(calendar, relativeToParam, duration) { ++ var later = CalendarDateAdd(calendar, relativeToParam, duration, undefined); ++ var days = DaysUntil(relativeToParam, later); ++ return { ++ relativeTo: later, ++ days: days ++ }; ++ } ++ ++ function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) { ++ var timeZone = GetSlot(relativeTo, TIME_ZONE); ++ var calendar = GetSlot(relativeTo, CALENDAR); ++ var intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar); ++ } ++ function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) { ++ var years = yearsParam; ++ var months = monthsParam; ++ var weeks = weeksParam; ++ var days = daysParam; ++ var hours = hoursParam; ++ var minutes = minutesParam; ++ var seconds = secondsParam; ++ var milliseconds = millisecondsParam; ++ var microseconds = microsecondsParam; ++ var nanoseconds = nanosecondsParam; ++ ++ if (!IsTemporalZonedDateTime(relativeTo) || unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day' || unit === 'nanosecond' && increment === 1) { ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } // There's one more round of rounding possible: if relativeTo is a ++ // ZonedDateTime, the time units could have rounded up into enough hours ++ // to exceed the day length. If this happens, grow the date part by a ++ // single day and re-run exact time rounding on the smaller remainder. DO ++ // NOT RECURSE, because once the extra hours are sucked up into the date ++ // duration, there's no way for another full day to come from the next ++ // round of rounding. And if it were possible (e.g. contrived calendar ++ // with 30-minute-long "days") then it'd risk an infinite loop. ++ ++ ++ var timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0); ++ var direction = MathSign(JSBI.toNumber(timeRemainderNs)); ++ var timeZone = GetSlot(relativeTo, TIME_ZONE); ++ var calendar = GetSlot(relativeTo, CALENDAR); ++ var dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ var dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0); ++ var dayLengthNs = JSBI.subtract(dayEnd, dayStart); ++ ++ if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) { ++ var _AddDuration2 = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo); ++ ++ years = _AddDuration2.years; ++ months = _AddDuration2.months; ++ weeks = _AddDuration2.weeks; ++ days = _AddDuration2.days; ++ timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode); ++ ++ var _BalanceDuration12 = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'); ++ ++ hours = _BalanceDuration12.hours; ++ minutes = _BalanceDuration12.minutes; ++ seconds = _BalanceDuration12.seconds; ++ milliseconds = _BalanceDuration12.milliseconds; ++ microseconds = _BalanceDuration12.microseconds; ++ nanoseconds = _BalanceDuration12.nanoseconds; ++ } ++ ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: nanoseconds ++ }; ++ } ++ function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode) { ++ var relativeToParam = arguments.length > 13 && arguments[13] !== undefined ? arguments[13] : undefined; ++ var years = yearsParam; ++ var months = monthsParam; ++ var weeks = weeksParam; ++ var days = daysParam; ++ var hours = hoursParam; ++ var minutes = minutesParam; ++ var seconds = secondsParam; ++ var milliseconds = millisecondsParam; ++ var microseconds = microsecondsParam; ++ var nanoseconds = JSBI.BigInt(nanosecondsParam); ++ var TemporalDuration = GetIntrinsic('%Temporal.Duration%'); ++ var calendar, zdtRelative; // A cast is used below because relativeTo will be either PlainDate or ++ // undefined for the rest of this long method (after any ZDT=>PlainDate ++ // conversion below), and TS isn't smart enough to know that the type has ++ // changed. See https://github.com/microsoft/TypeScript/issues/27706. ++ ++ var relativeTo = relativeToParam; ++ ++ if (relativeTo) { ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ zdtRelative = relativeTo; ++ relativeTo = ToTemporalDate(relativeTo); ++ } else if (!IsTemporalDate(relativeTo)) { ++ throw new TypeError('starting point must be PlainDate or ZonedDateTime'); ++ } ++ ++ calendar = GetSlot(relativeTo, CALENDAR); ++ } // First convert time units up to days, if rounding to days or higher units. ++ // If rounding relative to a ZonedDateTime, then some days may not be 24h. ++ // TS doesn't know that `dayLengthNs` is only used if the unit is day or ++ // larger. We'll cast away `undefined` when it's used lower down below. ++ ++ ++ var dayLengthNs; ++ ++ if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') { ++ nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0); ++ var intermediate; ++ ++ if (zdtRelative) { ++ intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days); ++ } ++ ++ var deltaDays; ++ var dayLength; ++ ++ var _NanosecondsToDays3 = NanosecondsToDays(nanoseconds, intermediate); ++ ++ deltaDays = _NanosecondsToDays3.days; ++ nanoseconds = _NanosecondsToDays3.nanoseconds; ++ dayLength = _NanosecondsToDays3.dayLengthNs; ++ dayLengthNs = JSBI.BigInt(dayLength); ++ days += deltaDays; ++ hours = minutes = seconds = milliseconds = microseconds = 0; ++ } ++ ++ var total; ++ ++ switch (unit) { ++ case 'year': ++ { ++ if (!calendar) throw new RangeError('A starting point is required for years rounding'); // convert months and weeks to days by calculating difference( ++ // relativeTo + years, relativeTo + { years, months, weeks }) ++ ++ var yearsDuration = new TemporalDuration(years); ++ var dateAdd = calendar.dateAdd; ++ var yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd); ++ var yearsMonthsWeeks = new TemporalDuration(years, months, weeks); ++ var yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd); ++ var monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater); ++ relativeTo = yearsLater; ++ days += monthsWeeksInDays; ++ var daysLater = CalendarDateAdd(calendar, relativeTo, { ++ days: days ++ }, undefined, dateAdd); ++ var untilOptions = ObjectCreate$2(null); ++ untilOptions.largestUnit = 'year'; ++ var yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years; ++ years += yearsPassed; ++ var oldRelativeTo = relativeTo; ++ relativeTo = CalendarDateAdd(calendar, relativeTo, { ++ years: yearsPassed ++ }, undefined, dateAdd); ++ var daysPassed = DaysUntil(oldRelativeTo, relativeTo); ++ days -= daysPassed; ++ var oneYear = new TemporalDuration(days < 0 ? -1 : 1); ++ ++ var _MoveRelativeDate14 = MoveRelativeDate(calendar, relativeTo, oneYear), ++ oneYearDays = _MoveRelativeDate14.days; // Note that `nanoseconds` below (here and in similar code for months, ++ // weeks, and days further below) isn't actually nanoseconds for the ++ // full date range. Instead, it's a BigInt representation of total ++ // days multiplied by the number of nanoseconds in the last day of ++ // the duration. This lets us do days-or-larger rounding using BigInt ++ // math which reduces precision loss. ++ ++ ++ oneYearDays = MathAbs$1(oneYearDays); // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ ++ var divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs); ++ nanoseconds = JSBI.add( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds); ++ var rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode); ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor); ++ years = JSBI.toNumber(JSBI.divide(rounded, divisor)); ++ nanoseconds = ZERO; ++ months = weeks = days = 0; ++ break; ++ } ++ ++ case 'month': ++ { ++ if (!calendar) throw new RangeError('A starting point is required for months rounding'); // convert weeks to days by calculating difference(relativeTo + ++ // { years, months }, relativeTo + { years, months, weeks }) ++ ++ var yearsMonths = new TemporalDuration(years, months); ++ var _dateAdd = calendar.dateAdd; ++ var yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, _dateAdd); ++ ++ var _yearsMonthsWeeks = new TemporalDuration(years, months, weeks); ++ ++ var _yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, _yearsMonthsWeeks, undefined, _dateAdd); ++ ++ var weeksInDays = DaysUntil(yearsMonthsLater, _yearsMonthsWeeksLater); ++ relativeTo = yearsMonthsLater; ++ days += weeksInDays; // Months may be different lengths of days depending on the calendar, ++ // convert days to months in a loop as described above under 'years'. ++ ++ var sign = MathSign(days); ++ var oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1); ++ var oneMonthDays; ++ ++ var _MoveRelativeDate15 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ relativeTo = _MoveRelativeDate15.relativeTo; ++ oneMonthDays = _MoveRelativeDate15.days; ++ ++ while (MathAbs$1(days) >= MathAbs$1(oneMonthDays)) { ++ months += sign; ++ days -= oneMonthDays; ++ ++ var _MoveRelativeDate16 = MoveRelativeDate(calendar, relativeTo, oneMonth); ++ ++ relativeTo = _MoveRelativeDate16.relativeTo; ++ oneMonthDays = _MoveRelativeDate16.days; ++ } ++ ++ oneMonthDays = MathAbs$1(oneMonthDays); // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ ++ var _divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs); ++ ++ nanoseconds = JSBI.add( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI.add(JSBI.multiply(_divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds); ++ ++ var _rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(_divisor, JSBI.BigInt(increment))), roundingMode); ++ ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(_divisor); ++ months = JSBI.toNumber(JSBI.divide(_rounded, _divisor)); ++ nanoseconds = ZERO; ++ weeks = days = 0; ++ break; ++ } ++ ++ case 'week': ++ { ++ if (!calendar) throw new RangeError('A starting point is required for weeks rounding'); // Weeks may be different lengths of days depending on the calendar, ++ // convert days to weeks in a loop as described above under 'years'. ++ ++ var _sign2 = MathSign(days); ++ ++ var oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1); ++ var oneWeekDays; ++ ++ var _MoveRelativeDate17 = MoveRelativeDate(calendar, relativeTo, oneWeek); ++ ++ relativeTo = _MoveRelativeDate17.relativeTo; ++ oneWeekDays = _MoveRelativeDate17.days; ++ ++ while (MathAbs$1(days) >= MathAbs$1(oneWeekDays)) { ++ weeks += _sign2; ++ days -= oneWeekDays; ++ ++ var _MoveRelativeDate18 = MoveRelativeDate(calendar, relativeTo, oneWeek); ++ ++ relativeTo = _MoveRelativeDate18.relativeTo; ++ oneWeekDays = _MoveRelativeDate18.days; ++ } ++ ++ oneWeekDays = MathAbs$1(oneWeekDays); // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ ++ var _divisor2 = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs); ++ ++ nanoseconds = JSBI.add( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ JSBI.add(JSBI.multiply(_divisor2, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds); ++ ++ var _rounded2 = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(_divisor2, JSBI.BigInt(increment))), roundingMode); ++ ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(_divisor2); ++ weeks = JSBI.toNumber(JSBI.divide(_rounded2, _divisor2)); ++ nanoseconds = ZERO; ++ days = 0; ++ break; ++ } ++ ++ case 'day': ++ { ++ // dayLengthNs is never undefined if unit is `day` or larger. ++ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ++ var _divisor3 = dayLengthNs; ++ nanoseconds = JSBI.add(JSBI.multiply(_divisor3, JSBI.BigInt(days)), nanoseconds); ++ ++ var _rounded3 = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(_divisor3, JSBI.BigInt(increment))), roundingMode); ++ ++ total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(_divisor3); ++ days = JSBI.toNumber(JSBI.divide(_rounded3, _divisor3)); ++ nanoseconds = ZERO; ++ break; ++ } ++ ++ case 'hour': ++ { ++ var _divisor4 = 3600e9; ++ var allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9))); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION)); ++ allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ allNanoseconds = JSBI.add(allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(allNanoseconds) / _divisor4; ++ ++ var _rounded4 = RoundNumberToIncrement(allNanoseconds, _divisor4 * increment, roundingMode); ++ ++ hours = JSBI.toNumber(JSBI.divide(_rounded4, JSBI.BigInt(_divisor4))); ++ nanoseconds = ZERO; ++ minutes = seconds = milliseconds = microseconds = 0; ++ break; ++ } ++ ++ case 'minute': ++ { ++ var _divisor5 = 60e9; ++ ++ var _allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)); ++ ++ _allNanoseconds = JSBI.add(_allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION)); ++ _allNanoseconds = JSBI.add(_allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION)); ++ _allNanoseconds = JSBI.add(_allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ _allNanoseconds = JSBI.add(_allNanoseconds, nanoseconds); ++ total = JSBI.toNumber(_allNanoseconds) / _divisor5; ++ ++ var _rounded5 = RoundNumberToIncrement(_allNanoseconds, _divisor5 * increment, roundingMode); ++ ++ minutes = JSBI.toNumber(JSBI.divide(_rounded5, JSBI.BigInt(_divisor5))); ++ nanoseconds = ZERO; ++ seconds = milliseconds = microseconds = 0; ++ break; ++ } ++ ++ case 'second': ++ { ++ var _divisor6 = 1e9; ++ ++ var _allNanoseconds2 = JSBI.multiply(JSBI.BigInt(seconds), BILLION); ++ ++ _allNanoseconds2 = JSBI.add(_allNanoseconds2, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION)); ++ _allNanoseconds2 = JSBI.add(_allNanoseconds2, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ _allNanoseconds2 = JSBI.add(_allNanoseconds2, nanoseconds); ++ total = JSBI.toNumber(_allNanoseconds2) / _divisor6; ++ ++ var _rounded6 = RoundNumberToIncrement(_allNanoseconds2, _divisor6 * increment, roundingMode); ++ ++ seconds = JSBI.toNumber(JSBI.divide(_rounded6, JSBI.BigInt(_divisor6))); ++ nanoseconds = ZERO; ++ milliseconds = microseconds = 0; ++ break; ++ } ++ ++ case 'millisecond': ++ { ++ var _divisor7 = 1e6; ++ ++ var _allNanoseconds3 = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION); ++ ++ _allNanoseconds3 = JSBI.add(_allNanoseconds3, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND)); ++ _allNanoseconds3 = JSBI.add(_allNanoseconds3, nanoseconds); ++ total = JSBI.toNumber(_allNanoseconds3) / _divisor7; ++ ++ var _rounded7 = RoundNumberToIncrement(_allNanoseconds3, _divisor7 * increment, roundingMode); ++ ++ milliseconds = JSBI.toNumber(JSBI.divide(_rounded7, JSBI.BigInt(_divisor7))); ++ nanoseconds = ZERO; ++ microseconds = 0; ++ break; ++ } ++ ++ case 'microsecond': ++ { ++ var _divisor8 = 1e3; ++ ++ var _allNanoseconds4 = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND); ++ ++ _allNanoseconds4 = JSBI.add(_allNanoseconds4, nanoseconds); ++ total = JSBI.toNumber(_allNanoseconds4) / _divisor8; ++ ++ var _rounded8 = RoundNumberToIncrement(_allNanoseconds4, _divisor8 * increment, roundingMode); ++ ++ microseconds = JSBI.toNumber(JSBI.divide(_rounded8, JSBI.BigInt(_divisor8))); ++ nanoseconds = ZERO; ++ break; ++ } ++ ++ case 'nanosecond': ++ { ++ total = JSBI.toNumber(nanoseconds); ++ nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode); ++ break; ++ } ++ } ++ ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days, ++ hours: hours, ++ minutes: minutes, ++ seconds: seconds, ++ milliseconds: milliseconds, ++ microseconds: microseconds, ++ nanoseconds: JSBI.toNumber(nanoseconds), ++ total: total ++ }; ++ } ++ function CompareISODate(y1, m1, d1, y2, m2, d2) { ++ for (var _i6 = 0, _arr4 = [[y1, y2], [m1, m2], [d1, d2]]; _i6 < _arr4.length; _i6++) { ++ var _arr4$_i = _slicedToArray(_arr4[_i6], 2), ++ x = _arr4$_i[0], ++ y = _arr4$_i[1]; ++ ++ if (x !== y) return ComparisonResult(x - y); ++ } ++ ++ return 0; ++ } ++ ++ function NonNegativeModulo(x, y) { ++ var result = x % y; ++ if (ObjectIs(result, -0)) return 0; ++ if (result < 0) result += y; ++ return result; ++ } ++ ++ function ToBigIntExternal(arg) { ++ var jsbiBI = ToBigInt(arg); ++ if (typeof globalThis.BigInt !== 'undefined') return globalThis.BigInt(jsbiBI.toString(10)); ++ return jsbiBI; ++ } ++ function ToBigInt(arg) { ++ if (arg instanceof JSBI) { ++ return arg; ++ } ++ ++ var prim = arg; ++ ++ if (_typeof(arg) === 'object') { ++ var toPrimFn = arg[Symbol.toPrimitive]; ++ ++ if (toPrimFn && typeof toPrimFn === 'function') { ++ prim = ReflectApply$1(toPrimFn, arg, ['number']); ++ } ++ } ++ ++ switch (_typeof(prim)) { ++ case 'undefined': ++ case 'object': ++ case 'number': ++ case 'symbol': ++ default: ++ throw new TypeError("cannot convert ".concat(_typeof(arg), " to bigint")); ++ ++ case 'string': ++ if (!prim.match(/^\s*(?:[+-]?\d+\s*)?$/)) { ++ throw new SyntaxError('invalid BigInt syntax'); ++ } ++ ++ // eslint: no-fallthrough: false ++ ++ case 'bigint': ++ try { ++ return JSBI.BigInt(prim.toString()); ++ } catch (e) { ++ if (e instanceof Error && e.message.startsWith('Invalid integer')) throw new SyntaxError(e.message); ++ throw e; ++ } ++ ++ case 'boolean': ++ if (prim) { ++ return ONE; ++ } else { ++ return ZERO; ++ } ++ ++ } ++ } // Note: This method returns values with bogus nanoseconds based on the previous iteration's ++ // milliseconds. That way there is a guarantee that the full nanoseconds are always going to be ++ // increasing at least and that the microsecond and nanosecond fields are likely to be non-zero. ++ ++ var SystemUTCEpochNanoSeconds = function () { ++ var ns = JSBI.BigInt(Date.now() % 1e6); ++ return function () { ++ var ms = JSBI.BigInt(Date.now()); ++ var result = JSBI.add(JSBI.multiply(ms, MILLION), ns); ++ ns = JSBI.remainder(ms, MILLION); ++ if (JSBI.greaterThan(result, NS_MAX)) return NS_MAX; ++ if (JSBI.lessThan(result, NS_MIN)) return NS_MIN; ++ return result; ++ }; ++ }(); ++ function SystemTimeZone() { ++ var fmt = new IntlDateTimeFormat$2('en-us'); ++ var TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%'); ++ return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone)); ++ } ++ function ComparisonResult(value) { ++ return value < 0 ? -1 : value > 0 ? 1 : value; ++ } ++ function GetOptionsObject(options) { ++ if (options === undefined) return ObjectCreate$2(null); ++ if (IsObject(options) && options !== null) return options; ++ throw new TypeError("Options parameter must be an object, not ".concat(options === null ? 'null' : "".concat(_typeof(options)))); ++ } ++ function CreateOnePropObject(propName, propValue) { ++ var o = ObjectCreate$2(null); ++ o[propName] = propValue; ++ return o; ++ } ++ ++ function GetOption(options, property, allowedValues, fallback) { ++ var value = options[property]; ++ ++ if (value !== undefined) { ++ value = ToString(value); ++ ++ if (!allowedValues.includes(value)) { ++ throw new RangeError("".concat(property, " must be one of ").concat(allowedValues.join(', '), ", not ").concat(value)); ++ } ++ ++ return value; ++ } ++ ++ return fallback; ++ } ++ ++ function GetNumberOption(options, property, minimum, maximum, fallback) { ++ var valueRaw = options[property]; ++ if (valueRaw === undefined) return fallback; ++ var value = ToNumber(valueRaw); ++ ++ if (NumberIsNaN(value) || value < minimum || value > maximum) { ++ throw new RangeError("".concat(String(property), " must be between ").concat(minimum, " and ").concat(maximum, ", not ").concat(value)); ++ } ++ ++ return MathFloor$1(value); ++ } ++ ++ function IsBuiltinCalendar(id) { ++ return ArrayIncludes$1.call(BUILTIN_CALENDAR_IDS, id); ++ } ++ var OFFSET = new RegExp("^".concat(offset.source, "$")); ++ ++ function bisect(getState, leftParam, rightParam) { ++ var lstateParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : getState(leftParam); ++ var rstateParam = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : getState(rightParam); ++ // This doesn't make much sense - why do these get converted unnecessarily? ++ var left = JSBI.BigInt(leftParam); ++ var right = JSBI.BigInt(rightParam); ++ var lstate = lstateParam; ++ var rstate = rstateParam; ++ ++ while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) { ++ var middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2)); ++ var mstate = getState(middle); ++ ++ if (mstate === lstate) { ++ left = middle; ++ lstate = mstate; ++ } else if (mstate === rstate) { ++ right = middle; ++ rstate = mstate; ++ } else { ++ throw new Error("invalid state in bisection ".concat(lstate, " - ").concat(mstate, " - ").concat(rstate)); ++ } ++ } ++ ++ return right; ++ } ++ ++ var nsPerTimeUnit = { ++ hour: 3600e9, ++ minute: 60e9, ++ second: 1e9, ++ millisecond: 1e6, ++ microsecond: 1e3, ++ nanosecond: 1 ++ }; ++ ++ var DATE = Symbol('date'); ++ var YM = Symbol('ym'); ++ var MD = Symbol('md'); ++ var TIME = Symbol('time'); ++ var DATETIME = Symbol('datetime'); ++ var ZONED = Symbol('zoneddatetime'); ++ var INST = Symbol('instant'); ++ var ORIGINAL = Symbol('original'); ++ var TZ_RESOLVED = Symbol('timezone'); ++ var TZ_GIVEN = Symbol('timezone-id-given'); ++ var CAL_ID = Symbol('calendar-id'); ++ var LOCALE = Symbol('locale'); ++ var OPTIONS = Symbol('options'); ++ ++ var descriptor$1 = function descriptor(value) { ++ return { ++ value: value, ++ enumerable: true, ++ writable: false, ++ configurable: true ++ }; ++ }; ++ ++ var IntlDateTimeFormat$1 = globalThis.Intl.DateTimeFormat; ++ var ObjectAssign$1 = Object.assign; ++ var ObjectHasOwnProperty = Object.prototype.hasOwnProperty; ++ var ReflectApply = Reflect.apply; // Construction of built-in Intl.DateTimeFormat objects is sloooooow, ++ // so we'll only create those instances when we need them. ++ // See https://bugs.chromium.org/p/v8/issues/detail?id=6528 ++ ++ function getPropLazy(obj, prop) { ++ var val = obj[prop]; ++ ++ if (typeof val === 'function') { ++ // If we get here, `val` is an "amender function". It will take the user's ++ // options and transform them into suitable options to be passed into the ++ // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options ++ // will vary depending on the Temporal type, so that's why we store separate ++ // formatters in separate props on the polyfill's DateTimeFormat instances. ++ // The efficiency happens because we don't create an (expensive) formatter ++ // until the user calls toLocaleString for that Temporal type. ++ val = new IntlDateTimeFormat$1(obj[LOCALE], val(obj[OPTIONS])); // TODO: can this be typed more cleanly? ++ ++ obj[prop] = val; ++ } ++ ++ return val; ++ } // Similarly, lazy-init TimeZone instances. ++ ++ ++ function getResolvedTimeZoneLazy(obj) { ++ var val = obj[TZ_RESOLVED]; ++ ++ if (typeof val === 'string') { ++ val = ToTemporalTimeZone(val); ++ obj[TZ_RESOLVED] = val; ++ } ++ ++ return val; ++ } ++ ++ function DateTimeFormatImpl() { ++ var locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; ++ ++ if (!(this instanceof DateTimeFormatImpl)) { ++ return new DateTimeFormatImpl(locale, optionsParam); ++ } ++ ++ var hasOptions = typeof optionsParam !== 'undefined'; ++ var options = hasOptions ? ObjectAssign$1({}, optionsParam) : {}; // TODO: remove type assertion after Temporal types land in TS lib types ++ ++ var original = new IntlDateTimeFormat$1(locale, options); ++ var ro = original.resolvedOptions(); // DateTimeFormat instances are very expensive to create. Therefore, they will ++ // be lazily created only when needed, using the locale and options provided. ++ // But it's possible for callers to mutate those inputs before lazy creation ++ // happens. For this reason, we clone the inputs instead of caching the ++ // original objects. To avoid the complexity of deep cloning any inputs that ++ // are themselves objects (e.g. the locales array, or options property values ++ // that will be coerced to strings), we rely on `resolvedOptions()` to do the ++ // coercion and cloning for us. Unfortunately, we can't just use the resolved ++ // options as-is because our options-amending logic adds additional fields if ++ // the user doesn't supply any unit fields like year, month, day, hour, etc. ++ // Therefore, we limit the properties in the clone to properties that were ++ // present in the original input. ++ ++ if (hasOptions) { ++ var clonedResolved = ObjectAssign$1({}, ro); ++ ++ for (var prop in clonedResolved) { ++ if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) { ++ delete clonedResolved[prop]; ++ } ++ } ++ ++ this[OPTIONS] = clonedResolved; ++ } else { ++ this[OPTIONS] = options; ++ } ++ ++ this[TZ_GIVEN] = options.timeZone ? options.timeZone : null; ++ this[LOCALE] = ro.locale; ++ this[ORIGINAL] = original; ++ this[TZ_RESOLVED] = ro.timeZone; ++ this[CAL_ID] = ro.calendar; ++ this[DATE] = dateAmend; ++ this[YM] = yearMonthAmend; ++ this[MD] = monthDayAmend; ++ this[TIME] = timeAmend; ++ this[DATETIME] = datetimeAmend; ++ this[ZONED] = zonedDateTimeAmend; ++ this[INST] = instantAmend; ++ return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way? ++ } ++ ++ Object.defineProperty(DateTimeFormatImpl, 'name', { ++ writable: true, ++ value: 'DateTimeFormat' ++ }); ++ ++ DateTimeFormatImpl.supportedLocalesOf = function (locales, options) { ++ return IntlDateTimeFormat$1.supportedLocalesOf(locales, options); ++ }; ++ ++ var propertyDescriptors = { ++ resolvedOptions: descriptor$1(resolvedOptions), ++ format: descriptor$1(format), ++ formatRange: descriptor$1(formatRange) ++ }; ++ ++ if ('formatToParts' in IntlDateTimeFormat$1.prototype) { ++ propertyDescriptors.formatToParts = descriptor$1(formatToParts); ++ } ++ ++ if ('formatRangeToParts' in IntlDateTimeFormat$1.prototype) { ++ propertyDescriptors.formatRangeToParts = descriptor$1(formatRangeToParts); ++ } ++ ++ DateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat$1.prototype, propertyDescriptors); // Ensure that the prototype isn't writeable. ++ ++ Object.defineProperty(DateTimeFormatImpl, 'prototype', { ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ var DateTimeFormat = DateTimeFormatImpl; ++ ++ function resolvedOptions() { ++ return this[ORIGINAL].resolvedOptions(); ++ } ++ ++ function adjustFormatterTimeZone(formatter, timeZone) { ++ if (!timeZone) return formatter; ++ var options = formatter.resolvedOptions(); ++ if (options.timeZone === timeZone) return formatter; // Existing Intl isn't typed to accept Temporal-specific options and the lib ++ // types for resolved options are less restrictive than the types for options. ++ // For example, `weekday` is ++ // `'long' | 'short' | 'narrow'` in options but `string` in resolved options. ++ // TODO: investigate why, and file an issue against TS if it's a bug. ++ ++ if (options['dateStyle'] || options['timeStyle']) { ++ // Unfortunately, Safari's resolvedOptions include parameters that will ++ // cause errors at runtime if passed along with ++ // dateStyle or timeStyle options as per ++ // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components. ++ // This has been fixed in newer versions of Safari: ++ // https://bugs.webkit.org/show_bug.cgi?id=231041 ++ delete options['weekday']; ++ delete options['era']; ++ delete options['year']; ++ delete options['month']; ++ delete options['day']; ++ delete options['hour']; ++ delete options['minute']; ++ delete options['second']; ++ delete options['timeZoneName']; ++ delete options['hourCycle']; ++ delete options['hour12']; ++ delete options['dayPeriod']; ++ } ++ ++ return new IntlDateTimeFormat$1(options.locale, _objectSpread2(_objectSpread2({}, options), {}, { ++ timeZone: timeZone ++ })); ++ } // TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params? ++ // And if so, why doesn't formatRange also accept extra params? ++ ++ ++ function format(datetime) { ++ var _this$ORIGINAL; ++ ++ var _extractOverrides = extractOverrides(datetime, this), ++ instant = _extractOverrides.instant, ++ formatter = _extractOverrides.formatter, ++ timeZone = _extractOverrides.timeZone; ++ ++ if (instant && formatter) { ++ formatter = adjustFormatterTimeZone(formatter, timeZone); ++ return formatter.format(instant.epochMilliseconds); ++ } ++ ++ for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { ++ rest[_key - 1] = arguments[_key]; ++ } ++ ++ return (_this$ORIGINAL = this[ORIGINAL]).format.apply(_this$ORIGINAL, [datetime].concat(rest)); ++ } ++ ++ function formatToParts(datetime) { ++ var _this$ORIGINAL2; ++ ++ var _extractOverrides2 = extractOverrides(datetime, this), ++ instant = _extractOverrides2.instant, ++ formatter = _extractOverrides2.formatter, ++ timeZone = _extractOverrides2.timeZone; ++ ++ if (instant && formatter) { ++ formatter = adjustFormatterTimeZone(formatter, timeZone); ++ return formatter.formatToParts(instant.epochMilliseconds); ++ } ++ ++ for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { ++ rest[_key2 - 1] = arguments[_key2]; ++ } ++ ++ return (_this$ORIGINAL2 = this[ORIGINAL]).formatToParts.apply(_this$ORIGINAL2, [datetime].concat(rest)); ++ } ++ ++ function formatRange(a, b) { ++ if (isTemporalObject(a) || isTemporalObject(b)) { ++ if (!sameTemporalType(a, b)) { ++ throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type'); ++ } ++ ++ var _extractOverrides3 = extractOverrides(a, this), ++ aa = _extractOverrides3.instant, ++ aformatter = _extractOverrides3.formatter, ++ atz = _extractOverrides3.timeZone; ++ ++ var _extractOverrides4 = extractOverrides(b, this), ++ bb = _extractOverrides4.instant, ++ bformatter = _extractOverrides4.formatter, ++ btz = _extractOverrides4.timeZone; ++ ++ if (atz && btz && atz !== btz) { ++ throw new RangeError('cannot format range between different time zones'); ++ } ++ ++ if (aa && bb && aformatter && bformatter && aformatter === bformatter) { ++ var formatter = adjustFormatterTimeZone(aformatter, atz); // TODO: Remove type assertion after this method lands in TS lib types ++ ++ return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds); ++ } ++ } // TODO: Remove type assertion after this method lands in TS lib types ++ ++ ++ return this[ORIGINAL].formatRange(a, b); ++ } ++ ++ function formatRangeToParts(a, b) { ++ if (isTemporalObject(a) || isTemporalObject(b)) { ++ if (!sameTemporalType(a, b)) { ++ throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type'); ++ } ++ ++ var _extractOverrides5 = extractOverrides(a, this), ++ aa = _extractOverrides5.instant, ++ aformatter = _extractOverrides5.formatter, ++ atz = _extractOverrides5.timeZone; ++ ++ var _extractOverrides6 = extractOverrides(b, this), ++ bb = _extractOverrides6.instant, ++ bformatter = _extractOverrides6.formatter, ++ btz = _extractOverrides6.timeZone; ++ ++ if (atz && btz && atz !== btz) { ++ throw new RangeError('cannot format range between different time zones'); ++ } ++ ++ if (aa && bb && aformatter && bformatter && aformatter === bformatter) { ++ var formatter = adjustFormatterTimeZone(aformatter, atz); // TODO: Remove type assertion after this method lands in TS lib types ++ ++ return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds); ++ } ++ } // TODO: Remove type assertion after this method lands in TS lib types ++ ++ ++ return this[ORIGINAL].formatRangeToParts(a, b); ++ } ++ ++ function amend() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; ++ var amended = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; ++ var options = ObjectAssign$1({}, optionsParam); ++ ++ for (var _i = 0, _arr = ['year', 'month', 'day', 'hour', 'minute', 'second', 'weekday', 'dayPeriod', 'timeZoneName', 'dateStyle', 'timeStyle']; _i < _arr.length; _i++) { ++ var opt = _arr[_i]; ++ options[opt] = opt in amended ? amended[opt] : options[opt]; ++ if (options[opt] === false || options[opt] === undefined) delete options[opt]; ++ } ++ ++ return options; ++ } ++ ++ function timeAmend(optionsParam) { ++ var options = amend(optionsParam, { ++ year: false, ++ month: false, ++ day: false, ++ weekday: false, ++ timeZoneName: false, ++ dateStyle: false ++ }); ++ ++ if (!hasTimeOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ ++ return options; ++ } ++ ++ function yearMonthAmend(optionsParam) { ++ var options = amend(optionsParam, { ++ day: false, ++ hour: false, ++ minute: false, ++ second: false, ++ weekday: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ dateStyle: false, ++ timeStyle: false ++ }); ++ ++ if (!('year' in options || 'month' in options)) { ++ options = ObjectAssign$1(options, { ++ year: 'numeric', ++ month: 'numeric' ++ }); ++ } ++ ++ return options; ++ } ++ ++ function monthDayAmend(optionsParam) { ++ var options = amend(optionsParam, { ++ year: false, ++ hour: false, ++ minute: false, ++ second: false, ++ weekday: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ dateStyle: false, ++ timeStyle: false ++ }); ++ ++ if (!('month' in options || 'day' in options)) { ++ options = ObjectAssign$1({}, options, { ++ month: 'numeric', ++ day: 'numeric' ++ }); ++ } ++ ++ return options; ++ } ++ ++ function dateAmend(optionsParam) { ++ var options = amend(optionsParam, { ++ hour: false, ++ minute: false, ++ second: false, ++ dayPeriod: false, ++ timeZoneName: false, ++ timeStyle: false ++ }); ++ ++ if (!hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric' ++ }); ++ } ++ ++ return options; ++ } ++ ++ function datetimeAmend(optionsParam) { ++ var options = amend(optionsParam, { ++ timeZoneName: false ++ }); ++ ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ ++ return options; ++ } ++ ++ function zonedDateTimeAmend(optionsParam) { ++ var options = optionsParam; ++ ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ if (options.timeZoneName === undefined) options.timeZoneName = 'short'; ++ } ++ ++ return options; ++ } ++ ++ function instantAmend(optionsParam) { ++ var options = optionsParam; ++ ++ if (!hasTimeOptions(options) && !hasDateOptions(options)) { ++ options = ObjectAssign$1({}, options, { ++ year: 'numeric', ++ month: 'numeric', ++ day: 'numeric', ++ hour: 'numeric', ++ minute: 'numeric', ++ second: 'numeric' ++ }); ++ } ++ ++ return options; ++ } ++ ++ function hasDateOptions(options) { ++ return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options; ++ } ++ ++ function hasTimeOptions(options) { ++ return 'hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options; ++ } ++ ++ function isTemporalObject(obj) { ++ return IsTemporalDate(obj) || IsTemporalTime(obj) || IsTemporalDateTime(obj) || IsTemporalZonedDateTime(obj) || IsTemporalYearMonth(obj) || IsTemporalMonthDay(obj) || IsTemporalInstant(obj); ++ } ++ ++ function sameTemporalType(x, y) { ++ if (!isTemporalObject(x) || !isTemporalObject(y)) return false; ++ if (IsTemporalTime(x) && !IsTemporalTime(y)) return false; ++ if (IsTemporalDate(x) && !IsTemporalDate(y)) return false; ++ if (IsTemporalDateTime(x) && !IsTemporalDateTime(y)) return false; ++ if (IsTemporalZonedDateTime(x) && !IsTemporalZonedDateTime(y)) return false; ++ if (IsTemporalYearMonth(x) && !IsTemporalYearMonth(y)) return false; ++ if (IsTemporalMonthDay(x) && !IsTemporalMonthDay(y)) return false; ++ if (IsTemporalInstant(x) && !IsTemporalInstant(y)) return false; ++ return true; ++ } ++ ++ function extractOverrides(temporalObj, main) { ++ var DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ ++ if (IsTemporalTime(temporalObj)) { ++ var hour = GetSlot(temporalObj, ISO_HOUR); ++ var minute = GetSlot(temporalObj, ISO_MINUTE); ++ var second = GetSlot(temporalObj, ISO_SECOND); ++ var millisecond = GetSlot(temporalObj, ISO_MILLISECOND); ++ var microsecond = GetSlot(temporalObj, ISO_MICROSECOND); ++ var nanosecond = GetSlot(temporalObj, ISO_NANOSECOND); ++ var datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]); ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'), ++ formatter: getPropLazy(main, TIME) ++ }; ++ } ++ ++ if (IsTemporalYearMonth(temporalObj)) { ++ var isoYear = GetSlot(temporalObj, ISO_YEAR); ++ var isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ var referenceISODay = GetSlot(temporalObj, ISO_DAY); ++ var calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ ++ if (calendar !== main[CAL_ID]) { ++ throw new RangeError("cannot format PlainYearMonth with calendar ".concat(calendar, " in locale with calendar ").concat(main[CAL_ID])); ++ } ++ ++ var _datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar); ++ ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), _datetime, 'compatible'), ++ formatter: getPropLazy(main, YM) ++ }; ++ } ++ ++ if (IsTemporalMonthDay(temporalObj)) { ++ var referenceISOYear = GetSlot(temporalObj, ISO_YEAR); ++ ++ var _isoMonth = GetSlot(temporalObj, ISO_MONTH); ++ ++ var isoDay = GetSlot(temporalObj, ISO_DAY); ++ ++ var _calendar = ToString(GetSlot(temporalObj, CALENDAR)); ++ ++ if (_calendar !== main[CAL_ID]) { ++ throw new RangeError("cannot format PlainMonthDay with calendar ".concat(_calendar, " in locale with calendar ").concat(main[CAL_ID])); ++ } ++ ++ var _datetime2 = new DateTime(referenceISOYear, _isoMonth, isoDay, 12, 0, 0, 0, 0, 0, _calendar); ++ ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), _datetime2, 'compatible'), ++ formatter: getPropLazy(main, MD) ++ }; ++ } ++ ++ if (IsTemporalDate(temporalObj)) { ++ var _isoYear = GetSlot(temporalObj, ISO_YEAR); ++ ++ var _isoMonth2 = GetSlot(temporalObj, ISO_MONTH); ++ ++ var _isoDay = GetSlot(temporalObj, ISO_DAY); ++ ++ var _calendar2 = ToString(GetSlot(temporalObj, CALENDAR)); ++ ++ if (_calendar2 !== 'iso8601' && _calendar2 !== main[CAL_ID]) { ++ throw new RangeError("cannot format PlainDate with calendar ".concat(_calendar2, " in locale with calendar ").concat(main[CAL_ID])); ++ } ++ ++ var _datetime3 = new DateTime(_isoYear, _isoMonth2, _isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]); ++ ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), _datetime3, 'compatible'), ++ formatter: getPropLazy(main, DATE) ++ }; ++ } ++ ++ if (IsTemporalDateTime(temporalObj)) { ++ var _isoYear2 = GetSlot(temporalObj, ISO_YEAR); ++ ++ var _isoMonth3 = GetSlot(temporalObj, ISO_MONTH); ++ ++ var _isoDay2 = GetSlot(temporalObj, ISO_DAY); ++ ++ var _hour = GetSlot(temporalObj, ISO_HOUR); ++ ++ var _minute = GetSlot(temporalObj, ISO_MINUTE); ++ ++ var _second = GetSlot(temporalObj, ISO_SECOND); ++ ++ var _millisecond = GetSlot(temporalObj, ISO_MILLISECOND); ++ ++ var _microsecond = GetSlot(temporalObj, ISO_MICROSECOND); ++ ++ var _nanosecond = GetSlot(temporalObj, ISO_NANOSECOND); ++ ++ var _calendar3 = ToString(GetSlot(temporalObj, CALENDAR)); ++ ++ if (_calendar3 !== 'iso8601' && _calendar3 !== main[CAL_ID]) { ++ throw new RangeError("cannot format PlainDateTime with calendar ".concat(_calendar3, " in locale with calendar ").concat(main[CAL_ID])); ++ } ++ ++ var _datetime4 = temporalObj; ++ ++ if (_calendar3 === 'iso8601') { ++ _datetime4 = new DateTime(_isoYear2, _isoMonth3, _isoDay2, _hour, _minute, _second, _millisecond, _microsecond, _nanosecond, main[CAL_ID]); ++ } ++ ++ return { ++ instant: BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), _datetime4, 'compatible'), ++ formatter: getPropLazy(main, DATETIME) ++ }; ++ } ++ ++ if (IsTemporalZonedDateTime(temporalObj)) { ++ var _calendar4 = ToString(GetSlot(temporalObj, CALENDAR)); ++ ++ if (_calendar4 !== 'iso8601' && _calendar4 !== main[CAL_ID]) { ++ throw new RangeError("cannot format ZonedDateTime with calendar ".concat(_calendar4, " in locale with calendar ").concat(main[CAL_ID])); ++ } ++ ++ var timeZone = GetSlot(temporalObj, TIME_ZONE); ++ var objTimeZone = ToString(timeZone); ++ ++ if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) { ++ throw new RangeError("timeZone option ".concat(main[TZ_GIVEN], " doesn't match actual time zone ").concat(objTimeZone)); ++ } ++ ++ return { ++ instant: GetSlot(temporalObj, INSTANT), ++ formatter: getPropLazy(main, ZONED), ++ timeZone: objTimeZone ++ }; ++ } ++ ++ if (IsTemporalInstant(temporalObj)) { ++ return { ++ instant: temporalObj, ++ formatter: getPropLazy(main, INST) ++ }; ++ } ++ ++ return {}; ++ } ++ ++ var intl = /*#__PURE__*/Object.freeze({ ++ __proto__: null, ++ DateTimeFormat: DateTimeFormat ++ }); ++ ++ var Instant = /*#__PURE__*/function () { ++ function Instant(epochNanoseconds) { ++ _classCallCheck(this, Instant); ++ ++ // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only ++ // to improve the error message. ++ if (arguments.length < 1) { ++ throw new TypeError('missing argument: epochNanoseconds is required'); ++ } ++ ++ var ns = ToBigInt(epochNanoseconds); ++ ValidateEpochNanoseconds(ns); ++ CreateSlots(this); ++ SetSlot(this, EPOCHNANOSECONDS, ns); ++ ++ { ++ var repr = TemporalInstantToString(this, undefined, 'auto'); ++ Object.defineProperty(this, '_repr_', { ++ value: "".concat(this[Symbol.toStringTag], " <").concat(repr, ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ ++ _createClass(Instant, [{ ++ key: "epochSeconds", ++ get: function get() { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ var value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.divide(value, BILLION)); ++ } ++ }, { ++ key: "epochMilliseconds", ++ get: function get() { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ var value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)); ++ return JSBI.toNumber(JSBI.divide(value, MILLION)); ++ } ++ }, { ++ key: "epochMicroseconds", ++ get: function get() { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ var value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)); ++ return ToBigIntExternal(JSBI.divide(value, THOUSAND)); ++ } ++ }, { ++ key: "epochNanoseconds", ++ get: function get() { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS))); ++ } ++ }, { ++ key: "add", ++ value: function add(temporalDurationLike) { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(temporalDurationLike) { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike); ++ } ++ }, { ++ key: "until", ++ value: function until(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalInstant('until', this, other, options); ++ } ++ }, { ++ key: "since", ++ value: function since(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalInstant('since', this, other, options); ++ } ++ }, { ++ key: "round", ++ value: function round(optionsParam) { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) throw new TypeError('options parameter is required'); ++ var options = typeof optionsParam === 'string' ? CreateOnePropObject('smallestUnit', optionsParam) : GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED); ++ var roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ var maximumIncrements = { ++ hour: 24, ++ minute: 1440, ++ second: 86400, ++ millisecond: 86400e3, ++ microsecond: 86400e6, ++ nanosecond: 86400e9 ++ }; ++ var roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true); ++ var ns = GetSlot(this, EPOCHNANOSECONDS); ++ var roundedNs = RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode); ++ return new Instant(roundedNs); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalInstant(otherParam); ++ var one = GetSlot(this, EPOCHNANOSECONDS); ++ var two = GetSlot(other, EPOCHNANOSECONDS); ++ return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ var timeZone = options.timeZone; ++ if (timeZone !== undefined) timeZone = ToTemporalTimeZone(timeZone); // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol ++ ++ var _ES$ToSecondsStringPr = ToSecondsStringPrecision(options), ++ precision = _ES$ToSecondsStringPr.precision, ++ unit = _ES$ToSecondsStringPr.unit, ++ increment = _ES$ToSecondsStringPr.increment; ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ var ns = GetSlot(this, EPOCHNANOSECONDS); ++ var roundedNs = RoundInstant(ns, increment, unit, roundingMode); ++ var roundedInstant = new Instant(roundedNs); ++ return TemporalInstantToString(roundedInstant, timeZone, precision); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return TemporalInstantToString(this, undefined, 'auto'); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.Instant'); ++ } ++ }, { ++ key: "toZonedDateTime", ++ value: function toZonedDateTime(item) { ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(item)) { ++ throw new TypeError('invalid argument in toZonedDateTime'); ++ } ++ ++ var calendarLike = item.calendar; ++ ++ if (calendarLike === undefined) { ++ throw new TypeError('missing calendar property in toZonedDateTime'); ++ } ++ ++ var calendar = ToTemporalCalendar(calendarLike); ++ var temporalTimeZoneLike = item.timeZone; ++ ++ if (temporalTimeZoneLike === undefined) { ++ throw new TypeError('missing timeZone property in toZonedDateTime'); ++ } ++ ++ var timeZone = ToTemporalTimeZone(temporalTimeZoneLike); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }, { ++ key: "toZonedDateTimeISO", ++ value: function toZonedDateTimeISO(itemParam) { ++ var item = itemParam; ++ if (!IsTemporalInstant(this)) throw new TypeError('invalid receiver'); ++ ++ if (IsObject(item)) { ++ var timeZoneProperty = item.timeZone; ++ ++ if (timeZoneProperty !== undefined) { ++ item = timeZoneProperty; ++ } ++ } ++ ++ var timeZone = ToTemporalTimeZone(item); ++ var calendar = GetISO8601Calendar(); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }], [{ ++ key: "fromEpochSeconds", ++ value: function fromEpochSeconds(epochSecondsParam) { ++ var epochSeconds = ToNumber(epochSecondsParam); ++ var epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ }, { ++ key: "fromEpochMilliseconds", ++ value: function fromEpochMilliseconds(epochMillisecondsParam) { ++ var epochMilliseconds = ToNumber(epochMillisecondsParam); ++ var epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ }, { ++ key: "fromEpochMicroseconds", ++ value: function fromEpochMicroseconds(epochMicrosecondsParam) { ++ var epochMicroseconds = ToBigInt(epochMicrosecondsParam); ++ var epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ }, { ++ key: "fromEpochNanoseconds", ++ value: function fromEpochNanoseconds(epochNanosecondsParam) { ++ var epochNanoseconds = ToBigInt(epochNanosecondsParam); ++ ValidateEpochNanoseconds(epochNanoseconds); ++ return new Instant(epochNanoseconds); ++ } ++ }, { ++ key: "from", ++ value: function from(item) { ++ if (IsTemporalInstant(item)) { ++ return new Instant(GetSlot(item, EPOCHNANOSECONDS)); ++ } ++ ++ return ToTemporalInstant(item); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var one = ToTemporalInstant(oneParam); ++ var two = ToTemporalInstant(twoParam); ++ var oneNs = GetSlot(one, EPOCHNANOSECONDS); ++ var twoNs = GetSlot(two, EPOCHNANOSECONDS); ++ if (JSBI.lessThan(oneNs, twoNs)) return -1; ++ if (JSBI.greaterThan(oneNs, twoNs)) return 1; ++ return 0; ++ } ++ }]); ++ ++ return Instant; ++ }(); ++ MakeIntrinsicClass(Instant, 'Temporal.Instant'); ++ ++ var _excluded = ["month", "monthCode", "year", "era", "eraYear"]; ++ var ArrayIncludes = Array.prototype.includes; ++ var ArrayPrototypePush = Array.prototype.push; ++ var IntlDateTimeFormat = globalThis.Intl.DateTimeFormat; ++ var ArraySort = Array.prototype.sort; ++ var MathAbs = Math.abs; ++ var MathFloor = Math.floor; ++ var ObjectEntries = Object.entries; ++ var ObjectKeys = Object.keys; ++ /** ++ * Implementations for each calendar. Non-ISO calendars have an extra `helper` ++ * property that provides additional per-calendar logic. ++ */ ++ ++ var impl = {}; ++ /** ++ * Thin wrapper around the implementation of each built-in calendar. This ++ * class's methods follow a similar pattern: ++ * 1. Validate parameters ++ * 2. Fill in default options (for methods where options are present) ++ * 3. Simplify and/or normalize parameters. For example, some methods accept ++ * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to ++ * PlainDate. ++ * 4. Look up the ID of the built-in calendar ++ * 5. Fetch the implementation object for that ID. ++ * 6. Call the corresponding method in the implementation object. ++ */ ++ ++ var Calendar = /*#__PURE__*/function () { ++ function Calendar(idParam) { ++ _classCallCheck(this, Calendar); ++ ++ // Note: if the argument is not passed, IsBuiltinCalendar("undefined") will fail. This check ++ // exists only to improve the error message. ++ if (arguments.length < 1) { ++ throw new RangeError('missing argument: id is required'); ++ } ++ ++ var id = ToString(idParam); ++ if (!IsBuiltinCalendar(id)) throw new RangeError("invalid calendar identifier ".concat(id)); ++ CreateSlots(this); ++ SetSlot(this, CALENDAR_ID, id); ++ ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: "".concat(this[Symbol.toStringTag], " <").concat(id, ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ ++ _createClass(Calendar, [{ ++ key: "id", ++ get: function get() { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ }, { ++ key: "dateFromFields", ++ value: function dateFromFields(fields) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) throw new TypeError('invalid fields'); ++ var options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this); ++ } ++ }, { ++ key: "yearMonthFromFields", ++ value: function yearMonthFromFields(fields) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) throw new TypeError('invalid fields'); ++ var options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this); ++ } ++ }, { ++ key: "monthDayFromFields", ++ value: function monthDayFromFields(fields) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsObject(fields)) throw new TypeError('invalid fields'); ++ var options = GetOptionsObject(optionsParam); ++ return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this); ++ } ++ }, { ++ key: "fields", ++ value: function fields(_fields) { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var fieldsArray = []; ++ var allowed = new Set(['year', 'month', 'monthCode', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond']); ++ ++ var _iterator = _createForOfIteratorHelper(_fields), ++ _step; ++ ++ try { ++ for (_iterator.s(); !(_step = _iterator.n()).done;) { ++ var name = _step.value; ++ if (typeof name !== 'string') throw new TypeError('invalid fields'); ++ if (!allowed.has(name)) throw new RangeError("invalid field name ".concat(name)); ++ allowed.delete(name); ++ ArrayPrototypePush.call(fieldsArray, name); ++ } ++ } catch (err) { ++ _iterator.e(err); ++ } finally { ++ _iterator.f(); ++ } ++ ++ return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray); ++ } ++ }, { ++ key: "mergeFields", ++ value: function mergeFields(fields, additionalFields) { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields); ++ } ++ }, { ++ key: "dateAdd", ++ value: function dateAdd(dateParam, durationParam) { ++ var optionsParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var date = ToTemporalDate(dateParam); ++ var duration = ToTemporalDuration(durationParam); ++ var options = GetOptionsObject(optionsParam); ++ var overflow = ToTemporalOverflow(options); ++ ++ var _ES$BalanceDuration = BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day'), ++ days = _ES$BalanceDuration.days; ++ ++ return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this); ++ } ++ }, { ++ key: "dateUntil", ++ value: function dateUntil(oneParam, twoParam) { ++ var optionsParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var one = ToTemporalDate(oneParam); ++ var two = ToTemporalDate(twoParam); ++ var options = GetOptionsObject(optionsParam); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto'); ++ if (largestUnit === 'auto') largestUnit = 'day'; ++ ++ var _impl$GetSlot$dateUnt = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit), ++ years = _impl$GetSlot$dateUnt.years, ++ months = _impl$GetSlot$dateUnt.months, ++ weeks = _impl$GetSlot$dateUnt.weeks, ++ days = _impl$GetSlot$dateUnt.days; ++ ++ var Duration = GetIntrinsic('%Temporal.Duration%'); ++ return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0); ++ } ++ }, { ++ key: "year", ++ value: function year(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].year(date); ++ } ++ }, { ++ key: "month", ++ value: function month(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (IsTemporalMonthDay(date)) throw new TypeError('use monthCode on PlainMonthDay instead'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].month(date); ++ } ++ }, { ++ key: "monthCode", ++ value: function monthCode(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date) && !IsTemporalMonthDay(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].monthCode(date); ++ } ++ }, { ++ key: "day", ++ value: function day(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalMonthDay(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].day(date); ++ } ++ }, { ++ key: "era", ++ value: function era(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].era(date); ++ } ++ }, { ++ key: "eraYear", ++ value: function eraYear(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].eraYear(date); ++ } ++ }, { ++ key: "dayOfWeek", ++ value: function dayOfWeek(dateParam) { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date); ++ } ++ }, { ++ key: "dayOfYear", ++ value: function dayOfYear(dateParam) { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date); ++ } ++ }, { ++ key: "weekOfYear", ++ value: function weekOfYear(dateParam) { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date); ++ } ++ }, { ++ key: "daysInWeek", ++ value: function daysInWeek(dateParam) { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ var date = ToTemporalDate(dateParam); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date); ++ } ++ }, { ++ key: "daysInMonth", ++ value: function daysInMonth(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date); ++ } ++ }, { ++ key: "daysInYear", ++ value: function daysInYear(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date); ++ } ++ }, { ++ key: "monthsInYear", ++ value: function monthsInYear(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date); ++ } ++ }, { ++ key: "inLeapYear", ++ value: function inLeapYear(dateParam) { ++ var date = dateParam; ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ if (!IsTemporalYearMonth(date)) date = ToTemporalDate(date); ++ return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR_ID); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalCalendar(this)) throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ return ToTemporalCalendar(item); ++ } ++ }]); ++ ++ return Calendar; ++ }(); ++ MakeIntrinsicClass(Calendar, 'Temporal.Calendar'); ++ DefineIntrinsic('Temporal.Calendar.from', Calendar.from); ++ /** ++ * Implementation for the ISO 8601 calendar. This is the only calendar that's ++ * guaranteed to be supported by all ECMAScript implementations, including those ++ * without Intl (ECMA-402) support. ++ */ ++ ++ impl['iso8601'] = { ++ dateFromFields: function dateFromFields(fieldsParam, options, calendar) { ++ var overflow = ToTemporalOverflow(options); ++ var fields = PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']); ++ fields = resolveNonLunisolarMonth(fields); ++ var _fields2 = fields, ++ year = _fields2.year, ++ month = _fields2.month, ++ day = _fields2.day; ++ ++ var _ES$RegulateISODate = RegulateISODate(year, month, day, overflow); ++ ++ year = _ES$RegulateISODate.year; ++ month = _ES$RegulateISODate.month; ++ day = _ES$RegulateISODate.day; ++ return CreateTemporalDate(year, month, day, calendar); ++ }, ++ yearMonthFromFields: function yearMonthFromFields(fieldsParam, options, calendar) { ++ var overflow = ToTemporalOverflow(options); ++ var fields = PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']); ++ fields = resolveNonLunisolarMonth(fields); ++ var _fields3 = fields, ++ year = _fields3.year, ++ month = _fields3.month; ++ ++ var _ES$RegulateISOYearMo = RegulateISOYearMonth(year, month, overflow); ++ ++ year = _ES$RegulateISOYearMo.year; ++ month = _ES$RegulateISOYearMo.month; ++ return CreateTemporalYearMonth(year, month, calendar, ++ /* referenceISODay = */ ++ 1); ++ }, ++ monthDayFromFields: function monthDayFromFields(fieldsParam, options, calendar) { ++ var overflow = ToTemporalOverflow(options); ++ var fields = PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']); ++ ++ if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) { ++ throw new TypeError('either year or monthCode required with month'); ++ } ++ ++ var useYear = fields.monthCode === undefined; ++ var referenceISOYear = 1972; ++ fields = resolveNonLunisolarMonth(fields); ++ var _fields4 = fields, ++ month = _fields4.month, ++ day = _fields4.day, ++ year = _fields4.year; ++ ++ var _ES$RegulateISODate2 = RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow); ++ ++ month = _ES$RegulateISODate2.month; ++ day = _ES$RegulateISODate2.day; ++ return CreateTemporalMonthDay(month, day, calendar, referenceISOYear); ++ }, ++ fields: function fields(_fields5) { ++ return _fields5; ++ }, ++ mergeFields: function mergeFields(fields, additionalFields) { ++ var merged = {}; ++ ++ var _iterator2 = _createForOfIteratorHelper(ObjectKeys(fields)), ++ _step2; ++ ++ try { ++ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { ++ var nextKey = _step2.value; ++ if (nextKey === 'month' || nextKey === 'monthCode') continue; ++ merged[nextKey] = fields[nextKey]; ++ } ++ } catch (err) { ++ _iterator2.e(err); ++ } finally { ++ _iterator2.f(); ++ } ++ ++ var newKeys = ObjectKeys(additionalFields); ++ ++ var _iterator3 = _createForOfIteratorHelper(newKeys), ++ _step3; ++ ++ try { ++ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { ++ var _nextKey = _step3.value; ++ merged[_nextKey] = additionalFields[_nextKey]; ++ } ++ } catch (err) { ++ _iterator3.e(err); ++ } finally { ++ _iterator3.f(); ++ } ++ ++ if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) { ++ var month = fields.month, ++ monthCode = fields.monthCode; ++ if (month !== undefined) merged.month = month; ++ if (monthCode !== undefined) merged.monthCode = monthCode; ++ } ++ ++ return merged; ++ }, ++ dateAdd: function dateAdd(date, years, months, weeks, days, overflow, calendar) { ++ var year = GetSlot(date, ISO_YEAR); ++ var month = GetSlot(date, ISO_MONTH); ++ var day = GetSlot(date, ISO_DAY); ++ ++ var _ES$AddISODate = AddISODate(year, month, day, years, months, weeks, days, overflow); ++ ++ year = _ES$AddISODate.year; ++ month = _ES$AddISODate.month; ++ day = _ES$AddISODate.day; ++ return CreateTemporalDate(year, month, day, calendar); ++ }, ++ dateUntil: function dateUntil(one, two, largestUnit) { ++ return DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit); ++ }, ++ year: function year(date) { ++ return GetSlot(date, ISO_YEAR); ++ }, ++ era: function era() { ++ return undefined; ++ }, ++ eraYear: function eraYear() { ++ return undefined; ++ }, ++ month: function month(date) { ++ return GetSlot(date, ISO_MONTH); ++ }, ++ monthCode: function monthCode(date) { ++ return buildMonthCode(GetSlot(date, ISO_MONTH)); ++ }, ++ day: function day(date) { ++ return GetSlot(date, ISO_DAY); ++ }, ++ dayOfWeek: function dayOfWeek(date) { ++ return DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ dayOfYear: function dayOfYear(date) { ++ return DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ weekOfYear: function weekOfYear(date) { ++ return WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)); ++ }, ++ daysInWeek: function daysInWeek() { ++ return 7; ++ }, ++ daysInMonth: function daysInMonth(date) { ++ return ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH)); ++ }, ++ daysInYear: function daysInYear(dateParam) { ++ var date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) date = ToTemporalDate(date); ++ return LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365; ++ }, ++ monthsInYear: function monthsInYear() { ++ return 12; ++ }, ++ inLeapYear: function inLeapYear(dateParam) { ++ var date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) date = ToTemporalDate(date); ++ return LeapYear(GetSlot(date, ISO_YEAR)); ++ } ++ }; ++ ++ function monthCodeNumberPart(monthCode) { ++ if (!monthCode.startsWith('M')) { ++ throw new RangeError("Invalid month code: ".concat(monthCode, ". Month codes must start with M.")); ++ } ++ ++ var month = +monthCode.slice(1); ++ if (isNaN(month)) throw new RangeError("Invalid month code: ".concat(monthCode)); ++ return month; ++ } ++ ++ function buildMonthCode(month) { ++ var leap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; ++ return "M".concat(month.toString().padStart(2, '0')).concat(leap ? 'L' : ''); ++ } ++ /** ++ * Safely merge a month, monthCode pair into an integer month. ++ * If both are present, make sure they match. ++ * This logic doesn't work for lunisolar calendars! ++ * */ ++ ++ ++ function resolveNonLunisolarMonth(calendarDate) { ++ var overflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var monthsPerYear = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 12; ++ var month = calendarDate.month, ++ monthCode = calendarDate.monthCode; ++ ++ if (monthCode === undefined) { ++ if (month === undefined) throw new TypeError('Either month or monthCode are required'); // The ISO calendar uses the default (undefined) value because it does ++ // constrain/reject after this method returns. Non-ISO calendars, however, ++ // rely on this function to constrain/reject out-of-range `month` values. ++ ++ if (overflow === 'reject') RejectToRange(month, 1, monthsPerYear); ++ if (overflow === 'constrain') month = ConstrainToRange(month, 1, monthsPerYear); ++ monthCode = buildMonthCode(month); ++ } else { ++ var numberPart = monthCodeNumberPart(monthCode); ++ ++ if (month !== undefined && month !== numberPart) { ++ throw new RangeError("monthCode ".concat(monthCode, " and month ").concat(month, " must match if both are present")); ++ } ++ ++ if (monthCode !== buildMonthCode(numberPart)) { ++ throw new RangeError("Invalid month code: ".concat(monthCode)); ++ } ++ ++ month = numberPart; ++ if (month < 1 || month > monthsPerYear) throw new RangeError("Invalid monthCode: ".concat(monthCode)); ++ } ++ ++ return _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ month: month, ++ monthCode: monthCode ++ }); ++ } ++ /** ++ * This prototype implementation of non-ISO calendars makes many repeated calls ++ * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed ++ * up these repeat accesses. Each cache instance is associated (via a WeakMap) ++ * to a specific Temporal object, which speeds up multiple calendar calls on the ++ * same Temporal object instance. No invalidation or pruning is necessary ++ * because each object's cache is thrown away when the object is GC-ed. ++ */ ++ ++ ++ var OneObjectCache = /*#__PURE__*/function () { ++ function OneObjectCache(cacheToClone) { ++ _classCallCheck(this, OneObjectCache); ++ ++ this.map = new Map(); ++ this.calls = 0; ++ this.hits = 0; ++ this.misses = 0; ++ this.now = globalThis.performance ? globalThis.performance.now() : Date.now(); ++ ++ if (cacheToClone !== undefined) { ++ var i = 0; ++ ++ var _iterator4 = _createForOfIteratorHelper(cacheToClone.map.entries()), ++ _step4; ++ ++ try { ++ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { ++ var _this$map; ++ ++ var entry = _step4.value; ++ if (++i > OneObjectCache.MAX_CACHE_ENTRIES) break; ++ ++ (_this$map = this.map).set.apply(_this$map, _toConsumableArray(entry)); ++ } ++ } catch (err) { ++ _iterator4.e(err); ++ } finally { ++ _iterator4.f(); ++ } ++ } ++ } ++ ++ _createClass(OneObjectCache, [{ ++ key: "get", ++ value: function get(key) { ++ var result = this.map.get(key); ++ ++ if (result) { ++ this.hits++; ++ this.report(); ++ } ++ ++ this.calls++; ++ return result; ++ } ++ }, { ++ key: "set", ++ value: function set(key, value) { ++ this.map.set(key, value); ++ this.misses++; ++ this.report(); ++ } ++ }, { ++ key: "report", ++ value: function report() { ++ /* ++ if (this.calls === 0) return; ++ const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now; ++ const hitRate = ((100 * this.hits) / this.calls).toFixed(0); ++ console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`); ++ */ ++ } ++ }, { ++ key: "setObject", ++ value: function setObject(obj) { ++ if (OneObjectCache.objectMap.get(obj)) throw new RangeError('object already cached'); ++ OneObjectCache.objectMap.set(obj, this); ++ this.report(); ++ } ++ /** ++ * Returns a WeakMap-backed cache that's used to store expensive results ++ * that are associated with a particular Temporal object instance. ++ * ++ * @param obj - object to associate with the cache ++ */ ++ ++ }], [{ ++ key: "getCacheForObject", ++ value: function getCacheForObject(obj) { ++ var cache = OneObjectCache.objectMap.get(obj); ++ ++ if (!cache) { ++ cache = new OneObjectCache(); ++ OneObjectCache.objectMap.set(obj, cache); ++ } ++ ++ return cache; ++ } ++ }]); ++ ++ return OneObjectCache; ++ }(); ++ ++ OneObjectCache.objectMap = new WeakMap(); ++ OneObjectCache.MAX_CACHE_ENTRIES = 1000; ++ ++ function toUtcIsoDateString(_ref) { ++ var isoYear = _ref.isoYear, ++ isoMonth = _ref.isoMonth, ++ isoDay = _ref.isoDay; ++ var yearString = ISOYearString(isoYear); ++ var monthString = ISODateTimePartString(isoMonth); ++ var dayString = ISODateTimePartString(isoDay); ++ return "".concat(yearString, "-").concat(monthString, "-").concat(dayString, "T00:00Z"); ++ } ++ ++ function simpleDateDiff(one, two) { ++ return { ++ years: one.year - two.year, ++ months: one.month - two.month, ++ days: one.day - two.day ++ }; ++ } ++ /** ++ * Implementation helper that's common to all non-ISO calendars ++ */ ++ ++ ++ var HelperBase = /*#__PURE__*/function () { ++ function HelperBase() { ++ _classCallCheck(this, HelperBase); ++ ++ // The short era format works for all calendars except Japanese, which will ++ // override. ++ this.eraLength = 'short'; // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ ++ this.hasEra = true; ++ } ++ ++ _createClass(HelperBase, [{ ++ key: "getFormatter", ++ value: function getFormatter() { ++ // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per ++ // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one ++ // DateTimeFormat instance per calendar. Caching is lazy so we only pay for ++ // calendars that are used. Note that the nonIsoHelperBase object is spread ++ // into each each calendar's implementation before any cache is created, so ++ // each calendar gets its own separate cached formatter. ++ if (typeof this.formatter === 'undefined') { ++ this.formatter = new IntlDateTimeFormat("en-US-u-ca-".concat(this.id), { ++ day: 'numeric', ++ month: 'numeric', ++ year: 'numeric', ++ era: this.eraLength, ++ timeZone: 'UTC' ++ }); ++ } ++ ++ return this.formatter; ++ } ++ }, { ++ key: "isoToCalendarDate", ++ value: function isoToCalendarDate(isoDate, cache) { ++ var _this = this; ++ ++ var isoYear = isoDate.year, ++ isoMonth = isoDate.month, ++ isoDay = isoDate.day; ++ var key = JSON.stringify({ ++ func: 'isoToCalendarDate', ++ isoYear: isoYear, ++ isoMonth: isoMonth, ++ isoDay: isoDay, ++ id: this.id ++ }); ++ var cached = cache.get(key); ++ if (cached) return cached; ++ var dateTimeFormat = this.getFormatter(); ++ var parts, isoString; ++ ++ try { ++ isoString = toUtcIsoDateString({ ++ isoYear: isoYear, ++ isoMonth: isoMonth, ++ isoDay: isoDay ++ }); ++ parts = dateTimeFormat.formatToParts(new Date(isoString)); ++ } catch (e) { ++ throw new RangeError("Invalid ISO date: ".concat(JSON.stringify({ ++ isoYear: isoYear, ++ isoMonth: isoMonth, ++ isoDay: isoDay ++ }))); ++ } ++ ++ var result = {}; ++ ++ var _iterator5 = _createForOfIteratorHelper(parts), ++ _step5; ++ ++ try { ++ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { ++ var _step5$value = _step5.value, ++ type = _step5$value.type, ++ value = _step5$value.value; ++ if (type === 'year') result.eraYear = +value; // TODO: remove this type annotation when `relatedYear` gets into TS lib types ++ ++ if (type === 'relatedYear') result.eraYear = +value; ++ ++ if (type === 'month') { ++ var matches = /^([0-9]*)(.*?)$/.exec(value); ++ ++ if (!matches || matches.length != 3 || !matches[1] && !matches[2]) { ++ throw new RangeError("Unexpected month: ".concat(value)); ++ } // If the month has no numeric part (should only see this for the Hebrew ++ // calendar with newer FF / Chromium versions; see ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a ++ // placeholder month index of `1` and rely on the derived class to ++ // calculate the correct month index from the month name stored in ++ // `monthExtra`. ++ ++ ++ result.month = matches[1] ? +matches[1] : 1; ++ ++ if (result.month < 1) { ++ throw new RangeError("Invalid month ".concat(value, " from ").concat(isoString, "[u-ca-").concat(this.id, "]") + ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'); ++ } ++ ++ if (result.month > 13) { ++ throw new RangeError("Invalid month ".concat(value, " from ").concat(isoString, "[u-ca-").concat(this.id, "]") + ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'); ++ } // The ICU formats for the Hebrew calendar no longer support a numeric ++ // month format. So we'll rely on the derived class to interpret it. ++ // `monthExtra` is also used on the Chinese calendar to handle a suffix ++ // "bis" indicating a leap month. ++ ++ ++ if (matches[2]) result.monthExtra = matches[2]; ++ } ++ ++ if (type === 'day') result.day = +value; ++ ++ if (this.hasEra && type === 'era' && value != null && value !== '') { ++ // The convention for Temporal era values is lowercase, so following ++ // that convention in this prototype. Punctuation is removed, accented ++ // letters are normalized, and spaces are replaced with dashes. ++ // E.g.: "ERA0" => "era0", "Before R.O.C." => "before-roc", "En’ō" => "eno" ++ // The call to normalize() and the replacement regex deals with era ++ // names that contain non-ASCII characters like Japanese eras. Also ++ // ignore extra content in parentheses like JPN era date ranges. ++ value = value.split(' (')[0]; ++ result.era = value.normalize('NFD').replace(/(?:(?![ \x2D0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\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\u0AF9\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-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\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-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\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-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\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]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])[\s\S])/g, '').replace(' ', '-').toLowerCase(); ++ } ++ } ++ } catch (err) { ++ _iterator5.e(err); ++ } finally { ++ _iterator5.f(); ++ } ++ ++ if (result.eraYear === undefined) { ++ // Node 12 has outdated ICU data that lacks the `relatedYear` field in the ++ // output of Intl.DateTimeFormat.formatToParts. ++ throw new RangeError("Intl.DateTimeFormat.formatToParts lacks relatedYear in ".concat(this.id, " calendar. Try Node 14+ or modern browsers.")); ++ } // Translate eras that may be handled differently by Temporal vs. by Intl ++ // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526. ++ ++ ++ if (this.reviseIntlEra) { ++ var _this$reviseIntlEra = this.reviseIntlEra(result, isoDate), ++ era = _this$reviseIntlEra.era, ++ eraYear = _this$reviseIntlEra.eraYear; ++ ++ result.era = era; ++ result.eraYear = eraYear; ++ } ++ ++ if (this.checkIcuBugs) this.checkIcuBugs(isoDate); ++ var calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true); ++ if (calendarDate.year === undefined) throw new RangeError("Missing year converting ".concat(JSON.stringify(isoDate))); ++ if (calendarDate.month === undefined) throw new RangeError("Missing month converting ".concat(JSON.stringify(isoDate))); ++ if (calendarDate.day === undefined) throw new RangeError("Missing day converting ".concat(JSON.stringify(isoDate))); ++ cache.set(key, calendarDate); // Also cache the reverse mapping ++ ++ ['constrain', 'reject'].forEach(function (overflow) { ++ var keyReverse = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: calendarDate.year, ++ month: calendarDate.month, ++ day: calendarDate.day, ++ overflow: overflow, ++ id: _this.id ++ }); ++ cache.set(keyReverse, isoDate); ++ }); ++ return calendarDate; ++ } ++ }, { ++ key: "validateCalendarDate", ++ value: function validateCalendarDate(calendarDate) { ++ var era = calendarDate.era, ++ month = calendarDate.month, ++ year = calendarDate.year, ++ day = calendarDate.day, ++ eraYear = calendarDate.eraYear, ++ monthCode = calendarDate.monthCode, ++ monthExtra = calendarDate.monthExtra; // When there's a suffix (e.g. "5bis" for a leap month in Chinese calendar) ++ // the derived class must deal with it. ++ ++ if (monthExtra !== undefined) throw new RangeError('Unexpected `monthExtra` value'); ++ if (year === undefined && eraYear === undefined) throw new TypeError('year or eraYear is required'); ++ if (month === undefined && monthCode === undefined) throw new TypeError('month or monthCode is required'); ++ if (day === undefined) throw new RangeError('Missing day'); ++ ++ if (monthCode !== undefined) { ++ if (typeof monthCode !== 'string') { ++ throw new RangeError("monthCode must be a string, not ".concat(_typeof(monthCode))); ++ } ++ ++ if (!/^M([01]?\d)(L?)$/.test(monthCode)) throw new RangeError("Invalid monthCode: ".concat(monthCode)); ++ } ++ ++ if (this.constantEra) { ++ if (era !== undefined && era !== this.constantEra) { ++ throw new RangeError("era must be ".concat(this.constantEra, ", not ").concat(era)); ++ } ++ ++ if (eraYear !== undefined && year !== undefined && eraYear !== year) { ++ throw new RangeError("eraYear ".concat(eraYear, " does not match year ").concat(year)); ++ } ++ } ++ } ++ /** ++ * Allows derived calendars to add additional fields and/or to make ++ * adjustments e.g. to set the era based on the date or to revise the month ++ * number in lunisolar calendars per ++ * https://github.com/tc39/proposal-temporal/issues/1203. ++ * ++ * The base implementation fills in missing values by assuming the simplest ++ * possible calendar: ++ * - no eras or a constant era defined in `.constantEra` ++ * - non-lunisolar calendar (no leap months) ++ * */ ++ ++ }, { ++ key: "adjustCalendarDate", ++ value: function adjustCalendarDate(calendarDateParam) { ++ var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var overflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'constrain'; ++ if (this.calendarType === 'lunisolar') throw new RangeError('Override required for lunisolar calendars'); ++ var calendarDate = calendarDateParam; ++ this.validateCalendarDate(calendarDate); // For calendars that always use the same era, set it here so that derived ++ // calendars won't need to implement this method simply to set the era. ++ ++ if (this.constantEra) { ++ // year and eraYear always match when there's only one possible era ++ var _calendarDate = calendarDate, ++ year = _calendarDate.year, ++ eraYear = _calendarDate.eraYear; ++ calendarDate = _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ era: this.constantEra, ++ year: year !== undefined ? year : eraYear, ++ eraYear: eraYear !== undefined ? eraYear : year ++ }); ++ } ++ ++ var largestMonth = this.monthsInYear(calendarDate, cache); ++ var _calendarDate2 = calendarDate, ++ month = _calendarDate2.month, ++ monthCode = _calendarDate2.monthCode; ++ ++ var _resolveNonLunisolarM = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth); ++ ++ month = _resolveNonLunisolarM.month; ++ monthCode = _resolveNonLunisolarM.monthCode; ++ return _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ month: month, ++ monthCode: monthCode ++ }); ++ } ++ }, { ++ key: "regulateMonthDayNaive", ++ value: function regulateMonthDayNaive(calendarDate, overflow, cache) { ++ var largestMonth = this.monthsInYear(calendarDate, cache); ++ var month = calendarDate.month, ++ day = calendarDate.day; ++ ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, largestMonth); ++ RejectToRange(day, 1, this.maximumMonthLength(calendarDate)); ++ } else { ++ month = ConstrainToRange(month, 1, largestMonth); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength(_objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ month: month ++ }))); ++ } ++ ++ return _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ month: month, ++ day: day ++ }); ++ } ++ }, { ++ key: "calendarToIsoDate", ++ value: function calendarToIsoDate(dateParam) { ++ var _this2 = this; ++ ++ var overflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'constrain'; ++ var cache = arguments.length > 2 ? arguments[2] : undefined; ++ var originalDate = dateParam; // First, normalize the calendar date to ensure that (year, month, day) ++ // are all present, converting monthCode and eraYear if needed. ++ ++ var date = this.adjustCalendarDate(dateParam, cache, overflow, false); // Fix obviously out-of-bounds values. Values that are valid generally, but ++ // not in this particular year, may not be caught here for some calendars. ++ // If so, these will be handled lower below. ++ ++ date = this.regulateMonthDayNaive(date, overflow, cache); ++ var _date = date, ++ year = _date.year, ++ month = _date.month, ++ day = _date.day; ++ var key = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: year, ++ month: month, ++ day: day, ++ overflow: overflow, ++ id: this.id ++ }); ++ var cached = cache.get(key); ++ if (cached) return cached; // If YMD are present in the input but the input has been constrained ++ // already, then cache both the original value and the constrained value. ++ ++ var keyOriginal; ++ ++ if (originalDate.year !== undefined && originalDate.month !== undefined && originalDate.day !== undefined && (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) { ++ keyOriginal = JSON.stringify({ ++ func: 'calendarToIsoDate', ++ year: originalDate.year, ++ month: originalDate.month, ++ day: originalDate.day, ++ overflow: overflow, ++ id: this.id ++ }); ++ cached = cache.get(keyOriginal); ++ if (cached) return cached; ++ } // First, try to roughly guess the result ++ ++ ++ var isoEstimate = this.estimateIsoDate({ ++ year: year, ++ month: month, ++ day: day ++ }); ++ ++ var calculateSameMonthResult = function calculateSameMonthResult(diffDays) { ++ // If the estimate is in the same year & month as the target, then we can ++ // calculate the result exactly and short-circuit any additional logic. ++ // This optimization assumes that months are continuous. It would break if ++ // a calendar skipped days, like the Julian->Gregorian switchover. But the ++ // only ICU calendars that currently skip days (japanese/roc/buddhist) is ++ // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) ++ // that's currently detected by `checkIcuBugs()` which will throw. So ++ // this optimization should be safe for all ICU calendars. ++ var testIsoEstimate = _this2.addDaysIso(isoEstimate, diffDays); ++ ++ if (date.day > _this2.minimumMonthLength(date)) { ++ // There's a chance that the calendar date is out of range. Throw or ++ // constrain if so. ++ var testCalendarDate = _this2.isoToCalendarDate(testIsoEstimate, cache); ++ ++ while (testCalendarDate.month !== month || testCalendarDate.year !== year) { ++ if (overflow === 'reject') { ++ throw new RangeError("day ".concat(day, " does not exist in month ").concat(month, " of year ").concat(year)); ++ } // Back up a day at a time until we're not hanging over the month end ++ ++ ++ testIsoEstimate = _this2.addDaysIso(testIsoEstimate, -1); ++ testCalendarDate = _this2.isoToCalendarDate(testIsoEstimate, cache); ++ } ++ } ++ ++ return testIsoEstimate; ++ }; ++ ++ var sign = 0; ++ var roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ var diff = simpleDateDiff(date, roundtripEstimate); ++ ++ if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) { ++ var diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days; ++ isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate); ++ roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ diff = simpleDateDiff(date, roundtripEstimate); ++ ++ if (diff.years === 0 && diff.months === 0) { ++ isoEstimate = calculateSameMonthResult(diff.days); ++ } else { ++ sign = this.compareCalendarDates(date, roundtripEstimate); ++ } ++ } // If the initial guess is not in the same month, then then bisect the ++ // distance to the target, starting with 8 days per step. ++ ++ ++ var increment = 8; ++ var maybeConstrained = false; ++ ++ while (sign) { ++ isoEstimate = this.addDaysIso(isoEstimate, sign * increment); ++ var oldRoundtripEstimate = roundtripEstimate; ++ roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache); ++ var oldSign = sign; ++ sign = this.compareCalendarDates(date, roundtripEstimate); ++ ++ if (sign) { ++ diff = simpleDateDiff(date, roundtripEstimate); ++ ++ if (diff.years === 0 && diff.months === 0) { ++ isoEstimate = calculateSameMonthResult(diff.days); // Signal the loop condition that there's a match. ++ ++ sign = 0; // If the calendar day is larger than the minimal length for this ++ // month, then it might be larger than the actual length of the month. ++ // So we won't cache it as the correct calendar date for this ISO ++ // date. ++ ++ maybeConstrained = date.day > this.minimumMonthLength(date); ++ } else if (oldSign && sign !== oldSign) { ++ if (increment > 1) { ++ // If the estimate overshot the target, try again with a smaller increment ++ // in the reverse direction. ++ increment /= 2; ++ } else { ++ // Increment is 1, and neither the previous estimate nor the new ++ // estimate is correct. The only way that can happen is if the ++ // original date was an invalid value that will be constrained or ++ // rejected here. ++ if (overflow === 'reject') { ++ throw new RangeError("Can't find ISO date from calendar date: ".concat(JSON.stringify(_objectSpread2({}, originalDate)))); ++ } else { ++ // To constrain, pick the earliest value ++ var order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate); // If current value is larger, then back up to the previous value. ++ ++ if (order > 0) isoEstimate = this.addDaysIso(isoEstimate, -1); ++ maybeConstrained = true; ++ sign = 0; ++ } ++ } ++ } ++ } ++ } ++ ++ cache.set(key, isoEstimate); ++ if (keyOriginal) cache.set(keyOriginal, isoEstimate); ++ ++ if (date.year === undefined || date.month === undefined || date.day === undefined || date.monthCode === undefined || this.hasEra && (date.era === undefined || date.eraYear === undefined)) { ++ throw new RangeError('Unexpected missing property'); ++ } ++ ++ if (!maybeConstrained) { ++ // Also cache the reverse mapping ++ var keyReverse = JSON.stringify({ ++ func: 'isoToCalendarDate', ++ isoYear: isoEstimate.year, ++ isoMonth: isoEstimate.month, ++ isoDay: isoEstimate.day, ++ id: this.id ++ }); ++ cache.set(keyReverse, date); ++ } ++ ++ return isoEstimate; ++ } ++ }, { ++ key: "temporalToCalendarDate", ++ value: function temporalToCalendarDate(date, cache) { ++ var isoDate = { ++ year: GetSlot(date, ISO_YEAR), ++ month: GetSlot(date, ISO_MONTH), ++ day: GetSlot(date, ISO_DAY) ++ }; ++ var result = this.isoToCalendarDate(isoDate, cache); ++ return result; ++ } ++ }, { ++ key: "compareCalendarDates", ++ value: function compareCalendarDates(date1Param, date2Param) { ++ // `date1` and `date2` are already records. The calls below simply validate ++ // that all three required fields are present. ++ var date1 = PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']); ++ var date2 = PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']); ++ if (date1.year !== date2.year) return ComparisonResult(date1.year - date2.year); ++ if (date1.month !== date2.month) return ComparisonResult(date1.month - date2.month); ++ if (date1.day !== date2.day) return ComparisonResult(date1.day - date2.day); ++ return 0; ++ } ++ /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */ ++ ++ }, { ++ key: "regulateDate", ++ value: function regulateDate(calendarDate) { ++ var overflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'constrain'; ++ var cache = arguments.length > 2 ? arguments[2] : undefined; ++ var isoDate = this.calendarToIsoDate(calendarDate, overflow, cache); ++ return this.isoToCalendarDate(isoDate, cache); ++ } ++ }, { ++ key: "addDaysIso", ++ value: function addDaysIso(isoDate, days) { ++ var added = AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain'); ++ return added; ++ } ++ }, { ++ key: "addDaysCalendar", ++ value: function addDaysCalendar(calendarDate, days, cache) { ++ var isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ var addedIso = this.addDaysIso(isoDate, days); ++ var addedCalendar = this.isoToCalendarDate(addedIso, cache); ++ return addedCalendar; ++ } ++ }, { ++ key: "addMonthsCalendar", ++ value: function addMonthsCalendar(calendarDateParam, months, overflow, cache) { ++ var calendarDate = calendarDateParam; ++ var _calendarDate3 = calendarDate, ++ day = _calendarDate3.day; ++ ++ for (var i = 0, absMonths = MathAbs(months); i < absMonths; i++) { ++ var _calendarDate4 = calendarDate, ++ month = _calendarDate4.month; ++ var oldCalendarDate = calendarDate; ++ var days = months < 0 ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache)) : this.daysInMonth(calendarDate, cache); ++ var isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ var addedIso = this.addDaysIso(isoDate, days); ++ calendarDate = this.isoToCalendarDate(addedIso, cache); // Normally, we can advance one month by adding the number of days in the ++ // current month. However, if we're at the end of the current month and ++ // the next month has fewer days, then we rolled over to the after-next ++ // month. Below we detect this condition and back up until we're back in ++ // the desired month. ++ ++ if (months > 0) { ++ var monthsInOldYear = this.monthsInYear(oldCalendarDate, cache); ++ ++ while (calendarDate.month - 1 !== month % monthsInOldYear) { ++ addedIso = this.addDaysIso(addedIso, -1); ++ calendarDate = this.isoToCalendarDate(addedIso, cache); ++ } ++ } ++ ++ if (calendarDate.day !== day) { ++ // try to retain the original day-of-month, if possible ++ calendarDate = this.regulateDate(_objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ day: day ++ }), 'constrain', cache); ++ } ++ } ++ ++ if (overflow === 'reject' && calendarDate.day !== day) { ++ throw new RangeError("Day ".concat(day, " does not exist in resulting calendar month")); ++ } ++ ++ return calendarDate; ++ } ++ }, { ++ key: "addCalendar", ++ value: function addCalendar(calendarDate, _ref2, overflow, cache) { ++ var _ref2$years = _ref2.years, ++ years = _ref2$years === void 0 ? 0 : _ref2$years, ++ _ref2$months = _ref2.months, ++ months = _ref2$months === void 0 ? 0 : _ref2$months, ++ _ref2$weeks = _ref2.weeks, ++ weeks = _ref2$weeks === void 0 ? 0 : _ref2$weeks, ++ _ref2$days = _ref2.days, ++ days = _ref2$days === void 0 ? 0 : _ref2$days; ++ var year = calendarDate.year, ++ day = calendarDate.day, ++ monthCode = calendarDate.monthCode; ++ var addedYears = this.adjustCalendarDate({ ++ year: year + years, ++ monthCode: monthCode, ++ day: day ++ }, cache); ++ var addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache); ++ var initialDays = days + weeks * 7; ++ var addedDays = this.addDaysCalendar(addedMonths, initialDays, cache); ++ return addedDays; ++ } ++ }, { ++ key: "untilCalendar", ++ value: function untilCalendar(calendarOne, calendarTwo, largestUnit, cache) { ++ var days = 0; ++ var weeks = 0; ++ var months = 0; ++ var years = 0; ++ ++ switch (largestUnit) { ++ case 'day': ++ days = this.calendarDaysUntil(calendarOne, calendarTwo, cache); ++ break; ++ ++ case 'week': ++ { ++ var totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache); ++ days = totalDays % 7; ++ weeks = (totalDays - days) / 7; ++ break; ++ } ++ ++ case 'month': ++ case 'year': ++ { ++ var diffYears = calendarTwo.year - calendarOne.year; ++ var diffMonths = calendarTwo.month - calendarOne.month; ++ var diffDays = calendarTwo.day - calendarOne.day; ++ var sign = this.compareCalendarDates(calendarTwo, calendarOne); ++ ++ if (!sign) { ++ return { ++ years: 0, ++ months: 0, ++ weeks: 0, ++ days: 0 ++ }; ++ } ++ ++ if (largestUnit === 'year' && diffYears) { ++ var isOneFurtherInYear = diffMonths * sign < 0 || diffMonths === 0 && diffDays * sign < 0; ++ years = isOneFurtherInYear ? diffYears - sign : diffYears; ++ } ++ ++ var yearsAdded = years ? this.addCalendar(calendarOne, { ++ years: years ++ }, 'constrain', cache) : calendarOne; // Now we have less than one year remaining. Add one month at a time ++ // until we go over the target, then back up one month and calculate ++ // remaining days and weeks. ++ ++ var current; ++ var next = yearsAdded; ++ ++ do { ++ months += sign; ++ current = next; ++ next = this.addMonthsCalendar(current, sign, 'constrain', cache); ++ ++ if (next.day !== calendarOne.day) { ++ // In case the day was constrained down, try to un-constrain it ++ next = this.regulateDate(_objectSpread2(_objectSpread2({}, next), {}, { ++ day: calendarOne.day ++ }), 'constrain', cache); ++ } ++ } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0); ++ ++ months -= sign; // correct for loop above which overshoots by 1 ++ ++ var remainingDays = this.calendarDaysUntil(current, calendarTwo, cache); ++ days = remainingDays; ++ break; ++ } ++ } ++ ++ return { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days ++ }; ++ } ++ }, { ++ key: "daysInMonth", ++ value: function daysInMonth(calendarDate, cache) { ++ // Add enough days to roll over to the next month. One we're in the next ++ // month, we can calculate the length of the current month. NOTE: This ++ // algorithm assumes that months are continuous. It would break if a ++ // calendar skipped days, like the Julian->Gregorian switchover. But the ++ // only ICU calendars that currently skip days (japanese/roc/buddhist) is a ++ // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) ++ // that's currently detected by `checkIcuBugs()` which will throw. So this ++ // code should be safe for all ICU calendars. ++ var day = calendarDate.day; ++ var max = this.maximumMonthLength(calendarDate); ++ var min = this.minimumMonthLength(calendarDate); // easiest case: we already know the month length if min and max are the same. ++ ++ if (min === max) return min; // Add enough days to get into the next month, without skipping it ++ ++ var increment = day <= max - min ? max : min; ++ var isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ var addedIsoDate = this.addDaysIso(isoDate, increment); ++ var addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache); // Now back up to the last day of the original month ++ ++ var endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day); ++ var endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache); ++ return endOfMonthCalendar.day; ++ } ++ }, { ++ key: "daysInPreviousMonth", ++ value: function daysInPreviousMonth(calendarDate, cache) { ++ var day = calendarDate.day, ++ month = calendarDate.month, ++ year = calendarDate.year; // Check to see if we already know the month length, and return it if so ++ ++ var previousMonthYear = month > 1 ? year : year - 1; ++ var previousMonthDate = { ++ year: previousMonthYear, ++ month: month, ++ day: 1 ++ }; ++ var previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache); ++ previousMonthDate = _objectSpread2(_objectSpread2({}, previousMonthDate), {}, { ++ month: previousMonth ++ }); ++ var min = this.minimumMonthLength(previousMonthDate); ++ var max = this.maximumMonthLength(previousMonthDate); ++ if (min === max) return max; ++ var isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache); ++ var lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day); ++ var lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache); ++ return lastDayOfPreviousMonthCalendar.day; ++ } ++ }, { ++ key: "startOfCalendarYear", ++ value: function startOfCalendarYear(calendarDate) { ++ return { ++ year: calendarDate.year, ++ month: 1, ++ monthCode: 'M01', ++ day: 1 ++ }; ++ } ++ }, { ++ key: "startOfCalendarMonth", ++ value: function startOfCalendarMonth(calendarDate) { ++ return { ++ year: calendarDate.year, ++ month: calendarDate.month, ++ day: 1 ++ }; ++ } ++ }, { ++ key: "calendarDaysUntil", ++ value: function calendarDaysUntil(calendarOne, calendarTwo, cache) { ++ var oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache); ++ var twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache); ++ return this.isoDaysUntil(oneIso, twoIso); ++ } ++ }, { ++ key: "isoDaysUntil", ++ value: function isoDaysUntil(oneIso, twoIso) { ++ var duration = DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day'); ++ return duration.days; ++ } ++ }, { ++ key: "monthDayFromFields", ++ value: function monthDayFromFields(fields, overflow, cache) { ++ var year = fields.year, ++ month = fields.month, ++ monthCode = fields.monthCode, ++ day = fields.day, ++ era = fields.era, ++ eraYear = fields.eraYear; ++ ++ if (monthCode === undefined) { ++ if (year === undefined && (era === undefined || eraYear === undefined)) { ++ throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required'); ++ } ++ ++ var _this$adjustCalendarD = this.adjustCalendarDate({ ++ year: year, ++ month: month, ++ monthCode: monthCode, ++ day: day, ++ era: era, ++ eraYear: eraYear ++ }, cache, overflow); ++ ++ monthCode = _this$adjustCalendarD.monthCode; ++ year = _this$adjustCalendarD.year; ++ } ++ ++ var isoYear, isoMonth, isoDay; ++ var closestCalendar, closestIso; // Look backwards starting from the calendar year of 1972-01-01 up to 100 ++ // calendar years to find a year that has this month and day. Normal months ++ // and days will match immediately, but for leap days and leap months we may ++ // have to look for a while. ++ ++ var startDateIso = { ++ year: 1972, ++ month: 1, ++ day: 1 ++ }; ++ ++ var _this$isoToCalendarDa = this.isoToCalendarDate(startDateIso, cache), ++ calendarYear = _this$isoToCalendarDa.year; ++ ++ for (var i = 0; i < 100; i++) { ++ var testCalendarDate = this.adjustCalendarDate({ ++ day: day, ++ monthCode: monthCode, ++ year: calendarYear - i ++ }, cache); ++ var isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache); ++ var roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache); ++ isoYear = isoDate.year; ++ isoMonth = isoDate.month; ++ isoDay = isoDate.day; ++ ++ if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) { ++ return { ++ month: isoMonth, ++ day: isoDay, ++ year: isoYear ++ }; ++ } else if (overflow === 'constrain') { ++ // non-ISO constrain algorithm tries to find the closest date in a matching month ++ if (closestCalendar === undefined || roundTripCalendarDate.monthCode === closestCalendar.monthCode && roundTripCalendarDate.day > closestCalendar.day) { ++ closestCalendar = roundTripCalendarDate; ++ closestIso = isoDate; ++ } ++ } ++ } ++ ++ if (overflow === 'constrain' && closestIso !== undefined) return closestIso; ++ throw new RangeError("No recent ".concat(this.id, " year with monthCode ").concat(monthCode, " and day ").concat(day)); ++ } ++ }]); ++ ++ return HelperBase; ++ }(); ++ ++ var HebrewHelper = /*#__PURE__*/function (_HelperBase) { ++ _inherits(HebrewHelper, _HelperBase); ++ ++ var _super = _createSuper(HebrewHelper); ++ ++ function HebrewHelper() { ++ var _this3; ++ ++ _classCallCheck(this, HebrewHelper); ++ ++ _this3 = _super.apply(this, arguments); ++ _this3.id = 'hebrew'; ++ _this3.calendarType = 'lunisolar'; ++ _this3.months = { ++ Tishri: { ++ leap: 1, ++ regular: 1, ++ monthCode: 'M01', ++ days: 30 ++ }, ++ Heshvan: { ++ leap: 2, ++ regular: 2, ++ monthCode: 'M02', ++ days: { ++ min: 29, ++ max: 30 ++ } ++ }, ++ Kislev: { ++ leap: 3, ++ regular: 3, ++ monthCode: 'M03', ++ days: { ++ min: 29, ++ max: 30 ++ } ++ }, ++ Tevet: { ++ leap: 4, ++ regular: 4, ++ monthCode: 'M04', ++ days: 29 ++ }, ++ Shevat: { ++ leap: 5, ++ regular: 5, ++ monthCode: 'M05', ++ days: 30 ++ }, ++ Adar: { ++ leap: undefined, ++ regular: 6, ++ monthCode: 'M06', ++ days: 29 ++ }, ++ 'Adar I': { ++ leap: 6, ++ regular: undefined, ++ monthCode: 'M05L', ++ days: 30 ++ }, ++ 'Adar II': { ++ leap: 7, ++ regular: undefined, ++ monthCode: 'M06', ++ days: 29 ++ }, ++ Nisan: { ++ leap: 8, ++ regular: 7, ++ monthCode: 'M07', ++ days: 30 ++ }, ++ Iyar: { ++ leap: 9, ++ regular: 8, ++ monthCode: 'M08', ++ days: 29 ++ }, ++ Sivan: { ++ leap: 10, ++ regular: 9, ++ monthCode: 'M09', ++ days: 30 ++ }, ++ Tamuz: { ++ leap: 11, ++ regular: 10, ++ monthCode: 'M10', ++ days: 29 ++ }, ++ Av: { ++ leap: 12, ++ regular: 11, ++ monthCode: 'M11', ++ days: 30 ++ }, ++ Elul: { ++ leap: 13, ++ regular: 12, ++ monthCode: 'M12', ++ days: 29 ++ } ++ }; // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ ++ _this3.hasEra = false; ++ return _this3; ++ } ++ ++ _createClass(HebrewHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate) { ++ var year = calendarDate.year; // FYI: In addition to adding a month in leap years, the Hebrew calendar ++ // also has per-year changes to the number of days of Heshvan and Kislev. ++ // Given that these can be calculated by counting the number of days in ++ // those months, I assume that these DO NOT need to be exposed as ++ // Hebrew-only prototype fields or methods. ++ ++ return (7 * year + 1) % 19 < 7; ++ } ++ }, { ++ key: "monthsInYear", ++ value: function monthsInYear(calendarDate) { ++ return this.inLeapYear(calendarDate) ? 13 : 12; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function minimumMonthLength(calendarDate) { ++ return this.minMaxMonthLength(calendarDate, 'min'); ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function maximumMonthLength(calendarDate) { ++ return this.minMaxMonthLength(calendarDate, 'max'); ++ } ++ }, { ++ key: "minMaxMonthLength", ++ value: function minMaxMonthLength(calendarDate, minOrMax) { ++ var month = calendarDate.month, ++ year = calendarDate.year; ++ var monthCode = this.getMonthCode(year, month); ++ var monthInfo = ObjectEntries(this.months).find(function (m) { ++ return m[1].monthCode === monthCode; ++ }); ++ if (monthInfo === undefined) throw new RangeError("unmatched Hebrew month: ".concat(month)); ++ var daysInMonth = monthInfo[1].days; ++ return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax]; ++ } ++ /** Take a guess at what ISO date a particular calendar date corresponds to */ ++ ++ }, { ++ key: "estimateIsoDate", ++ value: function estimateIsoDate(calendarDate) { ++ var year = calendarDate.year; ++ return { ++ year: year - 3760, ++ month: 1, ++ day: 1 ++ }; ++ } ++ }, { ++ key: "getMonthCode", ++ value: function getMonthCode(year, month) { ++ if (this.inLeapYear({ ++ year: year ++ })) { ++ return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1); ++ } else { ++ return buildMonthCode(month); ++ } ++ } ++ }, { ++ key: "adjustCalendarDate", ++ value: function adjustCalendarDate(calendarDate, cache) { ++ var overflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'constrain'; ++ var fromLegacyDate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; ++ // The incoming type is actually CalendarDate (same as args to ++ // Calendar.dateFromParams) but TS isn't smart enough to follow all the ++ // reassignments below, so as an alternative to 10+ type casts, we'll lie ++ // here and claim that the type has `day` and `year` filled in already. ++ var year = calendarDate.year, ++ eraYear = calendarDate.eraYear, ++ month = calendarDate.month, ++ monthCode = calendarDate.monthCode, ++ day = calendarDate.day, ++ monthExtra = calendarDate.monthExtra; ++ if (year === undefined && eraYear !== undefined) year = eraYear; ++ if (eraYear === undefined && year !== undefined) eraYear = year; ++ ++ if (fromLegacyDate) { ++ // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'` ++ // output returns the numeric equivalent of `month` as a string, meaning ++ // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year ++ // means Adar. In this case, `month` will already be correct and no action ++ // is needed. However, in Node 14 and later formatToParts returns the name ++ // of the Hebrew month (e.g. "Tevet"), so we'll need to look up the ++ // correct `month` using the string name as a key. ++ if (monthExtra) { ++ var monthInfo = this.months[monthExtra]; ++ if (!monthInfo) throw new RangeError("Unrecognized month from formatToParts: ".concat(monthExtra)); ++ month = this.inLeapYear({ ++ year: year ++ }) ? monthInfo.leap : monthInfo.regular; ++ } // Because we're getting data from legacy Date, then `month` will always be present ++ ++ ++ monthCode = this.getMonthCode(year, month); ++ var result = { ++ year: year, ++ month: month, ++ day: day, ++ era: undefined, ++ eraYear: eraYear, ++ monthCode: monthCode ++ }; ++ return result; ++ } else { ++ // When called without input coming from legacy Date output, simply ensure ++ // that all fields are present. ++ this.validateCalendarDate(calendarDate); ++ ++ if (month === undefined) { ++ if (monthCode.endsWith('L')) { ++ if (monthCode !== 'M05L') { ++ throw new RangeError("Hebrew leap month must have monthCode M05L, not ".concat(monthCode)); ++ } ++ ++ month = 6; ++ ++ if (!this.inLeapYear({ ++ year: year ++ })) { ++ if (overflow === 'reject') { ++ throw new RangeError("Hebrew monthCode M05L is invalid in year ".concat(year, " which is not a leap year")); ++ } else { ++ // constrain to last day of previous month (Av) ++ month = 5; ++ day = 30; ++ monthCode = 'M05'; ++ } ++ } ++ } else { ++ month = monthCodeNumberPart(monthCode); // if leap month is before this one, the month index is one more than the month code ++ ++ if (this.inLeapYear({ ++ year: year ++ }) && month >= 6) month++; ++ var largestMonth = this.monthsInYear({ ++ year: year ++ }); ++ if (month < 1 || month > largestMonth) throw new RangeError("Invalid monthCode: ".concat(monthCode)); ++ } ++ } else { ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, this.monthsInYear({ ++ year: year ++ })); ++ RejectToRange(day, 1, this.maximumMonthLength({ ++ year: year, ++ month: month ++ })); ++ } else { ++ month = ConstrainToRange(month, 1, this.monthsInYear({ ++ year: year ++ })); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength({ ++ year: year, ++ month: month ++ })); ++ } ++ ++ if (monthCode === undefined) { ++ monthCode = this.getMonthCode(year, month); ++ } else { ++ var calculatedMonthCode = this.getMonthCode(year, month); ++ ++ if (calculatedMonthCode !== monthCode) { ++ throw new RangeError("monthCode ".concat(monthCode, " doesn't correspond to month ").concat(month, " in Hebrew year ").concat(year)); ++ } ++ } ++ } ++ ++ return _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ day: day, ++ month: month, ++ monthCode: monthCode, ++ year: year, ++ eraYear: eraYear ++ }); ++ } ++ } ++ }]); ++ ++ return HebrewHelper; ++ }(HelperBase); ++ /** ++ * For Temporal purposes, the Islamic calendar is simple because it's always the ++ * same 12 months in the same order. ++ */ ++ ++ ++ var IslamicBaseHelper = /*#__PURE__*/function (_HelperBase2) { ++ _inherits(IslamicBaseHelper, _HelperBase2); ++ ++ var _super2 = _createSuper(IslamicBaseHelper); ++ ++ function IslamicBaseHelper() { ++ var _this4; ++ ++ _classCallCheck(this, IslamicBaseHelper); ++ ++ _this4 = _super2.apply(this, arguments); ++ _this4.calendarType = 'lunar'; ++ _this4.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30; ++ _this4.DAYS_PER_ISO_YEAR = 365.2425; ++ _this4.constantEra = 'ah'; ++ return _this4; ++ } ++ ++ _createClass(IslamicBaseHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate, cache) { ++ // In leap years, the 12th month has 30 days. In non-leap years: 29. ++ var days = this.daysInMonth({ ++ year: calendarDate.year, ++ month: 12, ++ day: 1 ++ }, cache); ++ return days === 30; ++ } ++ }, { ++ key: "monthsInYear", ++ value: function ++ /* calendarYear, cache */ ++ monthsInYear() { ++ return 12; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function ++ /* calendarDate */ ++ minimumMonthLength() { ++ return 29; ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function ++ /* calendarDate */ ++ maximumMonthLength() { ++ return 30; ++ } ++ }, { ++ key: "estimateIsoDate", ++ value: function estimateIsoDate(calendarDate) { ++ var _this$adjustCalendarD2 = this.adjustCalendarDate(calendarDate), ++ year = _this$adjustCalendarD2.year; ++ ++ return { ++ year: MathFloor(year * this.DAYS_PER_ISLAMIC_YEAR / this.DAYS_PER_ISO_YEAR) + 622, ++ month: 1, ++ day: 1 ++ }; ++ } ++ }]); ++ ++ return IslamicBaseHelper; ++ }(HelperBase); // There are 6 Islamic calendars with the same implementation in this polyfill. ++ // They vary only in their ID. They do emit different output from the underlying ++ // Intl implementation, but our code for each of them is identical. ++ ++ ++ var IslamicHelper = /*#__PURE__*/function (_IslamicBaseHelper) { ++ _inherits(IslamicHelper, _IslamicBaseHelper); ++ ++ var _super3 = _createSuper(IslamicHelper); ++ ++ function IslamicHelper() { ++ var _this5; ++ ++ _classCallCheck(this, IslamicHelper); ++ ++ _this5 = _super3.apply(this, arguments); ++ _this5.id = 'islamic'; ++ return _this5; ++ } ++ ++ return _createClass(IslamicHelper); ++ }(IslamicBaseHelper); ++ ++ var IslamicUmalquraHelper = /*#__PURE__*/function (_IslamicBaseHelper2) { ++ _inherits(IslamicUmalquraHelper, _IslamicBaseHelper2); ++ ++ var _super4 = _createSuper(IslamicUmalquraHelper); ++ ++ function IslamicUmalquraHelper() { ++ var _this6; ++ ++ _classCallCheck(this, IslamicUmalquraHelper); ++ ++ _this6 = _super4.apply(this, arguments); ++ _this6.id = 'islamic-umalqura'; ++ return _this6; ++ } ++ ++ return _createClass(IslamicUmalquraHelper); ++ }(IslamicBaseHelper); ++ ++ var IslamicTblaHelper = /*#__PURE__*/function (_IslamicBaseHelper3) { ++ _inherits(IslamicTblaHelper, _IslamicBaseHelper3); ++ ++ var _super5 = _createSuper(IslamicTblaHelper); ++ ++ function IslamicTblaHelper() { ++ var _this7; ++ ++ _classCallCheck(this, IslamicTblaHelper); ++ ++ _this7 = _super5.apply(this, arguments); ++ _this7.id = 'islamic-tbla'; ++ return _this7; ++ } ++ ++ return _createClass(IslamicTblaHelper); ++ }(IslamicBaseHelper); ++ ++ var IslamicCivilHelper = /*#__PURE__*/function (_IslamicBaseHelper4) { ++ _inherits(IslamicCivilHelper, _IslamicBaseHelper4); ++ ++ var _super6 = _createSuper(IslamicCivilHelper); ++ ++ function IslamicCivilHelper() { ++ var _this8; ++ ++ _classCallCheck(this, IslamicCivilHelper); ++ ++ _this8 = _super6.apply(this, arguments); ++ _this8.id = 'islamic-civil'; ++ return _this8; ++ } ++ ++ return _createClass(IslamicCivilHelper); ++ }(IslamicBaseHelper); ++ ++ var IslamicRgsaHelper = /*#__PURE__*/function (_IslamicBaseHelper5) { ++ _inherits(IslamicRgsaHelper, _IslamicBaseHelper5); ++ ++ var _super7 = _createSuper(IslamicRgsaHelper); ++ ++ function IslamicRgsaHelper() { ++ var _this9; ++ ++ _classCallCheck(this, IslamicRgsaHelper); ++ ++ _this9 = _super7.apply(this, arguments); ++ _this9.id = 'islamic-rgsa'; ++ return _this9; ++ } ++ ++ return _createClass(IslamicRgsaHelper); ++ }(IslamicBaseHelper); ++ ++ var IslamicCcHelper = /*#__PURE__*/function (_IslamicBaseHelper6) { ++ _inherits(IslamicCcHelper, _IslamicBaseHelper6); ++ ++ var _super8 = _createSuper(IslamicCcHelper); ++ ++ function IslamicCcHelper() { ++ var _this10; ++ ++ _classCallCheck(this, IslamicCcHelper); ++ ++ _this10 = _super8.apply(this, arguments); ++ _this10.id = 'islamicc'; ++ return _this10; ++ } ++ ++ return _createClass(IslamicCcHelper); ++ }(IslamicBaseHelper); ++ ++ var PersianHelper = /*#__PURE__*/function (_HelperBase3) { ++ _inherits(PersianHelper, _HelperBase3); ++ ++ var _super9 = _createSuper(PersianHelper); ++ ++ function PersianHelper() { ++ var _this11; ++ ++ _classCallCheck(this, PersianHelper); ++ ++ _this11 = _super9.apply(this, arguments); ++ _this11.id = 'persian'; ++ _this11.calendarType = 'solar'; ++ _this11.constantEra = 'ap'; ++ return _this11; ++ } ++ ++ _createClass(PersianHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate, cache) { ++ // Same logic (count days in the last month) for Persian as for Islamic, ++ // even though Persian is solar and Islamic is lunar. ++ return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache); ++ } ++ }, { ++ key: "monthsInYear", ++ value: function ++ /* calendarYear, cache */ ++ monthsInYear() { ++ return 12; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function minimumMonthLength(calendarDate) { ++ var month = calendarDate.month; ++ if (month === 12) return 29; ++ return month <= 6 ? 31 : 30; ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function maximumMonthLength(calendarDate) { ++ var month = calendarDate.month; ++ if (month === 12) return 30; ++ return month <= 6 ? 31 : 30; ++ } ++ }, { ++ key: "estimateIsoDate", ++ value: function estimateIsoDate(calendarDate) { ++ var _this$adjustCalendarD3 = this.adjustCalendarDate(calendarDate), ++ year = _this$adjustCalendarD3.year; ++ ++ return { ++ year: year + 621, ++ month: 1, ++ day: 1 ++ }; ++ } ++ }]); ++ ++ return PersianHelper; ++ }(HelperBase); ++ ++ var IndianHelper = /*#__PURE__*/function (_HelperBase4) { ++ _inherits(IndianHelper, _HelperBase4); ++ ++ var _super10 = _createSuper(IndianHelper); ++ ++ function IndianHelper() { ++ var _this12; ++ ++ _classCallCheck(this, IndianHelper); ++ ++ _this12 = _super10.apply(this, arguments); ++ _this12.id = 'indian'; ++ _this12.calendarType = 'solar'; ++ _this12.constantEra = 'saka'; // Indian months always start at the same well-known Gregorian month and ++ // day. So this conversion is easy and fast. See ++ // https://en.wikipedia.org/wiki/Indian_national_calendar ++ ++ _this12.months = { ++ 1: { ++ length: 30, ++ month: 3, ++ day: 22, ++ leap: { ++ length: 31, ++ month: 3, ++ day: 21 ++ } ++ }, ++ 2: { ++ length: 31, ++ month: 4, ++ day: 21 ++ }, ++ 3: { ++ length: 31, ++ month: 5, ++ day: 22 ++ }, ++ 4: { ++ length: 31, ++ month: 6, ++ day: 22 ++ }, ++ 5: { ++ length: 31, ++ month: 7, ++ day: 23 ++ }, ++ 6: { ++ length: 31, ++ month: 8, ++ day: 23 ++ }, ++ 7: { ++ length: 30, ++ month: 9, ++ day: 23 ++ }, ++ 8: { ++ length: 30, ++ month: 10, ++ day: 23 ++ }, ++ 9: { ++ length: 30, ++ month: 11, ++ day: 22 ++ }, ++ 10: { ++ length: 30, ++ month: 12, ++ day: 22 ++ }, ++ 11: { ++ length: 30, ++ month: 1, ++ nextYear: true, ++ day: 21 ++ }, ++ 12: { ++ length: 30, ++ month: 2, ++ nextYear: true, ++ day: 20 ++ } ++ }; // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian ++ // calendar output to fail for all dates before 0001-01-01 ISO. For example, ++ // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as ++ // expected. ++ ++ _this12.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { ++ timeZone: 'UTC' ++ }) !== '10/11/-79 Saka'; ++ return _this12; ++ } ++ ++ _createClass(IndianHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate) { ++ // From https://en.wikipedia.org/wiki/Indian_national_calendar: ++ // Years are counted in the Saka era, which starts its year 0 in the year 78 ++ // of the Common Era. To determine leap years, add 78 to the Saka year – if ++ // the result is a leap year in the Gregorian calendar, then the Saka year ++ // is a leap year as well. ++ return isGregorianLeapYear(calendarDate.year + 78); ++ } ++ }, { ++ key: "monthsInYear", ++ value: function ++ /* calendarYear, cache */ ++ monthsInYear() { ++ return 12; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function minimumMonthLength(calendarDate) { ++ return this.getMonthInfo(calendarDate).length; ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function maximumMonthLength(calendarDate) { ++ return this.getMonthInfo(calendarDate).length; ++ } ++ }, { ++ key: "getMonthInfo", ++ value: function getMonthInfo(calendarDate) { ++ var month = calendarDate.month; ++ var monthInfo = this.months[month]; ++ if (monthInfo === undefined) throw new RangeError("Invalid month: ".concat(month)); ++ if (this.inLeapYear(calendarDate) && monthInfo.leap) monthInfo = monthInfo.leap; ++ return monthInfo; ++ } ++ }, { ++ key: "estimateIsoDate", ++ value: function estimateIsoDate(calendarDateParam) { ++ // FYI, this "estimate" is always the exact ISO date, which makes the Indian ++ // calendar fast! ++ var calendarDate = this.adjustCalendarDate(calendarDateParam); ++ var monthInfo = this.getMonthInfo(calendarDate); ++ var isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0); ++ var isoMonth = monthInfo.month; ++ var isoDay = monthInfo.day; ++ var isoDate = AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain'); ++ return isoDate; ++ } ++ }, { ++ key: "checkIcuBugs", ++ value: function checkIcuBugs(isoDate) { ++ if (this.vulnerableToBceBug && isoDate.year < 1) { ++ throw new RangeError("calendar '".concat(this.id, "' is broken for ISO dates before 0001-01-01") + ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'); ++ } ++ } ++ }]); ++ ++ return IndianHelper; ++ }(HelperBase); ++ /** ++ * This function adds additional metadata that makes it easier to work with ++ * eras. Note that it mutates and normalizes the original era objects, which is ++ * OK because this is non-observable, internal-only metadata. ++ * ++ * The result is an array of eras with the shape defined above. ++ * */ ++ ++ ++ function adjustEras(erasParam) { ++ var eras = erasParam; ++ ++ if (eras.length === 0) { ++ throw new RangeError('Invalid era data: eras are required'); ++ } ++ ++ if (eras.length === 1 && eras[0].reverseOf) { ++ throw new RangeError('Invalid era data: anchor era cannot count years backwards'); ++ } ++ ++ if (eras.length === 1 && !eras[0].name) { ++ throw new RangeError('Invalid era data: at least one named era is required'); ++ } ++ ++ if (eras.filter(function (e) { ++ return e.reverseOf != null; ++ }).length > 1) { ++ throw new RangeError('Invalid era data: only one era can count years backwards'); ++ } // Find the "anchor era" which is the era used for (era-less) `year`. Reversed ++ // eras can never be anchors. The era without an `anchorEpoch` property is the ++ // anchor. ++ ++ ++ var anchorEra; ++ eras.forEach(function (e) { ++ if (e.isAnchor || !e.anchorEpoch && !e.reverseOf) { ++ if (anchorEra) throw new RangeError('Invalid era data: cannot have multiple anchor eras'); ++ anchorEra = e; ++ e.anchorEpoch = { ++ year: e.hasYearZero ? 0 : 1 ++ }; ++ } else if (!e.name) { ++ throw new RangeError('If era name is blank, it must be the anchor era'); ++ } ++ }); // If the era name is undefined, then it's an anchor that doesn't interact ++ // with eras at all. For example, Japanese `year` is always the same as ISO ++ // `year`. So this "era" is the anchor era but isn't used for era matching. ++ // Strip it from the list that's returned. ++ ++ eras = eras.filter(function (e) { ++ return e.name; ++ }); ++ eras.forEach(function (e) { ++ // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D. ++ // Replace the string-valued "reverseOf" property with the actual era object ++ // that's reversed. ++ var reverseOf = e.reverseOf; ++ ++ if (reverseOf) { ++ var reversedEra = eras.find(function (era) { ++ return era.name === reverseOf; ++ }); ++ if (reversedEra === undefined) throw new RangeError("Invalid era data: unmatched reverseOf era: ".concat(reverseOf)); ++ e.reverseOf = reversedEra; ++ e.anchorEpoch = reversedEra.anchorEpoch; ++ e.isoEpoch = reversedEra.isoEpoch; ++ } ++ ++ if (e.anchorEpoch.month === undefined) e.anchorEpoch.month = 1; ++ if (e.anchorEpoch.day === undefined) e.anchorEpoch.day = 1; ++ }); // Ensure that the latest epoch is first in the array. This lets us try to ++ // match eras in index order, with the last era getting the remaining older ++ // years. Any reverse-signed era must be at the end. ++ ++ ArraySort.call(eras, function (e1, e2) { ++ if (e1.reverseOf) return 1; ++ if (e2.reverseOf) return -1; ++ if (!e1.isoEpoch || !e2.isoEpoch) throw new RangeError('Invalid era data: missing ISO epoch'); ++ return e2.isoEpoch.year - e1.isoEpoch.year; ++ }); // If there's a reversed era, then the one before it must be the era that's ++ // being reversed. ++ ++ var lastEraReversed = eras[eras.length - 1].reverseOf; ++ ++ if (lastEraReversed) { ++ if (lastEraReversed !== eras[eras.length - 2]) throw new RangeError('Invalid era data: invalid reverse-sign era'); ++ } // Finally, add a "genericName" property in the format "era{n} where `n` is ++ // zero-based index, with the oldest era being zero. This format is used by ++ // older versions of ICU data. ++ ++ ++ eras.forEach(function (e, i) { ++ e.genericName = "era".concat(eras.length - 1 - i); ++ }); ++ return { ++ eras: eras, ++ anchorEra: anchorEra || eras[0] ++ }; ++ } ++ ++ function isGregorianLeapYear(year) { ++ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); ++ } ++ /** Base for all Gregorian-like calendars. */ ++ ++ ++ var GregorianBaseHelper = /*#__PURE__*/function (_HelperBase5) { ++ _inherits(GregorianBaseHelper, _HelperBase5); ++ ++ var _super11 = _createSuper(GregorianBaseHelper); ++ ++ function GregorianBaseHelper(id, originalEras) { ++ var _this13; ++ ++ _classCallCheck(this, GregorianBaseHelper); ++ ++ _this13 = _super11.call(this); ++ _this13.calendarType = 'solar'; // Several calendars based on the Gregorian calendar use Julian dates (not ++ // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See ++ // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158. ++ ++ _this13.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z').toLocaleDateString('en-US-u-ca-japanese', { ++ timeZone: 'UTC' ++ }).startsWith('12'); ++ _this13.calendarIsVulnerableToJulianBug = false; ++ _this13.id = id; ++ ++ var _adjustEras = adjustEras(originalEras), ++ eras = _adjustEras.eras, ++ anchorEra = _adjustEras.anchorEra; ++ ++ _this13.anchorEra = anchorEra; ++ _this13.eras = eras; ++ return _this13; ++ } ++ ++ _createClass(GregorianBaseHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate) { ++ // Calendars that don't override this method use the same months and leap ++ // years as Gregorian. Once we know the ISO year corresponding to the ++ // calendar year, we'll know if it's a leap year or not. ++ var _this$estimateIsoDate = this.estimateIsoDate({ ++ month: 1, ++ day: 1, ++ year: calendarDate.year ++ }), ++ year = _this$estimateIsoDate.year; ++ ++ return isGregorianLeapYear(year); ++ } ++ }, { ++ key: "monthsInYear", ++ value: function ++ /* calendarDate */ ++ monthsInYear() { ++ return 12; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function minimumMonthLength(calendarDate) { ++ var month = calendarDate.month; ++ if (month === 2) return this.inLeapYear(calendarDate) ? 29 : 28; ++ return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31; ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function maximumMonthLength(calendarDate) { ++ return this.minimumMonthLength(calendarDate); ++ } ++ /** Fill in missing parts of the (year, era, eraYear) tuple */ ++ ++ }, { ++ key: "completeEraYear", ++ value: function completeEraYear(calendarDate) { ++ var _this14 = this; ++ ++ var checkField = function checkField(name, value) { ++ var currentValue = calendarDate[name]; ++ ++ if (currentValue != null && currentValue != value) { ++ throw new RangeError("Input ".concat(name, " ").concat(currentValue, " doesn't match calculated value ").concat(value)); ++ } ++ }; ++ ++ var eraFromYear = function eraFromYear(year) { ++ var eraYear; ++ ++ var adjustedCalendarDate = _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ year: year ++ }); ++ ++ var matchingEra = _this14.eras.find(function (e, i) { ++ if (i === _this14.eras.length - 1) { ++ if (e.reverseOf) { ++ // This is a reverse-sign era (like BCE) which must be the oldest ++ // era. Count years backwards. ++ if (year > 0) throw new RangeError("Signed year ".concat(year, " is invalid for era ").concat(e.name)); ++ eraYear = e.anchorEpoch.year - year; ++ return true; ++ } // last era always gets all "leftover" (older than epoch) years, ++ // so no need for a comparison like below. ++ ++ ++ eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1); ++ return true; ++ } ++ ++ var comparison = _this14.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch); ++ ++ if (comparison >= 0) { ++ eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1); ++ return true; ++ } ++ ++ return false; ++ }); ++ ++ if (!matchingEra) throw new RangeError("Year ".concat(year, " was not matched by any era")); ++ return { ++ eraYear: eraYear, ++ era: matchingEra.name ++ }; ++ }; ++ ++ var year = calendarDate.year, ++ eraYear = calendarDate.eraYear, ++ era = calendarDate.era; ++ ++ if (year != null) { ++ var _eraFromYear = eraFromYear(year); ++ ++ eraYear = _eraFromYear.eraYear; ++ era = _eraFromYear.era; ++ checkField('era', era); ++ checkField('eraYear', eraYear); ++ } else if (eraYear != null) { ++ var matchingEra = era === undefined ? undefined : this.eras.find(function (e) { ++ return e.name === era || e.genericName === era; ++ }); ++ if (!matchingEra) throw new RangeError("Era ".concat(era, " (ISO year ").concat(eraYear, ") was not matched by any era")); ++ ++ if (eraYear < 1 && matchingEra.reverseOf) { ++ throw new RangeError("Years in ".concat(era, " era must be positive, not ").concat(year)); ++ } ++ ++ if (matchingEra.reverseOf) { ++ year = matchingEra.anchorEpoch.year - eraYear; ++ } else { ++ year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1); ++ } ++ ++ checkField('year', year); // We'll accept dates where the month/day is earlier than the start of ++ // the era or after its end as long as it's in the same year. If that ++ // happens, we'll adjust the era/eraYear pair to be the correct era for ++ // the `year`. ++ ++ var _eraFromYear2 = eraFromYear(year); ++ ++ eraYear = _eraFromYear2.eraYear; ++ era = _eraFromYear2.era; ++ } else { ++ throw new RangeError('Either `year` or `eraYear` and `era` are required'); ++ } ++ ++ return _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ year: year, ++ eraYear: eraYear, ++ era: era ++ }); ++ } ++ }, { ++ key: "adjustCalendarDate", ++ value: function adjustCalendarDate(calendarDateParam, cache) { ++ var overflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'constrain'; ++ var calendarDate = calendarDateParam; // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number ++ ++ var _calendarDate5 = calendarDate, ++ month = _calendarDate5.month, ++ monthCode = _calendarDate5.monthCode; ++ if (month === undefined) calendarDate = _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ month: monthCodeNumberPart(monthCode) ++ }); ++ this.validateCalendarDate(calendarDate); ++ calendarDate = this.completeEraYear(calendarDate); ++ return _get(_getPrototypeOf(GregorianBaseHelper.prototype), "adjustCalendarDate", this).call(this, calendarDate, cache, overflow); ++ } ++ }, { ++ key: "estimateIsoDate", ++ value: function estimateIsoDate(calendarDateParam) { ++ var calendarDate = this.adjustCalendarDate(calendarDateParam); ++ var year = calendarDate.year, ++ month = calendarDate.month, ++ day = calendarDate.day; ++ var anchorEra = this.anchorEra; ++ var isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1); ++ return RegulateISODate(isoYearEstimate, month, day, 'constrain'); ++ } ++ }, { ++ key: "checkIcuBugs", ++ value: function checkIcuBugs(isoDate) { ++ if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) { ++ var beforeJulianSwitch = CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0; ++ ++ if (beforeJulianSwitch) { ++ throw new RangeError("calendar '".concat(this.id, "' is broken for ISO dates before 1582-10-15") + ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)'); ++ } ++ } ++ } ++ }]); ++ ++ return GregorianBaseHelper; ++ }(HelperBase); ++ ++ var OrthodoxBaseHelper = /*#__PURE__*/function (_GregorianBaseHelper) { ++ _inherits(OrthodoxBaseHelper, _GregorianBaseHelper); ++ ++ var _super12 = _createSuper(OrthodoxBaseHelper); ++ ++ function OrthodoxBaseHelper(id, originalEras) { ++ _classCallCheck(this, OrthodoxBaseHelper); ++ ++ return _super12.call(this, id, originalEras); ++ } ++ ++ _createClass(OrthodoxBaseHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate) { ++ // Leap years happen one year before the Julian leap year. Note that this ++ // calendar is based on the Julian calendar which has a leap year every 4 ++ // years, unlike the Gregorian calendar which doesn't have leap years on ++ // years divisible by 100 except years divisible by 400. ++ // ++ // Note that we're assuming that leap years in before-epoch times match ++ // how leap years are defined now. This is probably not accurate but I'm ++ // not sure how better to do it. ++ var year = calendarDate.year; ++ return (year + 1) % 4 === 0; ++ } ++ }, { ++ key: "monthsInYear", ++ value: function ++ /* calendarDate */ ++ monthsInYear() { ++ return 13; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function minimumMonthLength(calendarDate) { ++ var month = calendarDate.month; // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month. ++ ++ if (month === 13) return this.inLeapYear(calendarDate) ? 6 : 5; ++ return 30; ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function maximumMonthLength(calendarDate) { ++ return this.minimumMonthLength(calendarDate); ++ } ++ }]); ++ ++ return OrthodoxBaseHelper; ++ }(GregorianBaseHelper); // `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar, ++ // with the following differences: ++ // - Coptic uses BCE-like positive numbers for years before its epoch (the other ++ // two use negative year numbers before epoch) ++ // - Coptic has a different epoch date ++ // - Ethiopic has an additional second era that starts at the same date as the ++ // zero era of ethioaa. ++ ++ ++ var EthioaaHelper = /*#__PURE__*/function (_OrthodoxBaseHelper) { ++ _inherits(EthioaaHelper, _OrthodoxBaseHelper); ++ ++ var _super13 = _createSuper(EthioaaHelper); ++ ++ function EthioaaHelper() { ++ _classCallCheck(this, EthioaaHelper); ++ ++ return _super13.call(this, 'ethioaa', [{ ++ name: 'era0', ++ isoEpoch: { ++ year: -5492, ++ month: 7, ++ day: 17 ++ } ++ }]); ++ } ++ ++ return _createClass(EthioaaHelper); ++ }(OrthodoxBaseHelper); ++ ++ var CopticHelper = /*#__PURE__*/function (_OrthodoxBaseHelper2) { ++ _inherits(CopticHelper, _OrthodoxBaseHelper2); ++ ++ var _super14 = _createSuper(CopticHelper); ++ ++ function CopticHelper() { ++ _classCallCheck(this, CopticHelper); ++ ++ return _super14.call(this, 'coptic', [{ ++ name: 'era1', ++ isoEpoch: { ++ year: 284, ++ month: 8, ++ day: 29 ++ } ++ }, { ++ name: 'era0', ++ reverseOf: 'era1' ++ }]); ++ } ++ ++ return _createClass(CopticHelper); ++ }(OrthodoxBaseHelper); // Anchor is currently the older era to match ethioaa, but should it be the newer era? ++ // See https://github.com/tc39/ecma402/issues/534 for discussion. ++ ++ ++ var EthiopicHelper = /*#__PURE__*/function (_OrthodoxBaseHelper3) { ++ _inherits(EthiopicHelper, _OrthodoxBaseHelper3); ++ ++ var _super15 = _createSuper(EthiopicHelper); ++ ++ function EthiopicHelper() { ++ _classCallCheck(this, EthiopicHelper); ++ ++ return _super15.call(this, 'ethiopic', [{ ++ name: 'aa', ++ isoEpoch: { ++ year: -5492, ++ month: 7, ++ day: 17 ++ } ++ }, { ++ name: 'am', ++ isoEpoch: { ++ year: 8, ++ month: 8, ++ day: 27 ++ }, ++ anchorEpoch: { ++ year: 5501 ++ } ++ }]); ++ } ++ ++ return _createClass(EthiopicHelper); ++ }(OrthodoxBaseHelper); ++ ++ var RocHelper = /*#__PURE__*/function (_GregorianBaseHelper2) { ++ _inherits(RocHelper, _GregorianBaseHelper2); ++ ++ var _super16 = _createSuper(RocHelper); ++ ++ function RocHelper() { ++ var _this15; ++ ++ _classCallCheck(this, RocHelper); ++ ++ _this15 = _super16.call(this, 'roc', [{ ++ name: 'minguo', ++ isoEpoch: { ++ year: 1912, ++ month: 1, ++ day: 1 ++ } ++ }, { ++ name: 'before-roc', ++ reverseOf: 'minguo' ++ }]); ++ _this15.calendarIsVulnerableToJulianBug = true; ++ return _this15; ++ } ++ ++ return _createClass(RocHelper); ++ }(GregorianBaseHelper); ++ ++ var BuddhistHelper = /*#__PURE__*/function (_GregorianBaseHelper3) { ++ _inherits(BuddhistHelper, _GregorianBaseHelper3); ++ ++ var _super17 = _createSuper(BuddhistHelper); ++ ++ function BuddhistHelper() { ++ var _this16; ++ ++ _classCallCheck(this, BuddhistHelper); ++ ++ _this16 = _super17.call(this, 'buddhist', [{ ++ name: 'be', ++ hasYearZero: true, ++ isoEpoch: { ++ year: -543, ++ month: 1, ++ day: 1 ++ } ++ }]); ++ _this16.calendarIsVulnerableToJulianBug = true; ++ return _this16; ++ } ++ ++ return _createClass(BuddhistHelper); ++ }(GregorianBaseHelper); ++ ++ var GregoryHelper = /*#__PURE__*/function (_GregorianBaseHelper4) { ++ _inherits(GregoryHelper, _GregorianBaseHelper4); ++ ++ var _super18 = _createSuper(GregoryHelper); ++ ++ function GregoryHelper() { ++ _classCallCheck(this, GregoryHelper); ++ ++ return _super18.call(this, 'gregory', [{ ++ name: 'ce', ++ isoEpoch: { ++ year: 1, ++ month: 1, ++ day: 1 ++ } ++ }, { ++ name: 'bce', ++ reverseOf: 'ce' ++ }]); ++ } ++ ++ _createClass(GregoryHelper, [{ ++ key: "reviseIntlEra", ++ value: function reviseIntlEra(calendarDate ++ /*, isoDate: IsoDate*/ ++ ) { ++ var era = calendarDate.era, ++ eraYear = calendarDate.eraYear; // Firefox 96 introduced a bug where the `'short'` format of the era ++ // option mistakenly returns the one-letter (narrow) format instead. The ++ // code below handles either the correct or Firefox-buggy format. See ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253 ++ ++ if (era === 'bc' || era === 'b') era = 'bce'; ++ if (era === 'ad' || era === 'a') era = 'ce'; ++ return { ++ era: era, ++ eraYear: eraYear ++ }; ++ } ++ }]); ++ ++ return GregoryHelper; ++ }(GregorianBaseHelper); // NOTE: Only the 5 modern eras (Meiji and later) are included. For dates ++ // before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji ++ // eras include: ++ // - Start/end dates of older eras are not precisely defined, which is ++ // challenging given Temporal's need for precision ++ // - Some era dates and/or names are disputed by historians ++ // - As historical research proceeds, new eras are discovered and existing era ++ // dates are modified, leading to considerable churn which is not good for ++ // Temporal use. ++ // - The earliest era (in 645 CE) may not end up being the earliest depending ++ // on future historical scholarship ++ // - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK ++ // that's not reflected in the ICU implementation. ++ // ++ // For more discussion: https://github.com/tc39/proposal-temporal/issues/526. ++ // ++ // Here's a full list of CLDR/ICU eras: ++ // https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818 ++ // https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546 ++ // ++ // NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a ++ // lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not ++ // December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402 ++ // Japanese calendar doesn't seem to take this into account, so neither do we: ++ // > args = ['en-ca-u-ca-japanese', { era: 'short' }] ++ // > new Date('1873-01-01T12:00').toLocaleString(...args) ++ // '1 1, 6 Meiji, 12:00:00 PM' ++ // > new Date('1872-12-31T12:00').toLocaleString(...args) ++ // '12 31, 5 Meiji, 12:00:00 PM' ++ ++ ++ var JapaneseHelper = /*#__PURE__*/function (_GregorianBaseHelper5) { ++ _inherits(JapaneseHelper, _GregorianBaseHelper5); ++ ++ var _super19 = _createSuper(JapaneseHelper); ++ ++ function JapaneseHelper() { ++ var _this17; ++ ++ _classCallCheck(this, JapaneseHelper); ++ ++ _this17 = _super19.call(this, 'japanese', [// The Japanese calendar `year` is just the ISO year, because (unlike other ++ // ICU calendars) there's no obvious "default era", we use the ISO year. ++ { ++ name: 'reiwa', ++ isoEpoch: { ++ year: 2019, ++ month: 5, ++ day: 1 ++ }, ++ anchorEpoch: { ++ year: 2019, ++ month: 5, ++ day: 1 ++ } ++ }, { ++ name: 'heisei', ++ isoEpoch: { ++ year: 1989, ++ month: 1, ++ day: 8 ++ }, ++ anchorEpoch: { ++ year: 1989, ++ month: 1, ++ day: 8 ++ } ++ }, { ++ name: 'showa', ++ isoEpoch: { ++ year: 1926, ++ month: 12, ++ day: 25 ++ }, ++ anchorEpoch: { ++ year: 1926, ++ month: 12, ++ day: 25 ++ } ++ }, { ++ name: 'taisho', ++ isoEpoch: { ++ year: 1912, ++ month: 7, ++ day: 30 ++ }, ++ anchorEpoch: { ++ year: 1912, ++ month: 7, ++ day: 30 ++ } ++ }, { ++ name: 'meiji', ++ isoEpoch: { ++ year: 1868, ++ month: 9, ++ day: 8 ++ }, ++ anchorEpoch: { ++ year: 1868, ++ month: 9, ++ day: 8 ++ } ++ }, { ++ name: 'ce', ++ isoEpoch: { ++ year: 1, ++ month: 1, ++ day: 1 ++ } ++ }, { ++ name: 'bce', ++ reverseOf: 'ce' ++ }]); ++ _this17.calendarIsVulnerableToJulianBug = true; // The last 3 Japanese eras confusingly return only one character in the ++ // default "short" era, so need to use the long format. ++ ++ _this17.eraLength = 'long'; ++ return _this17; ++ } ++ ++ _createClass(JapaneseHelper, [{ ++ key: "reviseIntlEra", ++ value: function reviseIntlEra(calendarDate, isoDate) { ++ var era = calendarDate.era, ++ eraYear = calendarDate.eraYear; ++ var isoYear = isoDate.year; ++ if (this.eras.find(function (e) { ++ return e.name === era; ++ })) return { ++ era: era, ++ eraYear: eraYear ++ }; ++ return isoYear < 1 ? { ++ era: 'bce', ++ eraYear: 1 - isoYear ++ } : { ++ era: 'ce', ++ eraYear: isoYear ++ }; ++ } ++ }]); ++ ++ return JapaneseHelper; ++ }(GregorianBaseHelper); ++ ++ var ChineseBaseHelper = /*#__PURE__*/function (_HelperBase6) { ++ _inherits(ChineseBaseHelper, _HelperBase6); ++ ++ var _super20 = _createSuper(ChineseBaseHelper); ++ ++ function ChineseBaseHelper() { ++ var _this18; ++ ++ _classCallCheck(this, ChineseBaseHelper); ++ ++ _this18 = _super20.apply(this, arguments); ++ _this18.calendarType = 'lunisolar'; // All built-in calendars except Chinese/Dangi and Hebrew use an era ++ ++ _this18.hasEra = false; ++ return _this18; ++ } ++ ++ _createClass(ChineseBaseHelper, [{ ++ key: "inLeapYear", ++ value: function inLeapYear(calendarDate, cache) { ++ var months = this.getMonthList(calendarDate.year, cache); ++ return ObjectEntries(months).length === 13; ++ } ++ }, { ++ key: "monthsInYear", ++ value: function monthsInYear(calendarDate, cache) { ++ return this.inLeapYear(calendarDate, cache) ? 13 : 12; ++ } ++ }, { ++ key: "minimumMonthLength", ++ value: function ++ /* calendarDate */ ++ minimumMonthLength() { ++ return 29; ++ } ++ }, { ++ key: "maximumMonthLength", ++ value: function ++ /* calendarDate */ ++ maximumMonthLength() { ++ return 30; ++ } ++ }, { ++ key: "getMonthList", ++ value: function getMonthList(calendarYear, cache) { ++ var _this19 = this; ++ ++ if (calendarYear === undefined) { ++ throw new TypeError('Missing year'); ++ } ++ ++ var key = JSON.stringify({ ++ func: 'getMonthList', ++ calendarYear: calendarYear, ++ id: this.id ++ }); ++ var cached = cache.get(key); ++ if (cached) return cached; ++ var dateTimeFormat = this.getFormatter(); ++ ++ var getCalendarDate = function getCalendarDate(isoYear, daysPastFeb1) { ++ var isoStringFeb1 = toUtcIsoDateString({ ++ isoYear: isoYear, ++ isoMonth: 2, ++ isoDay: 1 ++ }); ++ var legacyDate = new Date(isoStringFeb1); // Now add the requested number of days, which may wrap to the next month. ++ ++ legacyDate.setUTCDate(daysPastFeb1 + 1); ++ var newYearGuess = dateTimeFormat.formatToParts(legacyDate); ++ var calendarMonthString = newYearGuess.find(function (tv) { ++ return tv.type === 'month'; ++ }).value; ++ var calendarDay = +newYearGuess.find(function (tv) { ++ return tv.type === 'day'; ++ }).value; ++ var calendarYearToVerify = newYearGuess.find(function (tv) { ++ return tv.type === 'relatedYear'; ++ }); ++ ++ if (calendarYearToVerify !== undefined) { ++ calendarYearToVerify = +calendarYearToVerify.value; ++ } else { ++ // Node 12 has outdated ICU data that lacks the `relatedYear` field in the ++ // output of Intl.DateTimeFormat.formatToParts. ++ throw new RangeError("Intl.DateTimeFormat.formatToParts lacks relatedYear in ".concat(_this19.id, " calendar. Try Node 14+ or modern browsers.")); ++ } ++ ++ return { ++ calendarMonthString: calendarMonthString, ++ calendarDay: calendarDay, ++ calendarYearToVerify: calendarYearToVerify ++ }; ++ }; // First, find a date close to Chinese New Year. Feb 17 will either be in ++ // the first month or near the end of the last month of the previous year. ++ ++ ++ var isoDaysDelta = 17; ++ ++ var _getCalendarDate = getCalendarDate(calendarYear, isoDaysDelta), ++ calendarMonthString = _getCalendarDate.calendarMonthString, ++ calendarDay = _getCalendarDate.calendarDay, ++ calendarYearToVerify = _getCalendarDate.calendarYearToVerify; // If we didn't guess the first month correctly, add (almost in some months) ++ // a lunar month ++ ++ ++ if (calendarMonthString !== '1') { ++ isoDaysDelta += 29; ++ ++ var _getCalendarDate2 = getCalendarDate(calendarYear, isoDaysDelta); ++ ++ calendarMonthString = _getCalendarDate2.calendarMonthString; ++ calendarDay = _getCalendarDate2.calendarDay; ++ } // Now back up to near the start of the first month, but not too near that ++ // off-by-one issues matter. ++ ++ ++ isoDaysDelta -= calendarDay - 5; ++ var result = {}; ++ var monthIndex = 1; ++ var oldCalendarDay; ++ var oldMonthString; ++ var done = false; ++ ++ do { ++ var _getCalendarDate3 = getCalendarDate(calendarYear, isoDaysDelta); ++ ++ calendarMonthString = _getCalendarDate3.calendarMonthString; ++ calendarDay = _getCalendarDate3.calendarDay; ++ calendarYearToVerify = _getCalendarDate3.calendarYearToVerify; ++ ++ if (oldCalendarDay) { ++ result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay; ++ } ++ ++ if (calendarYearToVerify !== calendarYear) { ++ done = true; ++ } else { ++ result[calendarMonthString] = { ++ monthIndex: monthIndex++ ++ }; // Move to the next month. Because months are sometimes 29 days, the day of the ++ // calendar month will move forward slowly but not enough to flip over to a new ++ // month before the loop ends at 12-13 months. ++ ++ isoDaysDelta += 30; ++ } ++ ++ oldCalendarDay = calendarDay; ++ oldMonthString = calendarMonthString; ++ } while (!done); ++ ++ result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay; ++ cache.set(key, result); ++ return result; ++ } ++ }, { ++ key: "estimateIsoDate", ++ value: function estimateIsoDate(calendarDate) { ++ var year = calendarDate.year, ++ month = calendarDate.month; ++ return { ++ year: year, ++ month: month >= 12 ? 12 : month + 1, ++ day: 1 ++ }; ++ } ++ }, { ++ key: "adjustCalendarDate", ++ value: function adjustCalendarDate(calendarDate, cache) { ++ var overflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'constrain'; ++ var fromLegacyDate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; ++ var year = calendarDate.year, ++ month = calendarDate.month, ++ monthExtra = calendarDate.monthExtra, ++ day = calendarDate.day, ++ monthCode = calendarDate.monthCode, ++ eraYear = calendarDate.eraYear; ++ ++ if (fromLegacyDate) { ++ // Legacy Date output returns a string that's an integer with an optional ++ // "bis" suffix used only by the Chinese/Dangi calendar to indicate a leap ++ // month. Below we'll normalize the output. ++ year = eraYear; ++ if (monthExtra && monthExtra !== 'bis') throw new RangeError("Unexpected leap month suffix: ".concat(monthExtra)); ++ ++ var _monthCode = buildMonthCode(month, monthExtra !== undefined); ++ ++ var monthString = "".concat(month).concat(monthExtra || ''); ++ var months = this.getMonthList(year, cache); ++ var monthInfo = months[monthString]; ++ if (monthInfo === undefined) throw new RangeError("Unmatched month ".concat(monthString, " in Chinese year ").concat(year)); ++ month = monthInfo.monthIndex; ++ return { ++ year: year, ++ month: month, ++ day: day, ++ era: undefined, ++ eraYear: eraYear, ++ monthCode: _monthCode ++ }; ++ } else { ++ // When called without input coming from legacy Date output, ++ // simply ensure that all fields are present. ++ this.validateCalendarDate(calendarDate); ++ if (year === undefined) year = eraYear; ++ if (eraYear === undefined) eraYear = year; ++ ++ if (month === undefined) { ++ var _months = this.getMonthList(year, cache); ++ ++ var numberPart = monthCode.replace('L', 'bis').slice(1); ++ if (numberPart[0] === '0') numberPart = numberPart.slice(1); ++ var _monthInfo = _months[numberPart]; ++ month = _monthInfo && _monthInfo.monthIndex; // If this leap month isn't present in this year, constrain down to the last day of the previous month. ++ ++ if (month === undefined && monthCode.endsWith('L') && !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) && overflow === 'constrain') { ++ var withoutML = monthCode.slice(1, -1); ++ if (withoutML[0] === '0') withoutML = withoutML.slice(1); ++ _monthInfo = _months[withoutML]; ++ ++ if (_monthInfo) { ++ var _monthInfo2 = _monthInfo; ++ day = _monthInfo2.daysInMonth; ++ month = _monthInfo2.monthIndex; ++ monthCode = buildMonthCode(withoutML); ++ } ++ } ++ ++ if (month === undefined) { ++ throw new RangeError("Unmatched month ".concat(monthCode, " in Chinese year ").concat(year)); ++ } ++ } else if (monthCode === undefined) { ++ var _months2 = this.getMonthList(year, cache); ++ ++ var monthEntries = ObjectEntries(_months2); ++ var largestMonth = monthEntries.length; ++ ++ if (overflow === 'reject') { ++ RejectToRange(month, 1, largestMonth); ++ RejectToRange(day, 1, this.maximumMonthLength()); ++ } else { ++ month = ConstrainToRange(month, 1, largestMonth); ++ day = ConstrainToRange(day, 1, this.maximumMonthLength()); ++ } ++ ++ var matchingMonthEntry = monthEntries.find(function (_ref3) { ++ var _ref4 = _slicedToArray(_ref3, 2), ++ v = _ref4[1]; ++ ++ return v.monthIndex === month; ++ }); ++ ++ if (matchingMonthEntry === undefined) { ++ throw new RangeError("Invalid month ".concat(month, " in Chinese year ").concat(year)); ++ } ++ ++ monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1); ++ } else { ++ // Both month and monthCode are present. Make sure they don't conflict. ++ var _months3 = this.getMonthList(year, cache); ++ ++ var _numberPart = monthCode.replace('L', 'bis').slice(1); ++ ++ if (_numberPart[0] === '0') _numberPart = _numberPart.slice(1); ++ var _monthInfo3 = _months3[_numberPart]; ++ if (!_monthInfo3) throw new RangeError("Unmatched monthCode ".concat(monthCode, " in Chinese year ").concat(year)); ++ ++ if (month !== _monthInfo3.monthIndex) { ++ throw new RangeError("monthCode ".concat(monthCode, " doesn't correspond to month ").concat(month, " in Chinese year ").concat(year)); ++ } ++ } ++ ++ return _objectSpread2(_objectSpread2({}, calendarDate), {}, { ++ year: year, ++ eraYear: eraYear, ++ month: month, ++ monthCode: monthCode, ++ day: day ++ }); ++ } ++ } ++ }]); ++ ++ return ChineseBaseHelper; ++ }(HelperBase); ++ ++ var ChineseHelper = /*#__PURE__*/function (_ChineseBaseHelper) { ++ _inherits(ChineseHelper, _ChineseBaseHelper); ++ ++ var _super21 = _createSuper(ChineseHelper); ++ ++ function ChineseHelper() { ++ var _this20; ++ ++ _classCallCheck(this, ChineseHelper); ++ ++ _this20 = _super21.apply(this, arguments); ++ _this20.id = 'chinese'; ++ return _this20; ++ } ++ ++ return _createClass(ChineseHelper); ++ }(ChineseBaseHelper); // Dangi (Korean) calendar has same implementation as Chinese ++ ++ ++ var DangiHelper = /*#__PURE__*/function (_ChineseBaseHelper2) { ++ _inherits(DangiHelper, _ChineseBaseHelper2); ++ ++ var _super22 = _createSuper(DangiHelper); ++ ++ function DangiHelper() { ++ var _this21; ++ ++ _classCallCheck(this, DangiHelper); ++ ++ _this21 = _super22.apply(this, arguments); ++ _this21.id = 'dangi'; ++ return _this21; ++ } ++ ++ return _createClass(DangiHelper); ++ }(ChineseBaseHelper); ++ /** ++ * Common implementation of all non-ISO calendars. ++ * Per-calendar id and logic live in `id` and `helper` properties attached later. ++ * This split allowed an easy separation between code that was similar between ++ * ISO and non-ISO implementations vs. code that was very different. ++ */ ++ ++ ++ var nonIsoImpl = { ++ // `helper` is added when this object is spread into each calendar's ++ // implementation ++ helper: undefined, ++ dateFromFields: function dateFromFields(fieldsParam, options, calendar) { ++ var overflow = ToTemporalOverflow(options); ++ var cache = new OneObjectCache(); // Intentionally alphabetical ++ ++ var fields = PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']); ++ ++ var _this$helper$calendar = this.helper.calendarToIsoDate(fields, overflow, cache), ++ year = _this$helper$calendar.year, ++ month = _this$helper$calendar.month, ++ day = _this$helper$calendar.day; ++ ++ var result = CreateTemporalDate(year, month, day, calendar); ++ cache.setObject(result); ++ return result; ++ }, ++ yearMonthFromFields: function yearMonthFromFields(fieldsParam, options, calendar) { ++ var overflow = ToTemporalOverflow(options); ++ var cache = new OneObjectCache(); // Intentionally alphabetical ++ ++ var fields = PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []); ++ ++ var _this$helper$calendar2 = this.helper.calendarToIsoDate(_objectSpread2(_objectSpread2({}, fields), {}, { ++ day: 1 ++ }), overflow, cache), ++ year = _this$helper$calendar2.year, ++ month = _this$helper$calendar2.month, ++ day = _this$helper$calendar2.day; ++ ++ var result = CreateTemporalYearMonth(year, month, calendar, ++ /* referenceISODay = */ ++ day); ++ cache.setObject(result); ++ return result; ++ }, ++ monthDayFromFields: function monthDayFromFields(fieldsParam, options, calendar) { ++ var overflow = ToTemporalOverflow(options); // All built-in calendars require `day`, but some allow other fields to be ++ // substituted for `month`. And for lunisolar calendars, either `monthCode` ++ // or `year` must be provided because `month` is ambiguous without a year or ++ // a code. ++ ++ var cache = new OneObjectCache(); ++ var fields = PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']); ++ ++ var _this$helper$monthDay = this.helper.monthDayFromFields(fields, overflow, cache), ++ year = _this$helper$monthDay.year, ++ month = _this$helper$monthDay.month, ++ day = _this$helper$monthDay.day; // `year` is a reference year where this month/day exists in this calendar ++ ++ ++ var result = CreateTemporalMonthDay(month, day, calendar, ++ /* referenceISOYear = */ ++ year); ++ cache.setObject(result); ++ return result; ++ }, ++ fields: function fields(fieldsParam) { ++ var fields = fieldsParam; ++ if (ArrayIncludes.call(fields, 'year')) fields = [].concat(_toConsumableArray(fields), ['era', 'eraYear']); ++ return fields; ++ }, ++ mergeFields: function mergeFields(fields, additionalFields) { ++ var fieldsCopy = _objectSpread2({}, fields); ++ ++ var additionalFieldsCopy = _objectSpread2({}, additionalFields); // era and eraYear are intentionally unused ++ // eslint-disable-next-line @typescript-eslint/no-unused-vars ++ ++ ++ var month = fieldsCopy.month, ++ monthCode = fieldsCopy.monthCode, ++ year = fieldsCopy.year; ++ fieldsCopy.era; ++ fieldsCopy.eraYear; ++ var original = _objectWithoutProperties(fieldsCopy, _excluded); ++ ++ var newMonth = additionalFieldsCopy.month, ++ newMonthCode = additionalFieldsCopy.monthCode, ++ newYear = additionalFieldsCopy.year, ++ newEra = additionalFieldsCopy.era, ++ newEraYear = additionalFieldsCopy.eraYear; ++ ++ if (newMonth === undefined && newMonthCode === undefined) { ++ original.month = month; ++ original.monthCode = monthCode; ++ } ++ ++ if (newYear === undefined && newEra === undefined && newEraYear === undefined) { ++ // Only `year` is needed. We don't set era and eraYear because it's ++ // possible to create a conflict for eras that start or end mid-year. See ++ // https://github.com/tc39/proposal-temporal/issues/1784. ++ original.year = year; ++ } ++ ++ return _objectSpread2(_objectSpread2({}, original), additionalFieldsCopy); ++ }, ++ dateAdd: function dateAdd(date, years, months, weeks, days, overflow, calendar) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ var added = this.helper.addCalendar(calendarDate, { ++ years: years, ++ months: months, ++ weeks: weeks, ++ days: days ++ }, overflow, cache); ++ var isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache); ++ var year = isoAdded.year, ++ month = isoAdded.month, ++ day = isoAdded.day; ++ var newTemporalObject = CreateTemporalDate(year, month, day, calendar); // The new object's cache starts with the cache of the old object ++ ++ var newCache = new OneObjectCache(cache); ++ newCache.setObject(newTemporalObject); ++ return newTemporalObject; ++ }, ++ dateUntil: function dateUntil(one, two, largestUnit) { ++ var cacheOne = OneObjectCache.getCacheForObject(one); ++ var cacheTwo = OneObjectCache.getCacheForObject(two); ++ var calendarOne = this.helper.temporalToCalendarDate(one, cacheOne); ++ var calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo); ++ var result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne); ++ return result; ++ }, ++ year: function year(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.year; ++ }, ++ month: function month(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.month; ++ }, ++ day: function day(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.day; ++ }, ++ era: function era(date) { ++ if (!this.helper.hasEra) return undefined; ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.era; ++ }, ++ eraYear: function eraYear(date) { ++ if (!this.helper.hasEra) return undefined; ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.eraYear; ++ }, ++ monthCode: function monthCode(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ return calendarDate.monthCode; ++ }, ++ dayOfWeek: function dayOfWeek(date) { ++ return impl['iso8601'].dayOfWeek(date); ++ }, ++ dayOfYear: function dayOfYear(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.isoToCalendarDate(date, cache); ++ var startOfYear = this.helper.startOfCalendarYear(calendarDate); ++ var diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache); ++ return diffDays + 1; ++ }, ++ weekOfYear: function weekOfYear(date) { ++ return impl['iso8601'].weekOfYear(date); ++ }, ++ daysInWeek: function daysInWeek(date) { ++ return impl['iso8601'].daysInWeek(date); ++ }, ++ daysInMonth: function daysInMonth(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); // Easy case: if the helper knows the length without any heavy calculation. ++ ++ var max = this.helper.maximumMonthLength(calendarDate); ++ var min = this.helper.minimumMonthLength(calendarDate); ++ if (max === min) return max; // The harder case is where months vary every year, e.g. islamic calendars. ++ // Find the answer by calculating the difference in days between the first ++ // day of the current month and the first day of the next month. ++ ++ var startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate); ++ var startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache); ++ var result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache); ++ return result; ++ }, ++ daysInYear: function daysInYear(dateParam) { ++ var date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) date = ToTemporalDate(date); ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ var startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate); ++ var startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { ++ years: 1 ++ }, 'constrain', cache); ++ var result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache); ++ return result; ++ }, ++ monthsInYear: function monthsInYear(date) { ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ var result = this.helper.monthsInYear(calendarDate, cache); ++ return result; ++ }, ++ inLeapYear: function inLeapYear(dateParam) { ++ var date = dateParam; ++ if (!HasSlot(date, ISO_YEAR)) date = ToTemporalDate(date); ++ var cache = OneObjectCache.getCacheForObject(date); ++ var calendarDate = this.helper.temporalToCalendarDate(date, cache); ++ var result = this.helper.inLeapYear(calendarDate, cache); ++ return result; ++ } ++ }; ++ ++ for (var _i$1 = 0, _arr = [HebrewHelper, PersianHelper, EthiopicHelper, EthioaaHelper, CopticHelper, ChineseHelper, DangiHelper, RocHelper, IndianHelper, BuddhistHelper, GregoryHelper, JapaneseHelper, IslamicHelper, IslamicUmalquraHelper, IslamicTblaHelper, IslamicCivilHelper, IslamicRgsaHelper, IslamicCcHelper]; _i$1 < _arr.length; _i$1++) { ++ var Helper = _arr[_i$1]; ++ var helper = new Helper(); // Clone the singleton non-ISO implementation that's the same for all ++ // calendars. The `helper` property contains per-calendar logic. ++ ++ impl[helper.id] = _objectSpread2(_objectSpread2({}, nonIsoImpl), {}, { ++ helper: helper ++ }); ++ } ++ ++ var PlainDate = /*#__PURE__*/function () { ++ function PlainDate(isoYearParam, isoMonthParam, isoDayParam) { ++ var calendarParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : GetISO8601Calendar(); ++ ++ _classCallCheck(this, PlainDate); ++ ++ var isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ var isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ var isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ var calendar = ToTemporalCalendar(calendarParam); // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalDateSlots. This check ++ // exists only to improve the error message. ++ ++ if (arguments.length < 3) { ++ throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required'); ++ } ++ ++ CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar); ++ } ++ ++ _createClass(PlainDate, [{ ++ key: "calendar", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ }, { ++ key: "era", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "eraYear", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "year", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "month", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "monthCode", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "day", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "dayOfWeek", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "dayOfYear", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "weekOfYear", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInWeek", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInMonth", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInYear", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "monthsInYear", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "inLeapYear", ++ get: function get() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "with", ++ value: function _with(temporalDateLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(temporalDateLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ ++ RejectObjectWithCalendarOrTimeZone(temporalDateLike); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ var props = PrepareTemporalFields(temporalDateLike, fieldNames, 'partial'); ++ ++ if (!props) { ++ throw new TypeError('invalid date-like'); ++ } ++ ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ var options = GetOptionsObject(optionsParam); ++ return CalendarDateFromFields(calendar, fields, options); ++ } ++ }, { ++ key: "withCalendar", ++ value: function withCalendar(calendarParam) { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var calendar = ToTemporalCalendar(calendarParam); ++ return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar); ++ } ++ }, { ++ key: "add", ++ value: function add(temporalDurationLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var duration = ToTemporalDuration(temporalDurationLike); ++ var options = GetOptionsObject(optionsParam); ++ return CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(temporalDurationLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var duration = CreateNegatedTemporalDuration(ToTemporalDuration(temporalDurationLike)); ++ var options = GetOptionsObject(optionsParam); ++ return CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options); ++ } ++ }, { ++ key: "until", ++ value: function until(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDate('until', this, other, options); ++ } ++ }, { ++ key: "since", ++ value: function since(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDate('since', this, other, options); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalDate(otherParam); ++ ++ for (var _i = 0, _arr = [ISO_YEAR, ISO_MONTH, ISO_DAY]; _i < _arr.length; _i++) { ++ var slot = _arr[_i]; ++ var val1 = GetSlot(this, slot); ++ var val2 = GetSlot(other, slot); ++ if (val1 !== val2) return false; ++ } ++ ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ var showCalendar = ToShowCalendarOption(options); ++ return TemporalDateToString(this, showCalendar); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return TemporalDateToString(this); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainDate'); ++ } ++ }, { ++ key: "toPlainDateTime", ++ value: function toPlainDateTime() { ++ var temporalTimeParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var year = GetSlot(this, ISO_YEAR); ++ var month = GetSlot(this, ISO_MONTH); ++ var day = GetSlot(this, ISO_DAY); ++ var calendar = GetSlot(this, CALENDAR); ++ if (temporalTimeParam === undefined) return CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar); ++ var temporalTime = ToTemporalTime(temporalTimeParam); ++ var hour = GetSlot(temporalTime, ISO_HOUR); ++ var minute = GetSlot(temporalTime, ISO_MINUTE); ++ var second = GetSlot(temporalTime, ISO_SECOND); ++ var millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ var microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ var nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ }, { ++ key: "toZonedDateTime", ++ value: function toZonedDateTime(item) { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var timeZone, temporalTime; ++ ++ if (IsObject(item)) { ++ var timeZoneLike = item.timeZone; ++ ++ if (timeZoneLike === undefined) { ++ // The cast below is needed because it's possible here for ++ // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`, ++ // not a TimeZoneProtocol. ++ // TODO: should we check for that shape to improve on the (bad) error ++ // message that the caller will get from ToTemporalTimeZone? ++ timeZone = ToTemporalTimeZone(item); ++ } else { ++ timeZone = ToTemporalTimeZone(timeZoneLike); ++ temporalTime = item.plainTime; ++ } ++ } else { ++ timeZone = ToTemporalTimeZone(item); ++ } ++ ++ var year = GetSlot(this, ISO_YEAR); ++ var month = GetSlot(this, ISO_MONTH); ++ var day = GetSlot(this, ISO_DAY); ++ var calendar = GetSlot(this, CALENDAR); ++ var hour = 0, ++ minute = 0, ++ second = 0, ++ millisecond = 0, ++ microsecond = 0, ++ nanosecond = 0; ++ ++ if (temporalTime !== undefined) { ++ temporalTime = ToTemporalTime(temporalTime); ++ hour = GetSlot(temporalTime, ISO_HOUR); ++ minute = GetSlot(temporalTime, ISO_MINUTE); ++ second = GetSlot(temporalTime, ISO_SECOND); ++ millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ } ++ ++ var dt = CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ var instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }, { ++ key: "toPlainYearMonth", ++ value: function toPlainYearMonth() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ }, { ++ key: "toPlainMonthDay", ++ value: function toPlainMonthDay() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ }, { ++ key: "getISOFields", ++ value: function getISOFields() { ++ if (!IsTemporalDate(this)) throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var options = GetOptionsObject(optionsParam); ++ ++ if (IsTemporalDate(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR)); ++ } ++ ++ return ToTemporalDate(item, options); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var one = ToTemporalDate(oneParam); ++ var two = ToTemporalDate(twoParam); ++ return CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY)); ++ } ++ }]); ++ ++ return PlainDate; ++ }(); ++ MakeIntrinsicClass(PlainDate, 'Temporal.PlainDate'); ++ ++ var PlainDateTime = /*#__PURE__*/function () { ++ function PlainDateTime(isoYearParam, isoMonthParam, isoDayParam) { ++ var hourParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; ++ var minuteParam = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; ++ var secondParam = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; ++ var millisecondParam = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0; ++ var microsecondParam = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0; ++ var nanosecondParam = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; ++ var calendarParam = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : GetISO8601Calendar(); ++ ++ _classCallCheck(this, PlainDateTime); ++ ++ var isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ var isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ var isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ var hour = ToIntegerThrowOnInfinity(hourParam); ++ var minute = ToIntegerThrowOnInfinity(minuteParam); ++ var second = ToIntegerThrowOnInfinity(secondParam); ++ var millisecond = ToIntegerThrowOnInfinity(millisecondParam); ++ var microsecond = ToIntegerThrowOnInfinity(microsecondParam); ++ var nanosecond = ToIntegerThrowOnInfinity(nanosecondParam); ++ var calendar = ToTemporalCalendar(calendarParam); // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This ++ // check exists only to improve the error message. ++ ++ if (arguments.length < 3) { ++ throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required'); ++ } ++ ++ CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ ++ _createClass(PlainDateTime, [{ ++ key: "calendar", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ }, { ++ key: "year", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "month", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "monthCode", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "day", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "hour", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_HOUR); ++ } ++ }, { ++ key: "minute", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MINUTE); ++ } ++ }, { ++ key: "second", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_SECOND); ++ } ++ }, { ++ key: "millisecond", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MILLISECOND); ++ } ++ }, { ++ key: "microsecond", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MICROSECOND); ++ } ++ }, { ++ key: "nanosecond", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_NANOSECOND); ++ } ++ }, { ++ key: "era", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "eraYear", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "dayOfWeek", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "dayOfYear", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "weekOfYear", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInWeek", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInYear", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInMonth", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "monthsInYear", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "inLeapYear", ++ get: function get() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "with", ++ value: function _with(temporalDateTimeLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(temporalDateTimeLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ ++ RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike); ++ var options = GetOptionsObject(optionsParam); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'monthCode', 'nanosecond', 'second', 'year']); ++ var props = PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial'); ++ ++ if (!props) { ++ throw new TypeError('invalid date-time-like'); ++ } ++ ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ ++ var _ES$InterpretTemporal = InterpretTemporalDateTimeFields(calendar, fields, options), ++ year = _ES$InterpretTemporal.year, ++ month = _ES$InterpretTemporal.month, ++ day = _ES$InterpretTemporal.day, ++ hour = _ES$InterpretTemporal.hour, ++ minute = _ES$InterpretTemporal.minute, ++ second = _ES$InterpretTemporal.second, ++ millisecond = _ES$InterpretTemporal.millisecond, ++ microsecond = _ES$InterpretTemporal.microsecond, ++ nanosecond = _ES$InterpretTemporal.nanosecond; ++ ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ }, { ++ key: "withPlainTime", ++ value: function withPlainTime() { ++ var temporalTimeParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var year = GetSlot(this, ISO_YEAR); ++ var month = GetSlot(this, ISO_MONTH); ++ var day = GetSlot(this, ISO_DAY); ++ var calendar = GetSlot(this, CALENDAR); ++ if (temporalTimeParam === undefined) return CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar); ++ var temporalTime = ToTemporalTime(temporalTimeParam); ++ var hour = GetSlot(temporalTime, ISO_HOUR); ++ var minute = GetSlot(temporalTime, ISO_MINUTE); ++ var second = GetSlot(temporalTime, ISO_SECOND); ++ var millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ var microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ var nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ }, { ++ key: "withPlainDate", ++ value: function withPlainDate(temporalDateParam) { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var temporalDate = ToTemporalDate(temporalDateParam); ++ var year = GetSlot(temporalDate, ISO_YEAR); ++ var month = GetSlot(temporalDate, ISO_MONTH); ++ var day = GetSlot(temporalDate, ISO_DAY); ++ var calendar = GetSlot(temporalDate, CALENDAR); ++ var hour = GetSlot(this, ISO_HOUR); ++ var minute = GetSlot(this, ISO_MINUTE); ++ var second = GetSlot(this, ISO_SECOND); ++ var millisecond = GetSlot(this, ISO_MILLISECOND); ++ var microsecond = GetSlot(this, ISO_MICROSECOND); ++ var nanosecond = GetSlot(this, ISO_NANOSECOND); ++ calendar = ConsolidateCalendars(GetSlot(this, CALENDAR), calendar); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ }, { ++ key: "withCalendar", ++ value: function withCalendar(calendarParam) { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var calendar = ToTemporalCalendar(calendarParam); ++ return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar); ++ } ++ }, { ++ key: "add", ++ value: function add(temporalDurationLike) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(temporalDurationLike) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options); ++ } ++ }, { ++ key: "until", ++ value: function until(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDateTime('until', this, other, options); ++ } ++ }, { ++ key: "since", ++ value: function since(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainDateTime('since', this, other, options); ++ } ++ }, { ++ key: "round", ++ value: function round(optionsParam) { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) throw new TypeError('options parameter is required'); ++ var options = typeof optionsParam === 'string' ? CreateOnePropObject('smallestUnit', optionsParam) : GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED, ['day']); ++ var roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ var maximumIncrements = { ++ day: 1, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ var roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); ++ var year = GetSlot(this, ISO_YEAR); ++ var month = GetSlot(this, ISO_MONTH); ++ var day = GetSlot(this, ISO_DAY); ++ var hour = GetSlot(this, ISO_HOUR); ++ var minute = GetSlot(this, ISO_MINUTE); ++ var second = GetSlot(this, ISO_SECOND); ++ var millisecond = GetSlot(this, ISO_MILLISECOND); ++ var microsecond = GetSlot(this, ISO_MICROSECOND); ++ var nanosecond = GetSlot(this, ISO_NANOSECOND); ++ ++ var _ES$RoundISODateTime = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode); ++ ++ year = _ES$RoundISODateTime.year; ++ month = _ES$RoundISODateTime.month; ++ day = _ES$RoundISODateTime.day; ++ hour = _ES$RoundISODateTime.hour; ++ minute = _ES$RoundISODateTime.minute; ++ second = _ES$RoundISODateTime.second; ++ millisecond = _ES$RoundISODateTime.millisecond; ++ microsecond = _ES$RoundISODateTime.microsecond; ++ nanosecond = _ES$RoundISODateTime.nanosecond; ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR)); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalDateTime(otherParam); ++ ++ for (var _i = 0, _arr = [ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]; _i < _arr.length; _i++) { ++ var slot = _arr[_i]; ++ var val1 = GetSlot(this, slot); ++ var val2 = GetSlot(other, slot); ++ if (val1 !== val2) return false; ++ } ++ ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ ++ var _ES$ToSecondsStringPr = ToSecondsStringPrecision(options), ++ precision = _ES$ToSecondsStringPr.precision, ++ unit = _ES$ToSecondsStringPr.unit, ++ increment = _ES$ToSecondsStringPr.increment; ++ ++ var showCalendar = ToShowCalendarOption(options); ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalDateTimeToString(this, precision, showCalendar, { ++ unit: unit, ++ increment: increment, ++ roundingMode: roundingMode ++ }); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToString(this, 'auto'); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime'); ++ } ++ }, { ++ key: "toZonedDateTime", ++ value: function toZonedDateTime(temporalTimeZoneLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var timeZone = ToTemporalTimeZone(temporalTimeZoneLike); ++ var options = GetOptionsObject(optionsParam); ++ var disambiguation = ToTemporalDisambiguation(options); ++ var instant = BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR)); ++ } ++ }, { ++ key: "toPlainDate", ++ value: function toPlainDate() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToDate(this); ++ } ++ }, { ++ key: "toPlainYearMonth", ++ value: function toPlainYearMonth() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ }, { ++ key: "toPlainMonthDay", ++ value: function toPlainMonthDay() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ }, { ++ key: "toPlainTime", ++ value: function toPlainTime() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToTime(this); ++ } ++ }, { ++ key: "getISOFields", ++ value: function getISOFields() { ++ if (!IsTemporalDateTime(this)) throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoHour: GetSlot(this, ISO_HOUR), ++ isoMicrosecond: GetSlot(this, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(this, ISO_MILLISECOND), ++ isoMinute: GetSlot(this, ISO_MINUTE), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoNanosecond: GetSlot(this, ISO_NANOSECOND), ++ isoSecond: GetSlot(this, ISO_SECOND), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var options = GetOptionsObject(optionsParam); ++ ++ if (IsTemporalDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR)); ++ } ++ ++ return ToTemporalDateTime(item, options); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var one = ToTemporalDateTime(oneParam); ++ var two = ToTemporalDateTime(twoParam); ++ ++ for (var _i2 = 0, _arr2 = [ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]; _i2 < _arr2.length; _i2++) { ++ var slot = _arr2[_i2]; ++ var val1 = GetSlot(one, slot); ++ var val2 = GetSlot(two, slot); ++ if (val1 !== val2) return ComparisonResult(val1 - val2); ++ } ++ ++ return 0; ++ } ++ }]); ++ ++ return PlainDateTime; ++ }(); ++ MakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime'); ++ ++ var Duration = /*#__PURE__*/function () { ++ function Duration() { ++ var yearsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; ++ var monthsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; ++ var weeksParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; ++ var daysParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; ++ var hoursParam = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; ++ var minutesParam = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; ++ var secondsParam = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0; ++ var millisecondsParam = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0; ++ var microsecondsParam = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; ++ var nanosecondsParam = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; ++ ++ _classCallCheck(this, Duration); ++ ++ var years = ToIntegerWithoutRounding(yearsParam); ++ var months = ToIntegerWithoutRounding(monthsParam); ++ var weeks = ToIntegerWithoutRounding(weeksParam); ++ var days = ToIntegerWithoutRounding(daysParam); ++ var hours = ToIntegerWithoutRounding(hoursParam); ++ var minutes = ToIntegerWithoutRounding(minutesParam); ++ var seconds = ToIntegerWithoutRounding(secondsParam); ++ var milliseconds = ToIntegerWithoutRounding(millisecondsParam); ++ var microseconds = ToIntegerWithoutRounding(microsecondsParam); ++ var nanoseconds = ToIntegerWithoutRounding(nanosecondsParam); ++ RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ CreateSlots(this); ++ SetSlot(this, YEARS, years); ++ SetSlot(this, MONTHS, months); ++ SetSlot(this, WEEKS, weeks); ++ SetSlot(this, DAYS, days); ++ SetSlot(this, HOURS, hours); ++ SetSlot(this, MINUTES, minutes); ++ SetSlot(this, SECONDS, seconds); ++ SetSlot(this, MILLISECONDS, milliseconds); ++ SetSlot(this, MICROSECONDS, microseconds); ++ SetSlot(this, NANOSECONDS, nanoseconds); ++ ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: "".concat(this[Symbol.toStringTag], " <").concat(TemporalDurationToString(this), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ ++ _createClass(Duration, [{ ++ key: "years", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, YEARS); ++ } ++ }, { ++ key: "months", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, MONTHS); ++ } ++ }, { ++ key: "weeks", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, WEEKS); ++ } ++ }, { ++ key: "days", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, DAYS); ++ } ++ }, { ++ key: "hours", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, HOURS); ++ } ++ }, { ++ key: "minutes", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, MINUTES); ++ } ++ }, { ++ key: "seconds", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, SECONDS); ++ } ++ }, { ++ key: "milliseconds", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, MILLISECONDS); ++ } ++ }, { ++ key: "microseconds", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, MICROSECONDS); ++ } ++ }, { ++ key: "nanoseconds", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, NANOSECONDS); ++ } ++ }, { ++ key: "sign", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)); ++ } ++ }, { ++ key: "blank", ++ get: function get() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0; ++ } ++ }, { ++ key: "with", ++ value: function _with(durationLike) { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ var props = PrepareTemporalFields(durationLike, // NOTE: Field order here is important. ++ ['days', 'hours', 'microseconds', 'milliseconds', 'minutes', 'months', 'nanoseconds', 'seconds', 'weeks', 'years'], 'partial'); ++ ++ if (!props) { ++ throw new TypeError('invalid duration-like'); ++ } ++ ++ var _props$years = props.years, ++ years = _props$years === void 0 ? GetSlot(this, YEARS) : _props$years, ++ _props$months = props.months, ++ months = _props$months === void 0 ? GetSlot(this, MONTHS) : _props$months, ++ _props$weeks = props.weeks, ++ weeks = _props$weeks === void 0 ? GetSlot(this, WEEKS) : _props$weeks, ++ _props$days = props.days, ++ days = _props$days === void 0 ? GetSlot(this, DAYS) : _props$days, ++ _props$hours = props.hours, ++ hours = _props$hours === void 0 ? GetSlot(this, HOURS) : _props$hours, ++ _props$minutes = props.minutes, ++ minutes = _props$minutes === void 0 ? GetSlot(this, MINUTES) : _props$minutes, ++ _props$seconds = props.seconds, ++ seconds = _props$seconds === void 0 ? GetSlot(this, SECONDS) : _props$seconds, ++ _props$milliseconds = props.milliseconds, ++ milliseconds = _props$milliseconds === void 0 ? GetSlot(this, MILLISECONDS) : _props$milliseconds, ++ _props$microseconds = props.microseconds, ++ microseconds = _props$microseconds === void 0 ? GetSlot(this, MICROSECONDS) : _props$microseconds, ++ _props$nanoseconds = props.nanoseconds, ++ nanoseconds = _props$nanoseconds === void 0 ? GetSlot(this, NANOSECONDS) : _props$nanoseconds; ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ }, { ++ key: "negated", ++ value: function negated() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return CreateNegatedTemporalDuration(this); ++ } ++ }, { ++ key: "abs", ++ value: function abs() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS))); ++ } ++ }, { ++ key: "add", ++ value: function add(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromDuration('add', this, other, options); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options); ++ } ++ }, { ++ key: "round", ++ value: function round(optionsParam) { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) throw new TypeError('options parameter is required'); ++ var years = GetSlot(this, YEARS); ++ var months = GetSlot(this, MONTHS); ++ var weeks = GetSlot(this, WEEKS); ++ var days = GetSlot(this, DAYS); ++ var hours = GetSlot(this, HOURS); ++ var minutes = GetSlot(this, MINUTES); ++ var seconds = GetSlot(this, SECONDS); ++ var milliseconds = GetSlot(this, MILLISECONDS); ++ var microseconds = GetSlot(this, MICROSECONDS); ++ var nanoseconds = GetSlot(this, NANOSECONDS); ++ var defaultLargestUnit = DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ var options = typeof optionsParam === 'string' ? CreateOnePropObject('smallestUnit', optionsParam) : GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined); ++ var smallestUnitPresent = true; ++ ++ if (!smallestUnit) { ++ smallestUnitPresent = false; ++ smallestUnit = 'nanosecond'; ++ } ++ ++ defaultLargestUnit = LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit); ++ var largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']); ++ var largestUnitPresent = true; ++ ++ if (!largestUnit) { ++ largestUnitPresent = false; ++ largestUnit = defaultLargestUnit; ++ } ++ ++ if (largestUnit === 'auto') largestUnit = defaultLargestUnit; ++ ++ if (!smallestUnitPresent && !largestUnitPresent) { ++ throw new RangeError('at least one of smallestUnit or largestUnit is required'); ++ } ++ ++ if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) { ++ throw new RangeError("largestUnit ".concat(largestUnit, " cannot be smaller than smallestUnit ").concat(smallestUnit)); ++ } ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ var roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit); ++ var relativeTo = ToRelativeTemporalObject(options); ++ ++ var _ES$UnbalanceDuration = UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo); ++ ++ years = _ES$UnbalanceDuration.years; ++ months = _ES$UnbalanceDuration.months; ++ weeks = _ES$UnbalanceDuration.weeks; ++ days = _ES$UnbalanceDuration.days; ++ ++ var _ES$RoundDuration = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo); ++ ++ years = _ES$RoundDuration.years; ++ months = _ES$RoundDuration.months; ++ weeks = _ES$RoundDuration.weeks; ++ days = _ES$RoundDuration.days; ++ hours = _ES$RoundDuration.hours; ++ minutes = _ES$RoundDuration.minutes; ++ seconds = _ES$RoundDuration.seconds; ++ milliseconds = _ES$RoundDuration.milliseconds; ++ microseconds = _ES$RoundDuration.microseconds; ++ nanoseconds = _ES$RoundDuration.nanoseconds; ++ ++ var _ES$AdjustRoundedDura = AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo); ++ ++ years = _ES$AdjustRoundedDura.years; ++ months = _ES$AdjustRoundedDura.months; ++ weeks = _ES$AdjustRoundedDura.weeks; ++ days = _ES$AdjustRoundedDura.days; ++ hours = _ES$AdjustRoundedDura.hours; ++ minutes = _ES$AdjustRoundedDura.minutes; ++ seconds = _ES$AdjustRoundedDura.seconds; ++ milliseconds = _ES$AdjustRoundedDura.milliseconds; ++ microseconds = _ES$AdjustRoundedDura.microseconds; ++ nanoseconds = _ES$AdjustRoundedDura.nanoseconds; ++ ++ var _ES$BalanceDurationRe = BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo); ++ ++ years = _ES$BalanceDurationRe.years; ++ months = _ES$BalanceDurationRe.months; ++ weeks = _ES$BalanceDurationRe.weeks; ++ days = _ES$BalanceDurationRe.days; ++ ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ relativeTo = MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0); ++ } ++ ++ var _ES$BalanceDuration = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo); ++ ++ days = _ES$BalanceDuration.days; ++ hours = _ES$BalanceDuration.hours; ++ minutes = _ES$BalanceDuration.minutes; ++ seconds = _ES$BalanceDuration.seconds; ++ milliseconds = _ES$BalanceDuration.milliseconds; ++ microseconds = _ES$BalanceDuration.microseconds; ++ nanoseconds = _ES$BalanceDuration.nanoseconds; ++ return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds); ++ } ++ }, { ++ key: "total", ++ value: function total(optionsParam) { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ var years = GetSlot(this, YEARS); ++ var months = GetSlot(this, MONTHS); ++ var weeks = GetSlot(this, WEEKS); ++ var days = GetSlot(this, DAYS); ++ var hours = GetSlot(this, HOURS); ++ var minutes = GetSlot(this, MINUTES); ++ var seconds = GetSlot(this, SECONDS); ++ var milliseconds = GetSlot(this, MILLISECONDS); ++ var microseconds = GetSlot(this, MICROSECONDS); ++ var nanoseconds = GetSlot(this, NANOSECONDS); ++ if (optionsParam === undefined) throw new TypeError('options argument is required'); ++ var options = typeof optionsParam === 'string' ? CreateOnePropObject('unit', optionsParam) : GetOptionsObject(optionsParam); ++ var unit = GetTemporalUnit(options, 'unit', 'datetime', REQUIRED); ++ var relativeTo = ToRelativeTemporalObject(options); // Convert larger units down to days ++ ++ var _ES$UnbalanceDuration2 = UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo); ++ ++ years = _ES$UnbalanceDuration2.years; ++ months = _ES$UnbalanceDuration2.months; ++ weeks = _ES$UnbalanceDuration2.weeks; ++ days = _ES$UnbalanceDuration2.days; ++ // If the unit we're totalling is smaller than `days`, convert days down to that unit. ++ var intermediate; ++ ++ if (IsTemporalZonedDateTime(relativeTo)) { ++ intermediate = MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0); ++ } ++ ++ var _ES$BalanceDuration2 = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate); ++ ++ days = _ES$BalanceDuration2.days; ++ hours = _ES$BalanceDuration2.hours; ++ minutes = _ES$BalanceDuration2.minutes; ++ seconds = _ES$BalanceDuration2.seconds; ++ milliseconds = _ES$BalanceDuration2.milliseconds; ++ microseconds = _ES$BalanceDuration2.microseconds; ++ nanoseconds = _ES$BalanceDuration2.nanoseconds; ++ ++ // Finally, truncate to the correct unit and calculate remainder ++ var _ES$RoundDuration2 = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo), ++ total = _ES$RoundDuration2.total; ++ ++ return total; ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ ++ var _ES$ToSecondsStringPr = ToSecondsStringPrecision(options), ++ precision = _ES$ToSecondsStringPr.precision, ++ unit = _ES$ToSecondsStringPr.unit, ++ increment = _ES$ToSecondsStringPr.increment; ++ ++ if (precision === 'minute') throw new RangeError('smallestUnit must not be "minute"'); ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalDurationToString(this, precision, { ++ unit: unit, ++ increment: increment, ++ roundingMode: roundingMode ++ }); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ return TemporalDurationToString(this); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalDuration(this)) throw new TypeError('invalid receiver'); ++ ++ if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') { ++ return new Intl.DurationFormat(locales, options).format(this); ++ } ++ ++ console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.'); ++ return TemporalDurationToString(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() to compare Temporal.Duration'); ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ if (IsTemporalDuration(item)) { ++ return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS)); ++ } ++ ++ return ToTemporalDuration(item); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var optionsParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; ++ var one = ToTemporalDuration(oneParam); ++ var two = ToTemporalDuration(twoParam); ++ var options = GetOptionsObject(optionsParam); ++ var relativeTo = ToRelativeTemporalObject(options); ++ var y1 = GetSlot(one, YEARS); ++ var mon1 = GetSlot(one, MONTHS); ++ var w1 = GetSlot(one, WEEKS); ++ var d1 = GetSlot(one, DAYS); ++ var h1 = GetSlot(one, HOURS); ++ var min1 = GetSlot(one, MINUTES); ++ var s1 = GetSlot(one, SECONDS); ++ var ms1 = GetSlot(one, MILLISECONDS); ++ var µs1 = GetSlot(one, MICROSECONDS); ++ var ns1 = GetSlot(one, NANOSECONDS); ++ var y2 = GetSlot(two, YEARS); ++ var mon2 = GetSlot(two, MONTHS); ++ var w2 = GetSlot(two, WEEKS); ++ var d2 = GetSlot(two, DAYS); ++ var h2 = GetSlot(two, HOURS); ++ var min2 = GetSlot(two, MINUTES); ++ var s2 = GetSlot(two, SECONDS); ++ var ms2 = GetSlot(two, MILLISECONDS); ++ var µs2 = GetSlot(two, MICROSECONDS); ++ var ns2 = GetSlot(two, NANOSECONDS); ++ var shift1 = CalculateOffsetShift(relativeTo, y1, mon1, w1, d1); ++ var shift2 = CalculateOffsetShift(relativeTo, y2, mon2, w2, d2); ++ ++ if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) { ++ var _ES$UnbalanceDuration3 = UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo); ++ ++ d1 = _ES$UnbalanceDuration3.days; ++ ++ var _ES$UnbalanceDuration4 = UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo); ++ ++ d2 = _ES$UnbalanceDuration4.days; ++ } ++ ++ var totalNs1 = TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1); ++ var totalNs2 = TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2); ++ return ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2))); ++ } ++ }]); ++ ++ return Duration; ++ }(); ++ MakeIntrinsicClass(Duration, 'Temporal.Duration'); ++ ++ var ObjectCreate$1 = Object.create; ++ var PlainMonthDay = /*#__PURE__*/function () { ++ function PlainMonthDay(isoMonthParam, isoDayParam) { ++ var calendarParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GetISO8601Calendar(); ++ var referenceISOYearParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1972; ++ ++ _classCallCheck(this, PlainMonthDay); ++ ++ var isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ var isoDay = ToIntegerThrowOnInfinity(isoDayParam); ++ var calendar = ToTemporalCalendar(calendarParam); ++ var referenceISOYear = ToIntegerThrowOnInfinity(referenceISOYearParam); // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This ++ // check exists only to improve the error message. ++ ++ if (arguments.length < 2) { ++ throw new RangeError('missing argument: isoMonth and isoDay are required'); ++ } ++ ++ CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear); ++ } ++ ++ _createClass(PlainMonthDay, [{ ++ key: "monthCode", ++ get: function get() { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "day", ++ get: function get() { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "calendar", ++ get: function get() { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ }, { ++ key: "with", ++ value: function _with(temporalMonthDayLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(temporalMonthDayLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ ++ RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']); ++ var props = PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial'); ++ ++ if (!props) { ++ throw new TypeError('invalid month-day-like'); ++ } ++ ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ var options = GetOptionsObject(optionsParam); ++ return CalendarMonthDayFromFields(calendar, fields, options); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalMonthDay(otherParam); ++ ++ for (var _i = 0, _arr = [ISO_MONTH, ISO_DAY, ISO_YEAR]; _i < _arr.length; _i++) { ++ var slot = _arr[_i]; ++ var val1 = GetSlot(this, slot); ++ var val2 = GetSlot(other, slot); ++ if (val1 !== val2) return false; ++ } ++ ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ var showCalendar = ToShowCalendarOption(options); ++ return TemporalMonthDayToString(this, showCalendar); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ return TemporalMonthDayToString(this); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use equals() to compare Temporal.PlainMonthDay'); ++ } ++ }, { ++ key: "toPlainDate", ++ value: function toPlainDate(item) { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) throw new TypeError('argument should be an object'); ++ var calendar = GetSlot(this, CALENDAR); ++ var receiverFieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ var fields = PrepareTemporalFields(this, receiverFieldNames, []); ++ var inputFieldNames = CalendarFields(calendar, ['year']); ++ var inputFields = PrepareTemporalFields(item, inputFieldNames, []); ++ var mergedFields = CalendarMergeFields(calendar, fields, inputFields); // TODO: Use MergeLists abstract operation. ++ ++ var mergedFieldNames = _toConsumableArray(new Set([].concat(_toConsumableArray(receiverFieldNames), _toConsumableArray(inputFieldNames)))); ++ ++ mergedFields = PrepareTemporalFields(mergedFields, mergedFieldNames, []); ++ var options = ObjectCreate$1(null); ++ options.overflow = 'reject'; ++ return CalendarDateFromFields(calendar, mergedFields, options); ++ } ++ }, { ++ key: "getISOFields", ++ value: function getISOFields() { ++ if (!IsTemporalMonthDay(this)) throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var options = GetOptionsObject(optionsParam); ++ ++ if (IsTemporalMonthDay(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR)); ++ } ++ ++ return ToTemporalMonthDay(item, options); ++ } ++ }]); ++ ++ return PlainMonthDay; ++ }(); ++ MakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay'); ++ ++ var instant = function instant() { ++ var Instant = GetIntrinsic('%Temporal.Instant%'); ++ return new Instant(SystemUTCEpochNanoSeconds()); ++ }; ++ ++ var plainDateTime = function plainDateTime(calendarLike) { ++ var temporalTimeZoneLike = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : timeZone(); ++ var tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ var calendar = ToTemporalCalendar(calendarLike); ++ var inst = instant(); ++ return BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar); ++ }; ++ ++ var plainDateTimeISO = function plainDateTimeISO() { ++ var temporalTimeZoneLike = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : timeZone(); ++ var tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ var calendar = GetISO8601Calendar(); ++ var inst = instant(); ++ return BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar); ++ }; ++ ++ var zonedDateTime = function zonedDateTime(calendarLike) { ++ var temporalTimeZoneLike = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : timeZone(); ++ var tZ = ToTemporalTimeZone(temporalTimeZoneLike); ++ var calendar = ToTemporalCalendar(calendarLike); ++ return CreateTemporalZonedDateTime(SystemUTCEpochNanoSeconds(), tZ, calendar); ++ }; ++ ++ var zonedDateTimeISO = function zonedDateTimeISO() { ++ var temporalTimeZoneLike = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : timeZone(); ++ return zonedDateTime(GetISO8601Calendar(), temporalTimeZoneLike); ++ }; ++ ++ var plainDate = function plainDate(calendarLike) { ++ var temporalTimeZoneLike = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : timeZone(); ++ return TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike)); ++ }; ++ ++ var plainDateISO = function plainDateISO() { ++ var temporalTimeZoneLike = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : timeZone(); ++ return TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike)); ++ }; ++ ++ var plainTimeISO = function plainTimeISO() { ++ var temporalTimeZoneLike = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : timeZone(); ++ return TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike)); ++ }; ++ ++ var timeZone = function timeZone() { ++ return SystemTimeZone(); ++ }; ++ ++ var Now = _defineProperty({ ++ instant: instant, ++ plainDateTime: plainDateTime, ++ plainDateTimeISO: plainDateTimeISO, ++ plainDate: plainDate, ++ plainDateISO: plainDateISO, ++ plainTimeISO: plainTimeISO, ++ timeZone: timeZone, ++ zonedDateTime: zonedDateTime, ++ zonedDateTimeISO: zonedDateTimeISO ++ }, Symbol.toStringTag, 'Temporal.Now'); ++ Object.defineProperty(Now, Symbol.toStringTag, { ++ value: 'Temporal.Now', ++ writable: false, ++ enumerable: false, ++ configurable: true ++ }); ++ ++ var ObjectAssign = Object.assign; ++ ++ function TemporalTimeToString(time, precision) { ++ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; ++ var hour = GetSlot(time, ISO_HOUR); ++ var minute = GetSlot(time, ISO_MINUTE); ++ var second = GetSlot(time, ISO_SECOND); ++ var millisecond = GetSlot(time, ISO_MILLISECOND); ++ var microsecond = GetSlot(time, ISO_MICROSECOND); ++ var nanosecond = GetSlot(time, ISO_NANOSECOND); ++ ++ if (options) { ++ var unit = options.unit, ++ increment = options.increment, ++ roundingMode = options.roundingMode; ++ ++ var _ES$RoundTime = RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode); ++ ++ hour = _ES$RoundTime.hour; ++ minute = _ES$RoundTime.minute; ++ second = _ES$RoundTime.second; ++ millisecond = _ES$RoundTime.millisecond; ++ microsecond = _ES$RoundTime.microsecond; ++ nanosecond = _ES$RoundTime.nanosecond; ++ } ++ ++ var hourString = ISODateTimePartString(hour); ++ var minuteString = ISODateTimePartString(minute); ++ var seconds = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision); ++ return "".concat(hourString, ":").concat(minuteString).concat(seconds); ++ } ++ ++ var PlainTime = /*#__PURE__*/function () { ++ function PlainTime() { ++ var isoHourParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; ++ var isoMinuteParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; ++ var isoSecondParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; ++ var isoMillisecondParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; ++ var isoMicrosecondParam = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; ++ var isoNanosecondParam = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; ++ ++ _classCallCheck(this, PlainTime); ++ ++ var isoHour = ToIntegerThrowOnInfinity(isoHourParam); ++ var isoMinute = ToIntegerThrowOnInfinity(isoMinuteParam); ++ var isoSecond = ToIntegerThrowOnInfinity(isoSecondParam); ++ var isoMillisecond = ToIntegerThrowOnInfinity(isoMillisecondParam); ++ var isoMicrosecond = ToIntegerThrowOnInfinity(isoMicrosecondParam); ++ var isoNanosecond = ToIntegerThrowOnInfinity(isoNanosecondParam); ++ RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond); ++ CreateSlots(this); ++ SetSlot(this, ISO_HOUR, isoHour); ++ SetSlot(this, ISO_MINUTE, isoMinute); ++ SetSlot(this, ISO_SECOND, isoSecond); ++ SetSlot(this, ISO_MILLISECOND, isoMillisecond); ++ SetSlot(this, ISO_MICROSECOND, isoMicrosecond); ++ SetSlot(this, ISO_NANOSECOND, isoNanosecond); ++ SetSlot(this, CALENDAR, GetISO8601Calendar()); ++ ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: "".concat(this[Symbol.toStringTag], " <").concat(TemporalTimeToString(this, 'auto'), ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ ++ _createClass(PlainTime, [{ ++ key: "calendar", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); // PlainTime's calendar isn't settable, so can't be a userland calendar ++ ++ return GetSlot(this, CALENDAR); ++ } ++ }, { ++ key: "hour", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_HOUR); ++ } ++ }, { ++ key: "minute", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MINUTE); ++ } ++ }, { ++ key: "second", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_SECOND); ++ } ++ }, { ++ key: "millisecond", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MILLISECOND); ++ } ++ }, { ++ key: "microsecond", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_MICROSECOND); ++ } ++ }, { ++ key: "nanosecond", ++ get: function get() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, ISO_NANOSECOND); ++ } ++ }, { ++ key: "with", ++ value: function _with(temporalTimeLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(temporalTimeLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ ++ RejectObjectWithCalendarOrTimeZone(temporalTimeLike); ++ var partialTime = ToTemporalTimeRecord(temporalTimeLike, 'partial'); ++ var options = GetOptionsObject(optionsParam); ++ var overflow = ToTemporalOverflow(options); ++ var fields = ToTemporalTimeRecord(this); ++ ++ var _ObjectAssign = ObjectAssign(fields, partialTime), ++ hour = _ObjectAssign.hour, ++ minute = _ObjectAssign.minute, ++ second = _ObjectAssign.second, ++ millisecond = _ObjectAssign.millisecond, ++ microsecond = _ObjectAssign.microsecond, ++ nanosecond = _ObjectAssign.nanosecond; ++ ++ var _ES$RegulateTime = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow); ++ ++ hour = _ES$RegulateTime.hour; ++ minute = _ES$RegulateTime.minute; ++ second = _ES$RegulateTime.second; ++ millisecond = _ES$RegulateTime.millisecond; ++ microsecond = _ES$RegulateTime.microsecond; ++ nanosecond = _ES$RegulateTime.nanosecond; ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ }, { ++ key: "add", ++ value: function add(temporalDurationLike) { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(temporalDurationLike) { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike); ++ } ++ }, { ++ key: "until", ++ value: function until(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainTime('until', this, other, options); ++ } ++ }, { ++ key: "since", ++ value: function since(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainTime('since', this, other, options); ++ } ++ }, { ++ key: "round", ++ value: function round(optionsParam) { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) throw new TypeError('options parameter is required'); ++ var options = typeof optionsParam === 'string' ? CreateOnePropObject('smallestUnit', optionsParam) : GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED); ++ var roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ var MAX_INCREMENTS = { ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ var roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false); ++ var hour = GetSlot(this, ISO_HOUR); ++ var minute = GetSlot(this, ISO_MINUTE); ++ var second = GetSlot(this, ISO_SECOND); ++ var millisecond = GetSlot(this, ISO_MILLISECOND); ++ var microsecond = GetSlot(this, ISO_MICROSECOND); ++ var nanosecond = GetSlot(this, ISO_NANOSECOND); ++ ++ var _ES$RoundTime2 = RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode); ++ ++ hour = _ES$RoundTime2.hour; ++ minute = _ES$RoundTime2.minute; ++ second = _ES$RoundTime2.second; ++ millisecond = _ES$RoundTime2.millisecond; ++ microsecond = _ES$RoundTime2.microsecond; ++ nanosecond = _ES$RoundTime2.nanosecond; ++ return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalTime(otherParam); ++ ++ for (var _i = 0, _arr = [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]; _i < _arr.length; _i++) { ++ var slot = _arr[_i]; ++ var val1 = GetSlot(this, slot); ++ var val2 = GetSlot(other, slot); ++ if (val1 !== val2) return false; ++ } ++ ++ return true; ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ ++ var _ES$ToSecondsStringPr = ToSecondsStringPrecision(options), ++ precision = _ES$ToSecondsStringPr.precision, ++ unit = _ES$ToSecondsStringPr.unit, ++ increment = _ES$ToSecondsStringPr.increment; ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ return TemporalTimeToString(this, precision, { ++ unit: unit, ++ increment: increment, ++ roundingMode: roundingMode ++ }); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalTimeToString(this, 'auto'); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainTime'); ++ } ++ }, { ++ key: "toPlainDateTime", ++ value: function toPlainDateTime(temporalDateParam) { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ var temporalDate = ToTemporalDate(temporalDateParam); ++ var year = GetSlot(temporalDate, ISO_YEAR); ++ var month = GetSlot(temporalDate, ISO_MONTH); ++ var day = GetSlot(temporalDate, ISO_DAY); ++ var calendar = GetSlot(temporalDate, CALENDAR); ++ var hour = GetSlot(this, ISO_HOUR); ++ var minute = GetSlot(this, ISO_MINUTE); ++ var second = GetSlot(this, ISO_SECOND); ++ var millisecond = GetSlot(this, ISO_MILLISECOND); ++ var microsecond = GetSlot(this, ISO_MICROSECOND); ++ var nanosecond = GetSlot(this, ISO_NANOSECOND); ++ return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ } ++ }, { ++ key: "toZonedDateTime", ++ value: function toZonedDateTime(item) { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(item)) { ++ throw new TypeError('invalid argument'); ++ } ++ ++ var dateLike = item.plainDate; ++ ++ if (dateLike === undefined) { ++ throw new TypeError('missing date property'); ++ } ++ ++ var temporalDate = ToTemporalDate(dateLike); ++ var timeZoneLike = item.timeZone; ++ ++ if (timeZoneLike === undefined) { ++ throw new TypeError('missing timeZone property'); ++ } ++ ++ var timeZone = ToTemporalTimeZone(timeZoneLike); ++ var year = GetSlot(temporalDate, ISO_YEAR); ++ var month = GetSlot(temporalDate, ISO_MONTH); ++ var day = GetSlot(temporalDate, ISO_DAY); ++ var calendar = GetSlot(temporalDate, CALENDAR); ++ var hour = GetSlot(this, ISO_HOUR); ++ var minute = GetSlot(this, ISO_MINUTE); ++ var second = GetSlot(this, ISO_SECOND); ++ var millisecond = GetSlot(this, ISO_MILLISECOND); ++ var microsecond = GetSlot(this, ISO_MICROSECOND); ++ var nanosecond = GetSlot(this, ISO_NANOSECOND); ++ var PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ var instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }, { ++ key: "getISOFields", ++ value: function getISOFields() { ++ if (!IsTemporalTime(this)) throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoHour: GetSlot(this, ISO_HOUR), ++ isoMicrosecond: GetSlot(this, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(this, ISO_MILLISECOND), ++ isoMinute: GetSlot(this, ISO_MINUTE), ++ isoNanosecond: GetSlot(this, ISO_NANOSECOND), ++ isoSecond: GetSlot(this, ISO_SECOND) ++ }; ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var options = GetOptionsObject(optionsParam); ++ var overflow = ToTemporalOverflow(options); ++ ++ if (IsTemporalTime(item)) { ++ return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND)); ++ } ++ ++ return ToTemporalTime(item, overflow); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var one = ToTemporalTime(oneParam); ++ var two = ToTemporalTime(twoParam); ++ ++ for (var _i2 = 0, _arr2 = [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]; _i2 < _arr2.length; _i2++) { ++ var slot = _arr2[_i2]; ++ var val1 = GetSlot(one, slot); ++ var val2 = GetSlot(two, slot); ++ if (val1 !== val2) return ComparisonResult(val1 - val2); ++ } ++ ++ return 0; ++ } ++ }]); ++ ++ return PlainTime; ++ }(); ++ MakeIntrinsicClass(PlainTime, 'Temporal.PlainTime'); ++ ++ var TimeZone = /*#__PURE__*/function () { ++ function TimeZone(timeZoneIdentifierParam) { ++ _classCallCheck(this, TimeZone); ++ ++ // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw. ++ // This check exists only to improve the error message. ++ if (arguments.length < 1) { ++ throw new RangeError('missing argument: identifier is required'); ++ } ++ ++ var timeZoneIdentifier = GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam); ++ CreateSlots(this); ++ SetSlot(this, TIMEZONE_ID, timeZoneIdentifier); ++ ++ { ++ Object.defineProperty(this, '_repr_', { ++ value: "".concat(this[Symbol.toStringTag], " <").concat(timeZoneIdentifier, ">"), ++ writable: false, ++ enumerable: false, ++ configurable: false ++ }); ++ } ++ } ++ ++ _createClass(TimeZone, [{ ++ key: "id", ++ get: function get() { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ }, { ++ key: "getOffsetNanosecondsFor", ++ value: function getOffsetNanosecondsFor(instantParam) { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ var instant = ToTemporalInstant(instantParam); ++ var id = GetSlot(this, TIMEZONE_ID); ++ ++ if (TestTimeZoneOffsetString(id)) { ++ return ParseTimeZoneOffsetString(id); ++ } ++ ++ return GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id); ++ } ++ }, { ++ key: "getOffsetStringFor", ++ value: function getOffsetStringFor(instantParam) { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ var instant = ToTemporalInstant(instantParam); ++ return BuiltinTimeZoneGetOffsetStringFor(this, instant); ++ } ++ }, { ++ key: "getPlainDateTimeFor", ++ value: function getPlainDateTimeFor(instantParam) { ++ var calendarParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GetISO8601Calendar(); ++ var instant = ToTemporalInstant(instantParam); ++ var calendar = ToTemporalCalendar(calendarParam); ++ return BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar); ++ } ++ }, { ++ key: "getInstantFor", ++ value: function getInstantFor(dateTimeParam) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ var dateTime = ToTemporalDateTime(dateTimeParam); ++ var options = GetOptionsObject(optionsParam); ++ var disambiguation = ToTemporalDisambiguation(options); ++ return BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation); ++ } ++ }, { ++ key: "getPossibleInstantsFor", ++ value: function getPossibleInstantsFor(dateTimeParam) { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ var dateTime = ToTemporalDateTime(dateTimeParam); ++ var Instant = GetIntrinsic('%Temporal.Instant%'); ++ var id = GetSlot(this, TIMEZONE_ID); ++ ++ if (TestTimeZoneOffsetString(id)) { ++ var epochNs = GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ if (epochNs === null) throw new RangeError('DateTime outside of supported range'); ++ var offsetNs = ParseTimeZoneOffsetString(id); ++ return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))]; ++ } ++ ++ var possibleEpochNs = GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND)); ++ return possibleEpochNs.map(function (ns) { ++ return new Instant(ns); ++ }); ++ } ++ }, { ++ key: "getNextTransition", ++ value: function getNextTransition(startingPointParam) { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ var startingPoint = ToTemporalInstant(startingPointParam); ++ var id = GetSlot(this, TIMEZONE_ID); // Offset time zones or UTC have no transitions ++ ++ if (TestTimeZoneOffsetString(id) || id === 'UTC') { ++ return null; ++ } ++ ++ var epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS); ++ var Instant = GetIntrinsic('%Temporal.Instant%'); ++ epochNanoseconds = GetIANATimeZoneNextTransition(epochNanoseconds, id); ++ return epochNanoseconds === null ? null : new Instant(epochNanoseconds); ++ } ++ }, { ++ key: "getPreviousTransition", ++ value: function getPreviousTransition(startingPointParam) { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ var startingPoint = ToTemporalInstant(startingPointParam); ++ var id = GetSlot(this, TIMEZONE_ID); // Offset time zones or UTC have no transitions ++ ++ if (TestTimeZoneOffsetString(id) || id === 'UTC') { ++ return null; ++ } ++ ++ var epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS); ++ var Instant = GetIntrinsic('%Temporal.Instant%'); ++ epochNanoseconds = GetIANATimeZonePreviousTransition(epochNanoseconds, id); ++ return epochNanoseconds === null ? null : new Instant(epochNanoseconds); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ return ToString(GetSlot(this, TIMEZONE_ID)); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalTimeZone(this)) throw new TypeError('invalid receiver'); ++ return ToString(this); ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ return ToTemporalTimeZone(item); ++ } ++ }]); ++ ++ return TimeZone; ++ }(); ++ MakeIntrinsicClass(TimeZone, 'Temporal.TimeZone'); ++ ++ var ObjectCreate = Object.create; ++ var PlainYearMonth = /*#__PURE__*/function () { ++ function PlainYearMonth(isoYearParam, isoMonthParam) { ++ var calendarParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GetISO8601Calendar(); ++ var referenceISODayParam = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; ++ ++ _classCallCheck(this, PlainYearMonth); ++ ++ var isoYear = ToIntegerThrowOnInfinity(isoYearParam); ++ var isoMonth = ToIntegerThrowOnInfinity(isoMonthParam); ++ var calendar = ToTemporalCalendar(calendarParam); ++ var referenceISODay = ToIntegerThrowOnInfinity(referenceISODayParam); // Note: if the arguments are not passed, ++ // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will ++ // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This ++ // check exists only to improve the error message. ++ ++ if (arguments.length < 2) { ++ throw new RangeError('missing argument: isoYear and isoMonth are required'); ++ } ++ ++ CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay); ++ } ++ ++ _createClass(PlainYearMonth, [{ ++ key: "year", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "month", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "monthCode", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "calendar", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ }, { ++ key: "era", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "eraYear", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInMonth", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "daysInYear", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "monthsInYear", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "inLeapYear", ++ get: function get() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), this); ++ } ++ }, { ++ key: "with", ++ value: function _with(temporalYearMonthLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(temporalYearMonthLike)) { ++ throw new TypeError('invalid argument'); ++ } ++ ++ RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']); ++ var props = PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial'); ++ ++ if (!props) { ++ throw new TypeError('invalid year-month-like'); ++ } ++ ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldNames, []); ++ var options = GetOptionsObject(optionsParam); ++ return CalendarYearMonthFromFields(calendar, fields, options); ++ } ++ }, { ++ key: "add", ++ value: function add(temporalDurationLike) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(temporalDurationLike) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options); ++ } ++ }, { ++ key: "until", ++ value: function until(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainYearMonth('until', this, other, options); ++ } ++ }, { ++ key: "since", ++ value: function since(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalPlainYearMonth('since', this, other, options); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalYearMonth(otherParam); ++ ++ for (var _i = 0, _arr = [ISO_YEAR, ISO_MONTH, ISO_DAY]; _i < _arr.length; _i++) { ++ var slot = _arr[_i]; ++ var val1 = GetSlot(this, slot); ++ var val2 = GetSlot(other, slot); ++ if (val1 !== val2) return false; ++ } ++ ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ var showCalendar = ToShowCalendarOption(options); ++ return TemporalYearMonthToString(this, showCalendar); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return TemporalYearMonthToString(this); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth'); ++ } ++ }, { ++ key: "toPlainDate", ++ value: function toPlainDate(item) { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ if (!IsObject(item)) throw new TypeError('argument should be an object'); ++ var calendar = GetSlot(this, CALENDAR); ++ var receiverFieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ var fields = PrepareTemporalFields(this, receiverFieldNames, []); ++ var inputFieldNames = CalendarFields(calendar, ['day']); ++ var inputFields = PrepareTemporalFields(item, inputFieldNames, []); ++ var mergedFields = CalendarMergeFields(calendar, fields, inputFields); // TODO: Use MergeLists abstract operation. ++ ++ var mergedFieldNames = _toConsumableArray(new Set([].concat(_toConsumableArray(receiverFieldNames), _toConsumableArray(inputFieldNames)))); ++ ++ mergedFields = PrepareTemporalFields(mergedFields, mergedFieldNames, []); ++ var options = ObjectCreate(null); ++ options.overflow = 'reject'; ++ return CalendarDateFromFields(calendar, mergedFields, options); ++ } ++ }, { ++ key: "getISOFields", ++ value: function getISOFields() { ++ if (!IsTemporalYearMonth(this)) throw new TypeError('invalid receiver'); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(this, ISO_DAY), ++ isoMonth: GetSlot(this, ISO_MONTH), ++ isoYear: GetSlot(this, ISO_YEAR) ++ }; ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var options = GetOptionsObject(optionsParam); ++ ++ if (IsTemporalYearMonth(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ return CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY)); ++ } ++ ++ return ToTemporalYearMonth(item, options); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var one = ToTemporalYearMonth(oneParam); ++ var two = ToTemporalYearMonth(twoParam); ++ return CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY)); ++ } ++ }]); ++ ++ return PlainYearMonth; ++ }(); ++ MakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth'); ++ ++ var ZonedDateTime = /*#__PURE__*/function () { ++ function ZonedDateTime(epochNanosecondsParam, timeZoneParam) { ++ var calendarParam = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GetISO8601Calendar(); ++ ++ _classCallCheck(this, ZonedDateTime); ++ ++ // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only ++ // to improve the error message. ++ // ToTemporalTimeZone(undefined) will end up calling TimeZone.from("undefined"), which ++ // could succeed. ++ if (arguments.length < 1) { ++ throw new TypeError('missing argument: epochNanoseconds is required'); ++ } ++ ++ var epochNanoseconds = ToBigInt(epochNanosecondsParam); ++ var timeZone = ToTemporalTimeZone(timeZoneParam); ++ var calendar = ToTemporalCalendar(calendarParam); ++ CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar); ++ } ++ ++ _createClass(ZonedDateTime, [{ ++ key: "calendar", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, CALENDAR); ++ } ++ }, { ++ key: "timeZone", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(this, TIME_ZONE); ++ } ++ }, { ++ key: "year", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "month", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonth(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "monthCode", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "day", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDay(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "hour", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_HOUR); ++ } ++ }, { ++ key: "minute", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MINUTE); ++ } ++ }, { ++ key: "second", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_SECOND); ++ } ++ }, { ++ key: "millisecond", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MILLISECOND); ++ } ++ }, { ++ key: "microsecond", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_MICROSECOND); ++ } ++ }, { ++ key: "nanosecond", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetSlot(dateTime(this), ISO_NANOSECOND); ++ } ++ }, { ++ key: "era", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarEra(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "eraYear", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "epochSeconds", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.divide(value, BILLION)); ++ } ++ }, { ++ key: "epochMilliseconds", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var value = GetSlot(this, EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.divide(value, MILLION)); ++ } ++ }, { ++ key: "epochMicroseconds", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var value = GetSlot(this, EPOCHNANOSECONDS); ++ return ToBigIntExternal(JSBI.divide(value, THOUSAND)); ++ } ++ }, { ++ key: "epochNanoseconds", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS)); ++ } ++ }, { ++ key: "dayOfWeek", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "dayOfYear", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "weekOfYear", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "hoursInDay", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var dt = dateTime(this); ++ var DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var year = GetSlot(dt, ISO_YEAR); ++ var month = GetSlot(dt, ISO_MONTH); ++ var day = GetSlot(dt, ISO_DAY); ++ var today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0); ++ var tomorrowFields = AddISODate(year, month, day, 0, 0, 0, 1, 'reject'); ++ var tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0); ++ var timeZone = GetSlot(this, TIME_ZONE); ++ var todayNs = GetSlot(BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS); ++ var tomorrowNs = GetSlot(BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS); ++ return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12; ++ } ++ }, { ++ key: "daysInWeek", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "daysInMonth", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "daysInYear", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "monthsInYear", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "inLeapYear", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this)); ++ } ++ }, { ++ key: "offset", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT)); ++ } ++ }, { ++ key: "offsetNanoseconds", ++ get: function get() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT)); ++ } ++ }, { ++ key: "with", ++ value: function _with(temporalZonedDateTimeLike) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ ++ if (!IsObject(temporalZonedDateTimeLike)) { ++ throw new TypeError('invalid zoned-date-time-like'); ++ } ++ ++ RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike); // TODO: Reorder according to spec. ++ ++ var options = GetOptionsObject(optionsParam); ++ var disambiguation = ToTemporalDisambiguation(options); ++ var offset = ToTemporalOffset(options, 'prefer'); ++ var timeZone = GetSlot(this, TIME_ZONE); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'monthCode', 'nanosecond', 'second', 'year']); ++ var fieldsWithOffset = ArrayPush(fieldNames, 'offset'); ++ var props = PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial'); ++ var fieldsWithTimeZoneAndOffset = ArrayPush(fieldsWithOffset, 'timeZone'); ++ var fields = PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']); ++ fields = CalendarMergeFields(calendar, fields, props); ++ fields = PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']); ++ ++ var _ES$InterpretTemporal = InterpretTemporalDateTimeFields(calendar, fields, options), ++ year = _ES$InterpretTemporal.year, ++ month = _ES$InterpretTemporal.month, ++ day = _ES$InterpretTemporal.day, ++ hour = _ES$InterpretTemporal.hour, ++ minute = _ES$InterpretTemporal.minute, ++ second = _ES$InterpretTemporal.second, ++ millisecond = _ES$InterpretTemporal.millisecond, ++ microsecond = _ES$InterpretTemporal.microsecond, ++ nanosecond = _ES$InterpretTemporal.nanosecond; ++ ++ var offsetNs = ParseTimeZoneOffsetString(fields.offset); ++ var epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, ++ /* matchMinute = */ ++ false); ++ return CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar); ++ } ++ }, { ++ key: "withPlainDate", ++ value: function withPlainDate(temporalDateParam) { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var temporalDate = ToTemporalDate(temporalDateParam); ++ var year = GetSlot(temporalDate, ISO_YEAR); ++ var month = GetSlot(temporalDate, ISO_MONTH); ++ var day = GetSlot(temporalDate, ISO_DAY); ++ var calendar = GetSlot(temporalDate, CALENDAR); ++ var thisDt = dateTime(this); ++ var hour = GetSlot(thisDt, ISO_HOUR); ++ var minute = GetSlot(thisDt, ISO_MINUTE); ++ var second = GetSlot(thisDt, ISO_SECOND); ++ var millisecond = GetSlot(thisDt, ISO_MILLISECOND); ++ var microsecond = GetSlot(thisDt, ISO_MICROSECOND); ++ var nanosecond = GetSlot(thisDt, ISO_NANOSECOND); ++ calendar = ConsolidateCalendars(GetSlot(this, CALENDAR), calendar); ++ var timeZone = GetSlot(this, TIME_ZONE); ++ var PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ var instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }, { ++ key: "withPlainTime", ++ value: function withPlainTime() { ++ var temporalTimeParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var PlainTime = GetIntrinsic('%Temporal.PlainTime%'); ++ var temporalTime = temporalTimeParam === undefined ? new PlainTime() : ToTemporalTime(temporalTimeParam); ++ var thisDt = dateTime(this); ++ var year = GetSlot(thisDt, ISO_YEAR); ++ var month = GetSlot(thisDt, ISO_MONTH); ++ var day = GetSlot(thisDt, ISO_DAY); ++ var calendar = GetSlot(this, CALENDAR); ++ var hour = GetSlot(temporalTime, ISO_HOUR); ++ var minute = GetSlot(temporalTime, ISO_MINUTE); ++ var second = GetSlot(temporalTime, ISO_SECOND); ++ var millisecond = GetSlot(temporalTime, ISO_MILLISECOND); ++ var microsecond = GetSlot(temporalTime, ISO_MICROSECOND); ++ var nanosecond = GetSlot(temporalTime, ISO_NANOSECOND); ++ var timeZone = GetSlot(this, TIME_ZONE); ++ var PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar); ++ var instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }, { ++ key: "withTimeZone", ++ value: function withTimeZone(timeZoneParam) { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var timeZone = ToTemporalTimeZone(timeZoneParam); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR)); ++ } ++ }, { ++ key: "withCalendar", ++ value: function withCalendar(calendarParam) { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var calendar = ToTemporalCalendar(calendarParam); ++ return CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar); ++ } ++ }, { ++ key: "add", ++ value: function add(temporalDurationLike) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options); ++ } ++ }, { ++ key: "subtract", ++ value: function subtract(temporalDurationLike) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options); ++ } ++ }, { ++ key: "until", ++ value: function until(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalZonedDateTime('until', this, other, options); ++ } ++ }, { ++ key: "since", ++ value: function since(other) { ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return DifferenceTemporalZonedDateTime('since', this, other, options); ++ } ++ }, { ++ key: "round", ++ value: function round(optionsParam) { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ if (optionsParam === undefined) throw new TypeError('options parameter is required'); ++ var options = typeof optionsParam === 'string' ? CreateOnePropObject('smallestUnit', optionsParam) : GetOptionsObject(optionsParam); ++ var smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', REQUIRED, ['day']); ++ var roundingMode = ToTemporalRoundingMode(options, 'halfExpand'); ++ var maximumIncrements = { ++ day: 1, ++ hour: 24, ++ minute: 60, ++ second: 60, ++ millisecond: 1000, ++ microsecond: 1000, ++ nanosecond: 1000 ++ }; ++ var roundingIncrement = ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false); // first, round the underlying DateTime fields ++ ++ var dt = dateTime(this); ++ var year = GetSlot(dt, ISO_YEAR); ++ var month = GetSlot(dt, ISO_MONTH); ++ var day = GetSlot(dt, ISO_DAY); ++ var hour = GetSlot(dt, ISO_HOUR); ++ var minute = GetSlot(dt, ISO_MINUTE); ++ var second = GetSlot(dt, ISO_SECOND); ++ var millisecond = GetSlot(dt, ISO_MILLISECOND); ++ var microsecond = GetSlot(dt, ISO_MICROSECOND); ++ var nanosecond = GetSlot(dt, ISO_NANOSECOND); ++ var DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var timeZone = GetSlot(this, TIME_ZONE); ++ var calendar = GetSlot(this, CALENDAR); ++ var dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0); ++ var instantStart = BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible'); ++ var endNs = AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); ++ var dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS))); ++ ++ if (JSBI.equal(dayLengthNs, ZERO)) { ++ throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days'); ++ } ++ ++ var _ES$RoundISODateTime = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER ++ // (which can hold up to 104 days in nanoseconds) ++ JSBI.toNumber(dayLengthNs)); ++ ++ year = _ES$RoundISODateTime.year; ++ month = _ES$RoundISODateTime.month; ++ day = _ES$RoundISODateTime.day; ++ hour = _ES$RoundISODateTime.hour; ++ minute = _ES$RoundISODateTime.minute; ++ second = _ES$RoundISODateTime.second; ++ millisecond = _ES$RoundISODateTime.millisecond; ++ microsecond = _ES$RoundISODateTime.microsecond; ++ nanosecond = _ES$RoundISODateTime.nanosecond; ++ // Now reset all DateTime fields but leave the TimeZone. The offset will ++ // also be retained if the new date/time values are still OK with the old ++ // offset. Otherwise the offset will be changed to be compatible with the ++ // new date/time values. If DST disambiguation is required, the `compatible` ++ // disambiguation algorithm will be used. ++ var offsetNs = GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT)); ++ var epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', ++ /* matchMinute = */ ++ false); ++ return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR)); ++ } ++ }, { ++ key: "equals", ++ value: function equals(otherParam) { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var other = ToTemporalZonedDateTime(otherParam); ++ var one = GetSlot(this, EPOCHNANOSECONDS); ++ var two = GetSlot(other, EPOCHNANOSECONDS); ++ if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two))) return false; ++ if (!TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) return false; ++ return CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR)); ++ } ++ }, { ++ key: "toString", ++ value: function toString() { ++ var optionsParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var options = GetOptionsObject(optionsParam); ++ ++ var _ES$ToSecondsStringPr = ToSecondsStringPrecision(options), ++ precision = _ES$ToSecondsStringPr.precision, ++ unit = _ES$ToSecondsStringPr.unit, ++ increment = _ES$ToSecondsStringPr.increment; ++ ++ var roundingMode = ToTemporalRoundingMode(options, 'trunc'); ++ var showCalendar = ToShowCalendarOption(options); ++ var showTimeZone = ToShowTimeZoneNameOption(options); ++ var showOffset = ToShowOffsetOption(options); ++ return TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, { ++ unit: unit, ++ increment: increment, ++ roundingMode: roundingMode ++ }); ++ } ++ }, { ++ key: "toLocaleString", ++ value: function toLocaleString() { ++ var locales = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; ++ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return new DateTimeFormat(locales, options).format(this); ++ } ++ }, { ++ key: "toJSON", ++ value: function toJSON() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalZonedDateTimeToString(this, 'auto'); ++ } ++ }, { ++ key: "valueOf", ++ value: function valueOf() { ++ throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime'); ++ } ++ }, { ++ key: "startOfDay", ++ value: function startOfDay() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var dt = dateTime(this); ++ var DateTime = GetIntrinsic('%Temporal.PlainDateTime%'); ++ var calendar = GetSlot(this, CALENDAR); ++ var dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar); ++ var timeZone = GetSlot(this, TIME_ZONE); ++ var instant = BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible'); ++ return CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar); ++ } ++ }, { ++ key: "toInstant", ++ value: function toInstant() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var TemporalInstant = GetIntrinsic('%Temporal.Instant%'); ++ return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS)); ++ } ++ }, { ++ key: "toPlainDate", ++ value: function toPlainDate() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToDate(dateTime(this)); ++ } ++ }, { ++ key: "toPlainTime", ++ value: function toPlainTime() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return TemporalDateTimeToTime(dateTime(this)); ++ } ++ }, { ++ key: "toPlainDateTime", ++ value: function toPlainDateTime() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ return dateTime(this); ++ } ++ }, { ++ key: "toPlainYearMonth", ++ value: function toPlainYearMonth() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['monthCode', 'year']); ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarYearMonthFromFields(calendar, fields); ++ } ++ }, { ++ key: "toPlainMonthDay", ++ value: function toPlainMonthDay() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var calendar = GetSlot(this, CALENDAR); ++ var fieldNames = CalendarFields(calendar, ['day', 'monthCode']); ++ var fields = PrepareTemporalFields(this, fieldNames, []); ++ return CalendarMonthDayFromFields(calendar, fields); ++ } ++ }, { ++ key: "getISOFields", ++ value: function getISOFields() { ++ if (!IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver'); ++ var dt = dateTime(this); ++ var tz = GetSlot(this, TIME_ZONE); ++ return { ++ calendar: GetSlot(this, CALENDAR), ++ isoDay: GetSlot(dt, ISO_DAY), ++ isoHour: GetSlot(dt, ISO_HOUR), ++ isoMicrosecond: GetSlot(dt, ISO_MICROSECOND), ++ isoMillisecond: GetSlot(dt, ISO_MILLISECOND), ++ isoMinute: GetSlot(dt, ISO_MINUTE), ++ isoMonth: GetSlot(dt, ISO_MONTH), ++ isoNanosecond: GetSlot(dt, ISO_NANOSECOND), ++ isoSecond: GetSlot(dt, ISO_SECOND), ++ isoYear: GetSlot(dt, ISO_YEAR), ++ offset: BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)), ++ timeZone: tz ++ }; ++ } ++ }], [{ ++ key: "from", ++ value: function from(item) { ++ var optionsParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; ++ var options = GetOptionsObject(optionsParam); ++ ++ if (IsTemporalZonedDateTime(item)) { ++ ToTemporalOverflow(options); // validate and ignore ++ ++ ToTemporalDisambiguation(options); ++ ToTemporalOffset(options, 'reject'); ++ return CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR)); ++ } ++ ++ return ToTemporalZonedDateTime(item, options); ++ } ++ }, { ++ key: "compare", ++ value: function compare(oneParam, twoParam) { ++ var one = ToTemporalZonedDateTime(oneParam); ++ var two = ToTemporalZonedDateTime(twoParam); ++ var ns1 = GetSlot(one, EPOCHNANOSECONDS); ++ var ns2 = GetSlot(two, EPOCHNANOSECONDS); ++ if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return -1; ++ if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return 1; ++ return 0; ++ } ++ }]); ++ ++ return ZonedDateTime; ++ }(); ++ MakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime'); ++ ++ function dateTime(zdt) { ++ return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR)); ++ } ++ ++ var temporal = /*#__PURE__*/Object.freeze({ ++ __proto__: null, ++ Instant: Instant, ++ Calendar: Calendar, ++ PlainDate: PlainDate, ++ PlainDateTime: PlainDateTime, ++ Duration: Duration, ++ PlainMonthDay: PlainMonthDay, ++ Now: Now, ++ PlainTime: PlainTime, ++ TimeZone: TimeZone, ++ PlainYearMonth: PlainYearMonth, ++ ZonedDateTime: ZonedDateTime ++ }); ++ ++ function toTemporalInstant() { ++ // Observable access to valueOf is not correct here, but unavoidable ++ var epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION); ++ return new Instant(ToBigInt(epochNanoseconds)); ++ } ++ ++ // This entry point treats Temporal as a library, and does not polyfill it onto ++ ++ var types = [Instant, Calendar, PlainDate, PlainDateTime, Duration, PlainMonthDay, // Temporal.Now, // plain object (not a constructor), so no `prototype` ++ PlainTime, TimeZone, PlainYearMonth, ZonedDateTime]; ++ ++ for (var _i = 0, _types = types; _i < _types.length; _i++) { ++ var type = _types[_i]; ++ var descriptor = Object.getOwnPropertyDescriptor(type, 'prototype'); ++ ++ if (descriptor.configurable || descriptor.enumerable || descriptor.writable) { ++ descriptor.configurable = false; ++ descriptor.enumerable = false; ++ descriptor.writable = false; ++ Object.defineProperty(type, 'prototype', descriptor); ++ } ++ } ++ ++ exports.Intl = intl; ++ exports.Temporal = temporal; ++ exports.toTemporalInstant = toTemporalInstant; ++ ++ Object.defineProperty(exports, '__esModule', { value: true }); ++ ++})); + //# sourceMappingURL=index.umd.js.map +diff --git a/node_modules/@js-temporal/polyfill/dist/index.umd.js.map b/node_modules/@js-temporal/polyfill/dist/index.umd.js.map +index 5b60d6d..3d4bd5d 100644 +--- a/node_modules/@js-temporal/polyfill/dist/index.umd.js.map ++++ b/node_modules/@js-temporal/polyfill/dist/index.umd.js.map +@@ -1 +1 @@ +-{"version":3,"file":"index.umd.js","sources":["../node_modules/jsbi/dist/jsbi.mjs","../tsc-out/intrinsicclass.js","../tsc-out/slots.js","../tsc-out/regex.js","../tsc-out/ecmascript.js","../tsc-out/intl.js","../tsc-out/instant.js","../tsc-out/calendar.js","../tsc-out/plaindate.js","../tsc-out/plaindatetime.js","../tsc-out/duration.js","../tsc-out/plainmonthday.js","../tsc-out/now.js","../tsc-out/plaintime.js","../tsc-out/timezone.js","../tsc-out/plainyearmonth.js","../tsc-out/zoneddatetime.js","../tsc-out/index.js","../tsc-out/legacydate.js"],"sourcesContent":["class JSBI extends Array{constructor(i,_){if(super(i),this.sign=_,Object.setPrototypeOf(this,JSBI.prototype),i>JSBI.__kMaxLength)throw new RangeError(\"Maximum BigInt size exceeded\")}static BigInt(i){var _=Math.floor,t=Number.isFinite;if(\"number\"==typeof i){if(0===i)return JSBI.__zero();if(JSBI.__isOneDigitInt(i))return 0>i?JSBI.__oneDigit(-i,!0):JSBI.__oneDigit(i,!1);if(!t(i)||_(i)!==i)throw new RangeError(\"The number \"+i+\" cannot be converted to BigInt because it is not an integer\");return JSBI.__fromDouble(i)}if(\"string\"==typeof i){const _=JSBI.__fromString(i);if(null===_)throw new SyntaxError(\"Cannot convert \"+i+\" to a BigInt\");return _}if(\"boolean\"==typeof i)return!0===i?JSBI.__oneDigit(1,!1):JSBI.__zero();if(\"object\"==typeof i){if(i.constructor===JSBI)return i;const _=JSBI.__toPrimitive(i);return JSBI.BigInt(_)}throw new TypeError(\"Cannot convert \"+i+\" to a BigInt\")}toDebugString(){const i=[\"BigInt[\"];for(const _ of this)i.push((_?(_>>>0).toString(16):_)+\", \");return i.push(\"]\"),i.join(\"\")}toString(i=10){if(2>i||36>>=12;const a=l-12;let u=12<=l?0:o<<20+l,d=20+l;for(0>>30-a,u=o<>>30-d,d-=30;const h=JSBI.__decideRounding(i,d,s,o);if((1===h||0===h&&1==(1&u))&&(u=u+1>>>0,0===u&&(r++,0!=r>>>20&&(r=0,g++,1023=JSBI.__kMaxLengthBits)throw new RangeError(\"BigInt too big\");if(1===i.length&&2===i.__digit(0)){const _=1+(0|t/30),e=i.sign&&0!=(1&t),n=new JSBI(_,e);n.__initializeDigits();const g=1<>=1;0!==t;t>>=1)n=JSBI.multiply(n,n),0!=(1&t)&&(null===e?e=n:e=JSBI.multiply(e,n));return e}static multiply(_,t){if(0===_.length)return _;if(0===t.length)return t;let i=_.length+t.length;30<=_.__clzmsd()+t.__clzmsd()&&i--;const e=new JSBI(i,_.sign!==t.sign);e.__initializeDigits();for(let n=0;n<_.length;n++)JSBI.__multiplyAccumulate(t,_.__digit(n),e,n);return e.__trim()}static divide(i,_){if(0===_.length)throw new RangeError(\"Division by zero\");if(0>JSBI.__absoluteCompare(i,_))return JSBI.__zero();const t=i.sign!==_.sign,e=_.__unsignedDigit(0);let n;if(1===_.length&&32767>=e){if(1===e)return t===i.sign?i:JSBI.unaryMinus(i);n=JSBI.__absoluteDivSmall(i,e,null)}else n=JSBI.__absoluteDivLarge(i,_,!0,!1);return n.sign=t,n.__trim()}static remainder(i,_){if(0===_.length)throw new RangeError(\"Division by zero\");if(0>JSBI.__absoluteCompare(i,_))return i;const t=_.__unsignedDigit(0);if(1===_.length&&32767>=t){if(1===t)return JSBI.__zero();const _=JSBI.__absoluteModSmall(i,t);return 0===_?JSBI.__zero():JSBI.__oneDigit(_,i.sign)}const e=JSBI.__absoluteDivLarge(i,_,!1,!0);return e.sign=i.sign,e.__trim()}static add(i,_){const t=i.sign;return t===_.sign?JSBI.__absoluteAdd(i,_,t):0<=JSBI.__absoluteCompare(i,_)?JSBI.__absoluteSub(i,_,t):JSBI.__absoluteSub(_,i,!t)}static subtract(i,_){const t=i.sign;return t===_.sign?0<=JSBI.__absoluteCompare(i,_)?JSBI.__absoluteSub(i,_,t):JSBI.__absoluteSub(_,i,!t):JSBI.__absoluteAdd(i,_,t)}static leftShift(i,_){return 0===_.length||0===i.length?i:_.sign?JSBI.__rightShiftByAbsolute(i,_):JSBI.__leftShiftByAbsolute(i,_)}static signedRightShift(i,_){return 0===_.length||0===i.length?i:_.sign?JSBI.__leftShiftByAbsolute(i,_):JSBI.__rightShiftByAbsolute(i,_)}static unsignedRightShift(){throw new TypeError(\"BigInts have no unsigned right shift; use >> instead\")}static lessThan(i,_){return 0>JSBI.__compareToBigInt(i,_)}static lessThanOrEqual(i,_){return 0>=JSBI.__compareToBigInt(i,_)}static greaterThan(i,_){return 0_)throw new RangeError(\"Invalid value: not (convertible to) a safe integer\");if(0===_)return JSBI.__zero();if(_>=JSBI.__kMaxLengthBits)return t;const e=0|(_+29)/30;if(t.lengthi)throw new RangeError(\"Invalid value: not (convertible to) a safe integer\");if(0===i)return JSBI.__zero();if(_.sign){if(i>JSBI.__kMaxLengthBits)throw new RangeError(\"BigInt too big\");return JSBI.__truncateAndSubFromPowerOfTwo(i,_,!1)}if(i>=JSBI.__kMaxLengthBits)return _;const e=0|(i+29)/30;if(_.length>>g)return _}return JSBI.__truncateToNBits(i,_)}static ADD(i,_){if(i=JSBI.__toPrimitive(i),_=JSBI.__toPrimitive(_),\"string\"==typeof i)return\"string\"!=typeof _&&(_=_.toString()),i+_;if(\"string\"==typeof _)return i.toString()+_;if(i=JSBI.__toNumeric(i),_=JSBI.__toNumeric(_),JSBI.__isBigInt(i)&&JSBI.__isBigInt(_))return JSBI.add(i,_);if(\"number\"==typeof i&&\"number\"==typeof _)return i+_;throw new TypeError(\"Cannot mix BigInt and other types, use explicit conversions\")}static LT(i,_){return JSBI.__compare(i,_,0)}static LE(i,_){return JSBI.__compare(i,_,1)}static GT(i,_){return JSBI.__compare(i,_,2)}static GE(i,_){return JSBI.__compare(i,_,3)}static EQ(i,_){for(;;){if(JSBI.__isBigInt(i))return JSBI.__isBigInt(_)?JSBI.equal(i,_):JSBI.EQ(_,i);if(\"number\"==typeof i){if(JSBI.__isBigInt(_))return JSBI.__equalToNumber(_,i);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"string\"==typeof i){if(JSBI.__isBigInt(_))return i=JSBI.__fromString(i),null!==i&&JSBI.equal(i,_);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"boolean\"==typeof i){if(JSBI.__isBigInt(_))return JSBI.__equalToNumber(_,+i);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"symbol\"==typeof i){if(JSBI.__isBigInt(_))return!1;if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"object\"==typeof i){if(\"object\"==typeof _&&_.constructor!==JSBI)return i==_;i=JSBI.__toPrimitive(i)}else return i==_}}static NE(i,_){return!JSBI.EQ(i,_)}static __zero(){return new JSBI(0,!1)}static __oneDigit(i,_){const t=new JSBI(1,_);return t.__setDigit(0,i),t}__copy(){const _=new JSBI(this.length,this.sign);for(let t=0;t_)n=-_-1;else{if(0===t)return-1;t--,e=i.__digit(t),n=29}let g=1<>>20,t=_-1023,e=(0|t/30)+1,n=new JSBI(e,0>i);let g=1048575&JSBI.__kBitConversionInts[1]|1048576,o=JSBI.__kBitConversionInts[0];const s=20,l=t%30;let r,a=0;if(l<20){const i=s-l;a=i+32,r=g>>>i,g=g<<32-i|o>>>i,o<<=32-i}else if(l===20)a=32,r=g,g=o,o=0;else{const i=l-s;a=32-i,r=g<>>32-i,g=o<>>2,g=g<<30|o>>>2,o<<=30):r=0,n.__setDigit(_,r);return n.__trim()}static __isWhitespace(i){return!!(13>=i&&9<=i)||(159>=i?32==i:131071>=i?160==i||5760==i:196607>=i?(i&=131071,10>=i||40==i||41==i||47==i||95==i||4096==i):65279==i)}static __fromString(i,_=0){let t=0;const e=i.length;let n=0;if(n===e)return JSBI.__zero();let g=i.charCodeAt(n);for(;JSBI.__isWhitespace(g);){if(++n===e)return JSBI.__zero();g=i.charCodeAt(n)}if(43===g){if(++n===e)return null;g=i.charCodeAt(n),t=1}else if(45===g){if(++n===e)return null;g=i.charCodeAt(n),t=-1}if(0===_){if(_=10,48===g){if(++n===e)return JSBI.__zero();if(g=i.charCodeAt(n),88===g||120===g){if(_=16,++n===e)return null;g=i.charCodeAt(n)}else if(79===g||111===g){if(_=8,++n===e)return null;g=i.charCodeAt(n)}else if(66===g||98===g){if(_=2,++n===e)return null;g=i.charCodeAt(n)}}}else if(16===_&&48===g){if(++n===e)return JSBI.__zero();if(g=i.charCodeAt(n),88===g||120===g){if(++n===e)return null;g=i.charCodeAt(n)}}if(0!=t&&10!==_)return null;for(;48===g;){if(++n===e)return JSBI.__zero();g=i.charCodeAt(n)}const o=e-n;let s=JSBI.__kMaxBitsPerChar[_],l=JSBI.__kBitsPerCharTableMultiplier-1;if(o>1073741824/s)return null;const r=s*o+l>>>JSBI.__kBitsPerCharTableShift,a=new JSBI(0|(r+29)/30,!1),u=10>_?_:10,h=10<_?_-10:0;if(0==(_&_-1)){s>>=JSBI.__kBitsPerCharTableShift;const _=[],t=[];let o=!1;do{let l=0,r=0;for(;;){let _;if(g-48>>>0>>0>>0>>0>>JSBI.__kBitsPerCharTableShift)/30;a.__inplaceMultiplyAdd(b,r,D)}while(!t)}if(n!==e){if(!JSBI.__isWhitespace(g))return null;for(n++;n>>l-o)}if(0!==g){if(n>=_.length)throw new Error(\"implementation bug\");_.__setDigit(n++,g)}for(;n<_.length;n++)_.__setDigit(n,0)}static __toStringBasePowerOfTwo(_,i){const t=_.length;let e=i-1;e=(85&e>>>1)+(85&e),e=(51&e>>>2)+(51&e),e=(15&e>>>4)+(15&e);const n=e,g=i-1,o=_.__digit(t-1),s=JSBI.__clz30(o);let l=0|(30*t-s+n-1)/n;if(_.sign&&l++,268435456>>o,d=30-o;d>=n;)r[a--]=JSBI.__kConversionChars[u&g],u>>>=n,d-=n}const h=(u|o<>>n-d;0!==u;)r[a--]=JSBI.__kConversionChars[u&g],u>>>=n;if(_.sign&&(r[a--]=\"-\"),-1!=a)throw new Error(\"implementation bug\");return r.join(\"\")}static __toStringGeneric(_,i,t){const e=_.length;if(0===e)return\"\";if(1===e){let e=_.__unsignedDigit(0).toString(i);return!1===t&&_.sign&&(e=\"-\"+e),e}const n=30*e-JSBI.__clz30(_.__digit(e-1)),g=JSBI.__kMaxBitsPerChar[i],o=g-1;let s=n*JSBI.__kBitsPerCharTableMultiplier;s+=o-1,s=0|s/o;const l=s+1>>1,r=JSBI.exponentiate(JSBI.__oneDigit(i,!1),JSBI.__oneDigit(l,!1));let a,u;const d=r.__unsignedDigit(0);if(1===r.length&&32767>=d){a=new JSBI(_.length,!1),a.__initializeDigits();let t=0;for(let e=2*_.length-1;0<=e;e--){const i=t<<15|_.__halfDigit(e);a.__setHalfDigit(e,0|i/d),t=0|i%d}u=t.toString(i)}else{const t=JSBI.__absoluteDivLarge(_,r,!0,!0);a=t.quotient;const e=t.remainder.__trim();u=JSBI.__toStringGeneric(e,i,!0)}a.__trim();let h=JSBI.__toStringGeneric(a,i,!0);for(;u.lengthe?JSBI.__absoluteLess(t):0}static __compareToNumber(i,_){if(JSBI.__isOneDigitInt(_)){const t=i.sign,e=0>_;if(t!==e)return JSBI.__unequalSign(t);if(0===i.length){if(e)throw new Error(\"implementation bug\");return 0===_?0:-1}if(1n?JSBI.__absoluteGreater(t):g_)return JSBI.__unequalSign(t);if(0===_)throw new Error(\"implementation bug: should be handled elsewhere\");if(0===i.length)return-1;JSBI.__kBitConversionDouble[0]=_;const e=2047&JSBI.__kBitConversionInts[1]>>>20;if(2047==e)throw new Error(\"implementation bug: handled elsewhere\");const n=e-1023;if(0>n)return JSBI.__absoluteGreater(t);const g=i.length;let o=i.__digit(g-1);const s=JSBI.__clz30(o),l=30*g-s,r=n+1;if(lr)return JSBI.__absoluteGreater(t);let a=1048576|1048575&JSBI.__kBitConversionInts[1],u=JSBI.__kBitConversionInts[0];const d=20,h=29-s;if(h!==(0|(l-1)%30))throw new Error(\"implementation bug\");let m,b=0;if(20>h){const i=d-h;b=i+32,m=a>>>i,a=a<<32-i|u>>>i,u<<=32-i}else if(20===h)b=32,m=a,a=u,u=0;else{const i=h-d;b=32-i,m=a<>>32-i,a=u<>>=0,m>>>=0,o>m)return JSBI.__absoluteGreater(t);if(o>>2,a=a<<30|u>>>2,u<<=30):m=0;const _=i.__unsignedDigit(e);if(_>m)return JSBI.__absoluteGreater(t);if(__&&i.__unsignedDigit(0)===t(_):0===JSBI.__compareToDouble(i,_)}static __comparisonResultToBool(i,_){return 0===_?0>i:1===_?0>=i:2===_?0_;case 3:return i>=_;}if(JSBI.__isBigInt(i)&&\"string\"==typeof _)return _=JSBI.__fromString(_),null!==_&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(\"string\"==typeof i&&JSBI.__isBigInt(_))return i=JSBI.__fromString(i),null!==i&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(i=JSBI.__toNumeric(i),_=JSBI.__toNumeric(_),JSBI.__isBigInt(i)){if(JSBI.__isBigInt(_))return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(\"number\"!=typeof _)throw new Error(\"implementation bug\");return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(i,_),t)}if(\"number\"!=typeof i)throw new Error(\"implementation bug\");if(JSBI.__isBigInt(_))return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(_,i),2^t);if(\"number\"!=typeof _)throw new Error(\"implementation bug\");return 0===t?i<_:1===t?i<=_:2===t?i>_:3===t?i>=_:void 0}__clzmsd(){return JSBI.__clz30(this.__digit(this.length-1))}static __absoluteAdd(_,t,e){if(_.length>>30,g.__setDigit(s,1073741823&i)}for(;s<_.length;s++){const i=_.__digit(s)+o;o=i>>>30,g.__setDigit(s,1073741823&i)}return s>>30,n.__setDigit(o,1073741823&i)}for(;o<_.length;o++){const i=_.__digit(o)-g;g=1&i>>>30,n.__setDigit(o,1073741823&i)}return n.__trim()}static __absoluteAddOne(_,i,t=null){const e=_.length;null===t?t=new JSBI(e,i):t.sign=i;let n=1;for(let g=0;g>>30,t.__setDigit(g,1073741823&i)}return 0!=n&&t.__setDigitGrow(e,1),t}static __absoluteSubOne(_,t){const e=_.length;t=t||e;const n=new JSBI(t,!1);let g=1;for(let o=0;o>>30,n.__setDigit(o,1073741823&i)}if(0!=g)throw new Error(\"implementation bug\");for(let g=e;gn?0:_.__unsignedDigit(n)>t.__unsignedDigit(n)?1:-1}static __multiplyAccumulate(_,t,e,n){if(0===t)return;const g=32767&t,o=t>>>15;let s=0,l=0;for(let r,a=0;a<_.length;a++,n++){r=e.__digit(n);const i=_.__digit(a),t=32767&i,u=i>>>15,d=JSBI.__imul(t,g),h=JSBI.__imul(t,o),m=JSBI.__imul(u,g),b=JSBI.__imul(u,o);r+=l+d+s,s=r>>>30,r&=1073741823,r+=((32767&h)<<15)+((32767&m)<<15),s+=r>>>30,l=b+(h>>>15)+(m>>>15),e.__setDigit(n,1073741823&r)}for(;0!=s||0!==l;n++){let i=e.__digit(n);i+=s+l,l=0,s=i>>>30,e.__setDigit(n,1073741823&i)}}static __internalMultiplyAdd(_,t,e,g,o){let s=e,l=0;for(let n=0;n>>15,t),a=e+((32767&g)<<15)+l+s;s=a>>>30,l=g>>>15,o.__setDigit(n,1073741823&a)}if(o.length>g)for(o.__setDigit(g++,s+l);gthis.length&&(t=this.length);const e=32767&i,n=i>>>15;let g=0,o=_;for(let s=0;s>>15,l=JSBI.__imul(_,e),r=JSBI.__imul(_,n),a=JSBI.__imul(t,e),u=JSBI.__imul(t,n);let d=o+l+g;g=d>>>30,d&=1073741823,d+=((32767&r)<<15)+((32767&a)<<15),g+=d>>>30,o=u+(r>>>15)+(a>>>15),this.__setDigit(s,1073741823&d)}if(0!=g||0!==o)throw new Error(\"implementation bug\")}static __absoluteDivSmall(_,t,e=null){null===e&&(e=new JSBI(_.length,!1));let n=0;for(let g,o=2*_.length-1;0<=o;o-=2){g=(n<<15|_.__halfDigit(o))>>>0;const i=0|g/t;n=0|g%t,g=(n<<15|_.__halfDigit(o-1))>>>0;const s=0|g/t;n=0|g%t,e.__setDigit(o>>>1,i<<15|s)}return e}static __absoluteModSmall(_,t){let e=0;for(let n=2*_.length-1;0<=n;n--){const i=(e<<15|_.__halfDigit(n))>>>0;e=0|i%t}return e}static __absoluteDivLarge(i,_,t,e){const g=_.__halfDigitLength(),n=_.length,o=i.__halfDigitLength()-g;let s=null;t&&(s=new JSBI(o+2>>>1,!1),s.__initializeDigits());const l=new JSBI(g+2>>>1,!1);l.__initializeDigits();const r=JSBI.__clz15(_.__halfDigit(g-1));0>>0;r=0|t/u;let e=0|t%u;const n=_.__halfDigit(g-2),o=a.__halfDigit(h+g-2);for(;JSBI.__imul(r,n)>>>0>(e<<16|o)>>>0&&(r--,e+=u,!(32767>>1,d|r))}if(e)return a.__inplaceRightShift(r),t?{quotient:s,remainder:a}:a;if(t)return s;throw new Error(\"unreachable\")}static __clz15(i){return JSBI.__clz30(i)-15}__inplaceAdd(_,t,e){let n=0;for(let g=0;g>>15,this.__setHalfDigit(t+g,32767&i)}return n}__inplaceSub(_,t,e){let n=0;if(1&t){t>>=1;let g=this.__digit(t),o=32767&g,s=0;for(;s>>1;s++){const i=_.__digit(s),e=(g>>>15)-(32767&i)-n;n=1&e>>>15,this.__setDigit(t+s,(32767&e)<<15|32767&o),g=this.__digit(t+s+1),o=(32767&g)-(i>>>15)-n,n=1&o>>>15}const i=_.__digit(s),l=(g>>>15)-(32767&i)-n;n=1&l>>>15,this.__setDigit(t+s,(32767&l)<<15|32767&o);if(t+s+1>=this.length)throw new RangeError(\"out of bounds\");0==(1&e)&&(g=this.__digit(t+s+1),o=(32767&g)-(i>>>15)-n,n=1&o>>>15,this.__setDigit(t+_.length,1073709056&g|32767&o))}else{t>>=1;let g=0;for(;g<_.length-1;g++){const i=this.__digit(t+g),e=_.__digit(g),o=(32767&i)-(32767&e)-n;n=1&o>>>15;const s=(i>>>15)-(e>>>15)-n;n=1&s>>>15,this.__setDigit(t+g,(32767&s)<<15|32767&o)}const i=this.__digit(t+g),o=_.__digit(g),s=(32767&i)-(32767&o)-n;n=1&s>>>15;let l=0;0==(1&e)&&(l=(i>>>15)-(o>>>15)-n,n=1&l>>>15),this.__setDigit(t+g,(32767&l)<<15|32767&s)}return n}__inplaceRightShift(_){if(0===_)return;let t=this.__digit(0)>>>_;const e=this.length-1;for(let n=0;n>>_}this.__setDigit(e,t)}static __specialLeftShift(_,t,e){const g=_.length,n=new JSBI(g+e,!1);if(0===t){for(let t=0;t>>30-t}return 0t)throw new RangeError(\"BigInt too big\");const e=0|t/30,n=t%30,g=_.length,o=0!==n&&0!=_.__digit(g-1)>>>30-n,s=g+e+(o?1:0),l=new JSBI(s,_.sign);if(0===n){let t=0;for(;t>>30-n}if(o)l.__setDigit(g+e,t);else if(0!==t)throw new Error(\"implementation bug\")}return l.__trim()}static __rightShiftByAbsolute(_,i){const t=_.length,e=_.sign,n=JSBI.__toShiftAmount(i);if(0>n)return JSBI.__rightShiftByMaximum(e);const g=0|n/30,o=n%30;let s=t-g;if(0>=s)return JSBI.__rightShiftByMaximum(e);let l=!1;if(e){if(0!=(_.__digit(g)&(1<>>o;const n=t-g-1;for(let t=0;t>>o}r.__setDigit(n,e)}return l&&(r=JSBI.__absoluteAddOne(r,!0,r)),r.__trim()}static __rightShiftByMaximum(i){return i?JSBI.__oneDigit(1,!0):JSBI.__zero()}static __toShiftAmount(i){if(1JSBI.__kMaxLengthBits?-1:_}static __toPrimitive(i,_=\"default\"){if(\"object\"!=typeof i)return i;if(i.constructor===JSBI)return i;if(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol.toPrimitive){const t=i[Symbol.toPrimitive];if(t){const i=t(_);if(\"object\"!=typeof i)return i;throw new TypeError(\"Cannot convert object to primitive value\")}}const t=i.valueOf;if(t){const _=t.call(i);if(\"object\"!=typeof _)return _}const e=i.toString;if(e){const _=e.call(i);if(\"object\"!=typeof _)return _}throw new TypeError(\"Cannot convert object to primitive value\")}static __toNumeric(i){return JSBI.__isBigInt(i)?i:+i}static __isBigInt(i){return\"object\"==typeof i&&null!==i&&i.constructor===JSBI}static __truncateToNBits(i,_){const t=0|(i+29)/30,e=new JSBI(t,_.sign),n=t-1;for(let t=0;t>>_}return e.__setDigit(n,g),e.__trim()}static __truncateAndSubFromPowerOfTwo(_,t,e){var n=Math.min;const g=0|(_+29)/30,o=new JSBI(g,e);let s=0;const l=g-1;let a=0;for(const i=n(l,t.length);s>>30,o.__setDigit(s,1073741823&i)}for(;s>>i;const _=1<<32-i;h=_-u-a,h&=_-1}return o.__setDigit(l,h),o.__trim()}__digit(_){return this[_]}__unsignedDigit(_){return this[_]>>>0}__setDigit(_,i){this[_]=0|i}__setDigitGrow(_,i){this[_]=0|i}__halfDigitLength(){const i=this.length;return 32767>=this.__unsignedDigit(i-1)?2*i-1:2*i}__halfDigit(_){return 32767&this[_>>>1]>>>15*(1&_)}__setHalfDigit(_,i){const t=_>>>1,e=this.__digit(t),n=1&_?32767&e|i<<15:1073709056&e|32767&i;this.__setDigit(t,n)}static __digitPow(i,_){let t=1;for(;0<_;)1&_&&(t*=i),_>>>=1,i*=i;return t}static __isOneDigitInt(i){return(1073741823&i)===i}}JSBI.__kMaxLength=33554432,JSBI.__kMaxLengthBits=JSBI.__kMaxLength<<5,JSBI.__kMaxBitsPerChar=[0,0,32,51,64,75,83,90,96,102,107,111,115,119,122,126,128,131,134,136,139,141,143,145,147,149,151,153,154,156,158,159,160,162,163,165,166],JSBI.__kBitsPerCharTableShift=5,JSBI.__kBitsPerCharTableMultiplier=1<>>0)/Math.LN2)},JSBI.__imul=Math.imul||function(i,_){return 0|i*_};export default JSBI;\n//# sourceMappingURL=jsbi.mjs.map\n","import { DEBUG } from './debug';\nconst INTRINSICS = {};\nconst customUtilInspectFormatters = {\n ['Temporal.Duration'](depth, options) {\n const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n if (depth < 1)\n return descr;\n const entries = [];\n for (const prop of [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n 'microseconds',\n 'nanoseconds'\n ]) {\n if (this[prop] !== 0)\n entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`);\n }\n return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n }\n};\nfunction defaultUtilInspectFormatter(depth, options) {\n return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\nexport function MakeIntrinsicClass(Class, name) {\n Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n value: name,\n writable: false,\n enumerable: false,\n configurable: true\n });\n if (DEBUG) {\n Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n for (const prop of Object.getOwnPropertyNames(Class)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class, prop, desc);\n }\n for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class.prototype, prop, desc);\n }\n DefineIntrinsic(name, Class);\n DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\nexport function DefineIntrinsic(name, value) {\n const key = `%${name}%`;\n if (INTRINSICS[key] !== undefined)\n throw new Error(`intrinsic ${name} already exists`);\n INTRINSICS[key] = value;\n}\nexport function GetIntrinsic(intrinsic) {\n return INTRINSICS[intrinsic];\n}\n//# sourceMappingURL=intrinsicclass.js.map","// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\nconst slots = new WeakMap();\nexport function CreateSlots(container) {\n slots.set(container, Object.create(null));\n}\nfunction GetSlots(container) {\n return slots.get(container);\n}\nexport function HasSlot(container, ...ids) {\n if (!container || 'object' !== typeof container)\n return false;\n const myslots = GetSlots(container);\n return !!myslots && ids.reduce((all, id) => all && id in myslots, true);\n}\nexport function GetSlot(container, id) {\n const value = GetSlots(container)[id];\n if (value === undefined)\n throw new TypeError(`Missing internal slot ${id}`);\n return value;\n}\nexport function SetSlot(container, id, value) {\n GetSlots(container)[id] = value;\n}\n//# sourceMappingURL=slots.js.map","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nconst timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\\\d{1,2}|${offsetNoCapture.source})`);\nconst calComponent = /[A-Za-z0-9]{3,8}/;\nconst calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`);\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\\\[(${timeZoneID.source})\\\\])?`);\nconst calendar = new RegExp(`\\\\[u-ca=(${calendarID.source})\\\\]`);\nexport const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i');\nexport const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i');\n// The short forms of YearMonth and MonthDay are only for the ISO calendar.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\nexport const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`);\nexport const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`);\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n//# sourceMappingURL=regex.js.map","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectAssign = Object.assign;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ObjectIs = Object.is;\nconst ReflectApply = Reflect.apply;\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { CreateSlots, GetSlot, HasSlot, SetSlot, EPOCHNANOSECONDS, TIMEZONE_ID, CALENDAR_ID, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, DATE_BRAND, YEAR_MONTH_BRAND, MONTH_DAY_BRAND, TIME_ZONE, CALENDAR, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS } from './slots';\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst DAY_SECONDS = 86400;\nconst DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\nconst BUILTIN_CALENDAR_IDS = [\n 'iso8601',\n 'hebrew',\n 'islamic',\n 'islamic-umalqura',\n 'islamic-tbla',\n 'islamic-civil',\n 'islamic-rgsa',\n 'islamicc',\n 'persian',\n 'ethiopic',\n 'ethioaa',\n 'coptic',\n 'chinese',\n 'dangi',\n 'roc',\n 'indian',\n 'buddhist',\n 'japanese',\n 'gregory'\n];\nfunction IsInteger(value) {\n if (typeof value !== 'number' || !NumberIsFinite(value))\n return false;\n const abs = MathAbs(value);\n return MathFloor(abs) === abs;\n}\nexport function IsObject(value) {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\nexport function ToNumber(value) {\n if (typeof value === 'bigint')\n throw new TypeError('Cannot convert BigInt to number');\n return NumberCtor(value);\n}\nfunction ToInteger(value) {\n const num = ToNumber(value);\n if (NumberIsNaN(num))\n return 0;\n const integer = MathTrunc(num);\n if (num === 0)\n return 0;\n return integer;\n}\nexport function ToString(value) {\n if (typeof value === 'symbol') {\n throw new TypeError('Cannot convert a Symbol value to a String');\n }\n return StringCtor(value);\n}\nexport function ToIntegerThrowOnInfinity(value) {\n const integer = ToInteger(value);\n if (!NumberIsFinite(integer)) {\n throw new RangeError('infinity is out of range');\n }\n return integer;\n}\nfunction ToPositiveInteger(valueParam, property) {\n const value = ToInteger(valueParam);\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (value < 1) {\n if (property !== undefined) {\n throw new RangeError(`property '${property}' cannot be a a number less than one`);\n }\n throw new RangeError('Cannot convert a number less than one to a positive integer');\n }\n return value;\n}\nexport function ToIntegerWithoutRounding(valueParam) {\n const value = ToNumber(valueParam);\n if (NumberIsNaN(value))\n return 0;\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (!IsInteger(value)) {\n throw new RangeError(`unsupported fractional value ${value}`);\n }\n return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0\n}\nfunction divmod(x, y) {\n const quotient = JSBI.divide(x, y);\n const remainder = JSBI.remainder(x, y);\n return { quotient, remainder };\n}\nfunction abs(x) {\n if (JSBI.lessThan(x, ZERO))\n return JSBI.multiply(x, NEGATIVE_ONE);\n return x;\n}\nexport function ArrayPush(arr, ...newItem) {\n ArrayPrototypePush.apply(arr, newItem);\n return arr;\n}\nconst BUILTIN_CASTS = new Map([\n ['year', ToIntegerThrowOnInfinity],\n ['month', ToPositiveInteger],\n ['monthCode', ToString],\n ['day', ToPositiveInteger],\n ['hour', ToIntegerThrowOnInfinity],\n ['minute', ToIntegerThrowOnInfinity],\n ['second', ToIntegerThrowOnInfinity],\n ['millisecond', ToIntegerThrowOnInfinity],\n ['microsecond', ToIntegerThrowOnInfinity],\n ['nanosecond', ToIntegerThrowOnInfinity],\n ['years', ToIntegerWithoutRounding],\n ['months', ToIntegerWithoutRounding],\n ['weeks', ToIntegerWithoutRounding],\n ['days', ToIntegerWithoutRounding],\n ['hours', ToIntegerWithoutRounding],\n ['minutes', ToIntegerWithoutRounding],\n ['seconds', ToIntegerWithoutRounding],\n ['milliseconds', ToIntegerWithoutRounding],\n ['microseconds', ToIntegerWithoutRounding],\n ['nanoseconds', ToIntegerWithoutRounding],\n ['era', ToString],\n ['eraYear', ToInteger],\n ['offset', ToString]\n]);\nconst BUILTIN_DEFAULTS = new Map([\n ['hour', 0],\n ['minute', 0],\n ['second', 0],\n ['millisecond', 0],\n ['microsecond', 0],\n ['nanosecond', 0]\n]);\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n ['years', 'year', 'date'],\n ['months', 'month', 'date'],\n ['weeks', 'week', 'date'],\n ['days', 'day', 'date'],\n ['hours', 'hour', 'time'],\n ['minutes', 'minute', 'time'],\n ['seconds', 'second', 'time'],\n ['milliseconds', 'millisecond', 'time'],\n ['microseconds', 'microsecond', 'time'],\n ['nanoseconds', 'nanosecond', 'time']\n];\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]]));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\nimport * as PARSE from './regex';\nconst IntlDateTimeFormatEnUsCache = new Map();\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) {\n let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n if (instance === undefined) {\n instance = new IntlDateTimeFormat('en-us', {\n timeZone: StringCtor(timeZoneIdentifier),\n hour12: false,\n era: 'short',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n }\n return instance;\n}\nexport function IsTemporalInstant(item) {\n return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\nexport function IsTemporalTimeZone(item) {\n return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item) {\n return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item) {\n return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item) {\n return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item) {\n return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY));\n}\nexport function IsTemporalDateTime(item) {\n return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND);\n}\nexport function IsTemporalYearMonth(item) {\n return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item) {\n return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item) {\n return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectObjectWithCalendarOrTimeZone(item) {\n if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n throw new TypeError('with() does not support a calendar or timeZone property');\n }\n if (item.calendar !== undefined) {\n throw new TypeError('with() does not support a calendar property');\n }\n if (item.timeZone !== undefined) {\n throw new TypeError('with() does not support a timeZone property');\n }\n}\nfunction ParseTemporalTimeZone(stringIdent) {\n let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n if (ianaName)\n return ianaName;\n if (z)\n return 'UTC';\n return offset; // if !ianaName && !z then offset must be present\n}\nfunction FormatCalendarAnnotation(id, showCalendar) {\n if (showCalendar === 'never')\n return '';\n if (showCalendar === 'auto' && id === 'iso8601')\n return '';\n return `[u-ca=${id}]`;\n}\nfunction ParseISODateTime(isoString) {\n // ZDT is the superset of fields for every other Temporal type\n const match = PARSE.zoneddatetime.exec(isoString);\n if (!match)\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n const year = ToInteger(yearString);\n const month = ToInteger(match[2] || match[4]);\n const day = ToInteger(match[3] || match[5]);\n const hour = ToInteger(match[6]);\n const hasTime = match[6] !== undefined;\n const minute = ToInteger(match[7] || match[10]);\n let second = ToInteger(match[8] || match[11]);\n if (second === 60)\n second = 59;\n const fraction = (match[9] || match[12]) + '000000000';\n const millisecond = ToInteger(fraction.slice(0, 3));\n const microsecond = ToInteger(fraction.slice(3, 6));\n const nanosecond = ToInteger(fraction.slice(6, 9));\n let offset;\n let z = false;\n if (match[13]) {\n offset = undefined;\n z = true;\n }\n else if (match[14] && match[15]) {\n const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n const offsetHours = match[15] || '00';\n const offsetMinutes = match[16] || '00';\n const offsetSeconds = match[17] || '00';\n let offsetFraction = match[18] || '0';\n offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n if (+offsetFraction) {\n while (offsetFraction.endsWith('0'))\n offsetFraction = offsetFraction.slice(0, -1);\n offset += `:${offsetSeconds}.${offsetFraction}`;\n }\n else if (+offsetSeconds) {\n offset += `:${offsetSeconds}`;\n }\n if (offset === '-00:00')\n offset = '+00:00';\n }\n let ianaName = match[19];\n if (ianaName) {\n try {\n // Canonicalize name if it is an IANA link name or is capitalized wrong\n ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString();\n }\n catch {\n // Not an IANA name, may be a custom ID, pass through unchanged\n }\n }\n const calendar = match[20];\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n return {\n year,\n month,\n day,\n hasTime,\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond,\n ianaName,\n offset,\n z,\n calendar\n };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.z && !result.offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.ianaName)\n throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString) {\n const match = PARSE.time.exec(isoString);\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (match) {\n hour = ToInteger(match[1]);\n minute = ToInteger(match[2] || match[5]);\n second = ToInteger(match[3] || match[6]);\n if (second === 60)\n second = 59;\n const fraction = (match[4] || match[7]) + '000000000';\n millisecond = ToInteger(fraction.slice(0, 3));\n microsecond = ToInteger(fraction.slice(3, 6));\n nanosecond = ToInteger(fraction.slice(6, 9));\n calendar = match[15];\n }\n else {\n let z, hasTime;\n ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseISODateTime(isoString));\n if (!hasTime)\n throw new RangeError(`time is missing in string: ${isoString}`);\n if (z)\n throw new RangeError('Z designator not supported for PlainTime');\n }\n // if it's a date-time string, OK\n if (/[tT ][0-9][0-9]/.test(isoString)) {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n // slow but non-grammar-dependent way to ensure that time-only strings that\n // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to\n // assertion in spec text\n try {\n const { month, day } = ParseTemporalMonthDayString(isoString);\n RejectISODate(1972, month, day);\n }\n catch {\n try {\n const { year, month } = ParseTemporalYearMonthString(isoString);\n RejectISODate(year, month, 1);\n }\n catch {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n }\n throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString) {\n const match = PARSE.yearmonth.exec(isoString);\n let year, month, calendar, referenceISODay;\n if (match) {\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n year = ToInteger(yearString);\n month = ToInteger(match[2]);\n calendar = match[3];\n }\n else {\n let z;\n ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainYearMonth');\n }\n return { year, month, calendar, referenceISODay };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString) {\n const match = PARSE.monthday.exec(isoString);\n let month, day, calendar, referenceISOYear;\n if (match) {\n month = ToInteger(match[1]);\n day = ToInteger(match[2]);\n }\n else {\n let z;\n ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainMonthDay');\n }\n return { month, day, calendar, referenceISOYear };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent) {\n try {\n let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent);\n if (canonicalIdent)\n return { ianaName: canonicalIdent.toString() };\n }\n catch {\n // fall through\n }\n try {\n // Try parsing ISO string instead\n const result = ParseISODateTime(stringIdent);\n if (result.z || result.offset || result.ianaName) {\n return result;\n }\n }\n catch {\n // fall through\n }\n throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString) {\n const match = PARSE.duration.exec(isoString);\n if (!match)\n throw new RangeError(`invalid duration: ${isoString}`);\n if (match.slice(2).every((element) => element === undefined)) {\n throw new RangeError(`invalid duration: ${isoString}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n const years = ToInteger(match[2]) * sign;\n const months = ToInteger(match[3]) * sign;\n const weeks = ToInteger(match[4]) * sign;\n const days = ToInteger(match[5]) * sign;\n const hours = ToInteger(match[6]) * sign;\n let fHours = match[7];\n let minutes = ToInteger(match[8]) * sign;\n let fMinutes = match[9];\n let seconds = ToInteger(match[10]) * sign;\n const fSeconds = match[11] + '000000000';\n let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign;\n let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign;\n let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign;\n fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0;\n fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0;\n ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds));\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString) {\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString);\n if (!z && !offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n // At least one of z or offset is defined, but TS doesn't seem to understand\n // that we only use offset if z is not defined (and thus offset must be defined).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs));\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n return epochNs;\n}\nexport function RegulateISODate(yearParam, monthParam, dayParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, day);\n break;\n case 'constrain':\n ({ year, month, day } = ConstrainISODate(year, month, day));\n break;\n }\n return { year, month, day };\n}\nexport function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n switch (overflow) {\n case 'reject':\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n break;\n case 'constrain':\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond));\n break;\n }\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RegulateISOYearMonth(yearParam, monthParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n const referenceISODay = 1;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, referenceISODay);\n break;\n case 'constrain':\n ({ year, month } = ConstrainISODate(year, month));\n break;\n }\n return { year, month };\n}\nfunction DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) {\n let fHours = fHoursParam;\n let minutes = minutesParam;\n let fMinutes = fMinutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (fHours !== 0) {\n [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const mins = fHours * 60;\n minutes = MathTrunc(mins);\n fMinutes = mins % 1;\n }\n if (fMinutes !== 0) {\n [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const secs = fMinutes * 60;\n seconds = MathTrunc(secs);\n const fSeconds = secs % 1;\n if (fSeconds !== 0) {\n const mils = fSeconds * 1000;\n milliseconds = MathTrunc(mils);\n const fMilliseconds = mils % 1;\n if (fMilliseconds !== 0) {\n const mics = fMilliseconds * 1000;\n microseconds = MathTrunc(mics);\n const fMicroseconds = mics % 1;\n if (fMicroseconds !== 0) {\n const nans = fMicroseconds * 1000;\n nanoseconds = MathTrunc(nans);\n }\n }\n }\n }\n return { minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalDurationRecord(item) {\n if (!IsObject(item)) {\n return ParseTemporalDurationString(ToString(item));\n }\n if (IsTemporalDuration(item)) {\n return {\n years: GetSlot(item, YEARS),\n months: GetSlot(item, MONTHS),\n weeks: GetSlot(item, WEEKS),\n days: GetSlot(item, DAYS),\n hours: GetSlot(item, HOURS),\n minutes: GetSlot(item, MINUTES),\n seconds: GetSlot(item, SECONDS),\n milliseconds: GetSlot(item, MILLISECONDS),\n microseconds: GetSlot(item, MICROSECONDS),\n nanoseconds: GetSlot(item, NANOSECONDS)\n };\n }\n const result = {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n let partial = ToTemporalPartialDurationRecord(item);\n for (const property of DURATION_FIELDS) {\n const value = partial[property];\n if (value !== undefined) {\n result[property] = value;\n }\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalPartialDurationRecord(temporalDurationLike) {\n if (!IsObject(temporalDurationLike)) {\n throw new TypeError('invalid duration-like');\n }\n const result = {\n years: undefined,\n months: undefined,\n weeks: undefined,\n days: undefined,\n hours: undefined,\n minutes: undefined,\n seconds: undefined,\n milliseconds: undefined,\n microseconds: undefined,\n nanoseconds: undefined\n };\n let any = false;\n for (const property of DURATION_FIELDS) {\n const value = temporalDurationLike[property];\n if (value !== undefined) {\n any = true;\n result[property] = ToIntegerWithoutRounding(value);\n }\n }\n if (!any) {\n throw new TypeError('invalid duration-like');\n }\n return result;\n}\nfunction ToLimitedTemporalDuration(item, disallowedProperties) {\n let record = ToTemporalDurationRecord(item);\n for (const property of disallowedProperties) {\n if (record[property] !== 0) {\n throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);\n }\n }\n return record;\n}\nexport function ToTemporalOverflow(options) {\n if (options === undefined)\n return 'constrain';\n return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\nexport function ToTemporalDisambiguation(options) {\n if (options === undefined)\n return 'compatible';\n return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\nexport function ToTemporalRoundingMode(options, fallback) {\n return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback);\n}\nfunction NegateTemporalRoundingMode(roundingMode) {\n switch (roundingMode) {\n case 'ceil':\n return 'floor';\n case 'floor':\n return 'ceil';\n default:\n return roundingMode;\n }\n}\nexport function ToTemporalOffset(options, fallback) {\n if (options === undefined)\n return fallback;\n return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\nexport function ToShowCalendarOption(options) {\n return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto');\n}\nexport function ToShowTimeZoneNameOption(options) {\n return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto');\n}\nexport function ToShowOffsetOption(options) {\n return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\nexport function ToTemporalRoundingIncrement(options, dividend, inclusive) {\n let maximum = Infinity;\n if (dividend !== undefined)\n maximum = dividend;\n if (!inclusive && dividend !== undefined)\n maximum = dividend > 1 ? dividend - 1 : 1;\n const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1);\n if (dividend !== undefined && dividend % increment !== 0) {\n throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n }\n return increment;\n}\nexport function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) {\n const maximumIncrements = {\n year: undefined,\n month: undefined,\n week: undefined,\n day: undefined,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n}\nexport function ToSecondsStringPrecision(options) {\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n if (smallestUnit === 'hour') {\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains.\n // Maybe this is fixed in later TS versions?\n if (c === 'time' && s !== 'hour') {\n allowed.push(s, p);\n }\n return allowed;\n }, []);\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n switch (smallestUnit) {\n case 'minute':\n return { precision: 'minute', unit: 'minute', increment: 1 };\n case 'second':\n return { precision: 0, unit: 'second', increment: 1 };\n case 'millisecond':\n return { precision: 3, unit: 'millisecond', increment: 1 };\n case 'microsecond':\n return { precision: 6, unit: 'microsecond', increment: 1 };\n case 'nanosecond':\n return { precision: 9, unit: 'nanosecond', increment: 1 };\n default: // fall through if option not given\n }\n let digits = options.fractionalSecondDigits;\n if (digits === undefined)\n digits = 'auto';\n if (typeof digits !== 'number') {\n const stringDigits = ToString(digits);\n if (stringDigits === 'auto')\n return { precision: 'auto', unit: 'nanosecond', increment: 1 };\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`);\n }\n if (NumberIsNaN(digits) || digits < 0 || digits > 9) {\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n const precision = MathFloor(digits);\n switch (precision) {\n case 0:\n return { precision, unit: 'second', increment: 1 };\n case 1:\n case 2:\n case 3:\n return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n case 4:\n case 5:\n case 6:\n return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n case 7:\n case 8:\n case 9:\n return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n default:\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n}\nexport const REQUIRED = Symbol('~required~');\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) {\n const allowedSingular = [];\n for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n if (unitGroup === 'datetime' || unitGroup === category) {\n allowedSingular.push(singular);\n }\n }\n allowedSingular.push(...extraValues);\n let defaultVal = requiredOrDefault;\n if (defaultVal === REQUIRED) {\n defaultVal = undefined;\n }\n else if (defaultVal !== undefined) {\n allowedSingular.push(defaultVal);\n }\n const allowedValues = [\n ...allowedSingular\n ];\n for (const singular of allowedSingular) {\n const plural = PLURAL_FOR.get(singular);\n if (plural !== undefined)\n allowedValues.push(plural);\n }\n let retval = GetOption(options, key, allowedValues, defaultVal);\n if (retval === undefined && requiredOrDefault === REQUIRED) {\n throw new RangeError(`${key} is required`);\n }\n // Coerce any plural units into their singular form\n if (SINGULAR_FOR.has(retval)) {\n // We just has-checked this, but tsc doesn't understand that.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(retval);\n }\n return retval;\n}\nexport function ToRelativeTemporalObject(options) {\n const relativeTo = options.relativeTo;\n if (relativeTo === undefined)\n return relativeTo;\n let offsetBehaviour = 'option';\n let matchMinutes = false;\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n if (IsObject(relativeTo)) {\n if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo))\n return relativeTo;\n if (IsTemporalDateTime(relativeTo))\n return TemporalDateTimeToDate(relativeTo);\n calendar = GetTemporalCalendarWithISODefault(relativeTo);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n const dateOptions = ObjectCreate(null);\n dateOptions.overflow = 'constrain';\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions));\n // The `offset` and `timeZone` properties only exist on ZonedDateTime (or\n // ZonedDateTimeLike-property bags). The assertions below are used to avoid\n // TS errors while not diverging runtime code from proposal-temporal.\n offset = relativeTo.offset;\n if (offset === undefined)\n offsetBehaviour = 'wall';\n timeZone = relativeTo.timeZone;\n }\n else {\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n ParseISODateTime(ToString(relativeTo)));\n if (ianaName)\n timeZone = ianaName;\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinutes = true;\n }\n if (timeZone !== undefined) {\n timeZone = ToTemporalTimeZone(timeZone);\n let offsetNs = 0;\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(ToString(offset));\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n }\n return CreateTemporalDate(year, month, day, calendar);\n}\nexport function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n for (const [prop, v] of [\n ['years', years],\n ['months', months],\n ['weeks', weeks],\n ['days', days],\n ['hours', hours],\n ['minutes', minutes],\n ['seconds', seconds],\n ['milliseconds', milliseconds],\n ['microseconds', microseconds],\n ['nanoseconds', nanoseconds]\n ]) {\n if (v !== 0) {\n // All the above keys are definitely in SINGULAR_FOR\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(prop);\n }\n }\n return 'nanosecond';\n}\nexport function LargerOfTwoTemporalUnits(unit1, unit2) {\n if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2))\n return unit2;\n return unit1;\n}\nfunction MergeLargestUnitOption(optionsParam, largestUnit) {\n let options = optionsParam;\n if (options === undefined)\n options = ObjectCreate(null);\n return ObjectAssign(ObjectCreate(null), options, { largestUnit });\n}\nexport function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) {\n const result = ObjectCreate(null);\n let any = false;\n for (const property of fields) {\n let value = bag[property];\n if (value !== undefined) {\n any = true;\n if (BUILTIN_CASTS.has(property)) {\n // We just has-checked this map access, so there will definitely be a\n // value.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n value = BUILTIN_CASTS.get(property)(value);\n }\n result[property] = value;\n }\n else if (requiredFields !== 'partial') {\n // TODO: using .call in this way is not correctly type-checked by tsc.\n // We might need a type-safe Call wrapper?\n if (ArrayIncludes.call(requiredFields, property)) {\n throw new TypeError(`required property '${property}' missing or undefined`);\n }\n value = BUILTIN_DEFAULTS.get(property);\n result[property] = value;\n }\n }\n if (requiredFields === 'partial' && !any) {\n throw new TypeError(emptySourceErrorMessage);\n }\n if ((result.era === undefined) !== (result.eraYear === undefined)) {\n throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n }\n return result;\n}\nexport function ToTemporalTimeRecord(bag, completeness = 'complete') {\n // NOTE: Field order here is important.\n const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n const result = {};\n for (const field of fields) {\n const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n if (valueDesc !== undefined) {\n result[field] = valueDesc.value;\n }\n else if (completeness === 'complete') {\n result[field] = 0;\n }\n }\n return result;\n}\nexport function ToTemporalDate(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalDate(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarDateFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n if (z)\n throw new RangeError('Z designator not supported for PlainDate');\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n return new TemporalPlainDate(year, month, day, calendar); // include validation\n}\nexport function InterpretTemporalDateTimeFields(calendar, fields, options) {\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n const overflow = ToTemporalOverflow(options);\n const date = CalendarDateFromFields(calendar, fields, options);\n const year = GetSlot(date, ISO_YEAR);\n const month = GetSlot(date, ISO_MONTH);\n const day = GetSlot(date, ISO_DAY);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function ToTemporalDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalDateTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDate(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseTemporalDateTimeString(ToString(item)));\n if (z)\n throw new RangeError('Z designator not supported for PlainDateTime');\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n }\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function ToTemporalDuration(item) {\n if (IsTemporalDuration(item))\n return item;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function ToTemporalInstant(item) {\n if (IsTemporalInstant(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n }\n const ns = ParseTemporalInstant(ToString(item));\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(ns);\n}\nexport function ToTemporalMonthDay(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalMonthDay(item))\n return item;\n let calendar, calendarAbsent;\n if (HasSlot(item, CALENDAR)) {\n calendar = GetSlot(item, CALENDAR);\n calendarAbsent = false;\n }\n else {\n let maybeStringCalendar = item.calendar;\n calendarAbsent = maybeStringCalendar === undefined;\n if (maybeStringCalendar === undefined)\n maybeStringCalendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(maybeStringCalendar);\n }\n // HasSlot above adjusts the type of 'item' to include\n // TypesWithCalendarUnits, which causes type-inference failures below.\n // This is probably indicative of problems with HasSlot's typing.\n item = item;\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n // Callers who omit the calendar are not writing calendar-independent\n // code. In that case, `monthCode`/`year` can be omitted; `month` and\n // `day` are sufficient. Add a `year` to satisfy calendar validation.\n if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n fields.year = 1972;\n }\n return CalendarMonthDayFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item));\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISOYear === undefined) {\n RejectISODate(1972, month, day);\n return CreateTemporalMonthDay(month, day, calendar);\n }\n const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n return CalendarMonthDayFromFields(calendar, result);\n}\nexport function ToTemporalTime(itemParam, overflow = 'constrain') {\n let item = itemParam;\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n if (ToString(calendar) !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n }\n else {\n ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item)));\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar !== undefined && calendar !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n }\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function ToTemporalYearMonth(item, options) {\n if (IsObject(item)) {\n if (IsTemporalYearMonth(item))\n return item;\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item));\n // TODO: replace with ternary?\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISODay === undefined) {\n RejectISODate(year, month, 1);\n return CreateTemporalYearMonth(year, month, calendar);\n }\n const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n return CalendarYearMonthFromFields(calendar, result);\n}\nexport function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n // Simple case: ISO string without a TZ offset (or caller wants to ignore\n // the offset), so just convert DateTime to Instant in the given time zone\n const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n }\n // The caller wants the offset to always win ('use') OR the caller is OK\n // with the offset winning ('prefer' or 'reject') as long as it's valid\n // for this timezone and date/time.\n if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n // Calculate the instant for the input's date/time and offset\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('ZonedDateTime outside of supported range');\n return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n }\n // \"prefer\" or \"reject\"\n const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n for (const candidate of possibleInstants) {\n const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand'));\n if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n return GetSlot(candidate, EPOCHNANOSECONDS);\n }\n }\n // the user-provided offset doesn't match any instants for this time\n // zone and date/time.\n if (offsetOpt === 'reject') {\n const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n // toString (which is invoked by Node when using template literals directly).\n // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n }\n // fall through: offsetOpt === 'prefer', but the offset doesn't match\n // so fall back to use the time zone instead.\n const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n}\nexport function ToTemporalZonedDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar;\n let matchMinute = false;\n let offsetBehaviour = 'option';\n if (IsObject(item)) {\n if (IsTemporalZonedDateTime(item))\n return item;\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset');\n const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n timeZone = ToTemporalTimeZone(fields.timeZone);\n offset = fields.offset;\n if (offset === undefined) {\n offsetBehaviour = 'wall';\n }\n else {\n offset = ToString(offset);\n }\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n ParseTemporalZonedDateTimeString(ToString(item)));\n if (!ianaName)\n throw new RangeError('time zone ID required in brackets');\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n timeZone = new TemporalTimeZone(ianaName);\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinute = true; // ISO strings may specify offset with less precision\n }\n let offsetNs = 0;\n // The code above guarantees that if offsetBehaviour === 'option', then\n // `offset` is not undefined.\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(offset);\n const disambiguation = ToTemporalDisambiguation(options);\n const offsetOpt = ToTemporalOffset(options, 'reject');\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nexport function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) {\n RejectISODate(isoYear, isoMonth, isoDay);\n RejectDateRange(isoYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, DATE_BRAND, true);\n if (DEBUG) {\n ObjectDefineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) {\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n const result = ObjectCreate(TemporalPlainDate.prototype);\n CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n return result;\n}\nexport function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) {\n RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_HOUR, h);\n SetSlot(result, ISO_MINUTE, min);\n SetSlot(result, ISO_SECOND, s);\n SetSlot(result, ISO_MILLISECOND, ms);\n SetSlot(result, ISO_MICROSECOND, µs);\n SetSlot(result, ISO_NANOSECOND, ns);\n SetSlot(result, CALENDAR, calendar);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) {\n const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const result = ObjectCreate(TemporalPlainDateTime.prototype);\n CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n return result;\n}\nexport function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) {\n RejectISODate(referenceISOYear, isoMonth, isoDay);\n RejectDateRange(referenceISOYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_YEAR, referenceISOYear);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, MONTH_DAY_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) {\n const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n return result;\n}\nexport function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) {\n RejectISODate(isoYear, isoMonth, referenceISODay);\n RejectYearMonthRange(isoYear, isoMonth);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, referenceISODay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, YEAR_MONTH_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) {\n const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n return result;\n}\nexport function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) {\n ValidateEpochNanoseconds(epochNanoseconds);\n CreateSlots(result);\n SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n SetSlot(result, TIME_ZONE, timeZone);\n SetSlot(result, CALENDAR, calendar);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n SetSlot(result, INSTANT, instant);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) {\n const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n const result = ObjectCreate(TemporalZonedDateTime.prototype);\n CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n return result;\n}\nexport function GetISO8601Calendar() {\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n return new TemporalCalendar('iso8601');\n}\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields(calendar, fieldNamesParam) {\n let fieldNames = fieldNamesParam;\n if (calendar.fields) {\n fieldNames = calendar.fields(fieldNames);\n }\n const result = [];\n for (const name of fieldNames) {\n if (typeof name !== 'string')\n throw new TypeError('bad return from calendar.fields()');\n ArrayPrototypePush.call(result, name);\n }\n return result;\n}\nexport function CalendarMergeFields(calendar, fields, additionalFields) {\n const calMergeFields = calendar.mergeFields;\n if (!calMergeFields) {\n return { ...fields, ...additionalFields };\n }\n const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]);\n if (!IsObject(result))\n throw new TypeError('bad return from calendar.mergeFields()');\n return result;\n}\nexport function CalendarDateAdd(calendar, date, duration, options, dateAddParam) {\n let dateAdd = dateAddParam;\n if (dateAdd === undefined) {\n dateAdd = calendar.dateAdd;\n }\n const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nfunction CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) {\n let dateUntil = dateUntilParam;\n if (dateUntil === undefined) {\n dateUntil = calendar.dateUntil;\n }\n const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n if (!IsTemporalDuration(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYear(calendar, dateLike) {\n const result = calendar.year(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar year result must be an integer');\n }\n return ToIntegerThrowOnInfinity(result);\n}\nexport function CalendarMonth(calendar, dateLike) {\n const result = calendar.month(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar month result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarMonthCode(calendar, dateLike) {\n const result = calendar.monthCode(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar monthCode result must be a string');\n }\n return ToString(result);\n}\nexport function CalendarDay(calendar, dateLike) {\n const result = calendar.day(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar day result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarEra(calendar, dateLike) {\n let result = calendar.era(dateLike);\n if (result !== undefined) {\n result = ToString(result);\n }\n return result;\n}\nexport function CalendarEraYear(calendar, dateLike) {\n let result = calendar.eraYear(dateLike);\n if (result !== undefined) {\n result = ToIntegerThrowOnInfinity(result);\n }\n return result;\n}\nexport function CalendarDayOfWeek(calendar, dateLike) {\n return calendar.dayOfWeek(dateLike);\n}\nexport function CalendarDayOfYear(calendar, dateLike) {\n return calendar.dayOfYear(dateLike);\n}\nexport function CalendarWeekOfYear(calendar, dateLike) {\n return calendar.weekOfYear(dateLike);\n}\nexport function CalendarDaysInWeek(calendar, dateLike) {\n return calendar.daysInWeek(dateLike);\n}\nexport function CalendarDaysInMonth(calendar, dateLike) {\n return calendar.daysInMonth(dateLike);\n}\nexport function CalendarDaysInYear(calendar, dateLike) {\n return calendar.daysInYear(dateLike);\n}\nexport function CalendarMonthsInYear(calendar, dateLike) {\n return calendar.monthsInYear(dateLike);\n}\nexport function CalendarInLeapYear(calendar, dateLike) {\n return calendar.inLeapYear(dateLike);\n}\nexport function ToTemporalCalendar(calendarLikeParam) {\n let calendarLike = calendarLikeParam;\n if (IsObject(calendarLike)) {\n if (HasSlot(calendarLike, CALENDAR))\n return GetSlot(calendarLike, CALENDAR);\n if (!('calendar' in calendarLike))\n return calendarLike;\n calendarLike = calendarLike.calendar;\n if (IsObject(calendarLike) && !('calendar' in calendarLike))\n return calendarLike;\n }\n const identifier = ToString(calendarLike);\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n if (IsBuiltinCalendar(identifier))\n return new TemporalCalendar(identifier);\n let calendar;\n try {\n ({ calendar } = ParseISODateTime(identifier));\n }\n catch {\n throw new RangeError(`Invalid calendar: ${identifier}`);\n }\n if (!calendar)\n calendar = 'iso8601';\n return new TemporalCalendar(calendar);\n}\nfunction GetTemporalCalendarWithISODefault(item) {\n if (HasSlot(item, CALENDAR))\n return GetSlot(item, CALENDAR);\n const { calendar } = item;\n if (calendar === undefined)\n return GetISO8601Calendar();\n return ToTemporalCalendar(calendar);\n}\nexport function CalendarEquals(one, two) {\n if (one === two)\n return true;\n const cal1 = ToString(one);\n const cal2 = ToString(two);\n return cal1 === cal2;\n}\nexport function ConsolidateCalendars(one, two) {\n if (one === two)\n return two;\n const sOne = ToString(one);\n const sTwo = ToString(two);\n if (sOne === sTwo || sOne === 'iso8601') {\n return two;\n }\n else if (sTwo === 'iso8601') {\n return one;\n }\n else {\n throw new RangeError('irreconcilable calendars');\n }\n}\nexport function CalendarDateFromFields(calendar, fields, options) {\n const result = calendar.dateFromFields(fields, options);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYearMonthFromFields(calendar, fields, options) {\n const result = calendar.yearMonthFromFields(fields, options);\n if (!IsTemporalYearMonth(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarMonthDayFromFields(calendar, fields, options) {\n const result = calendar.monthDayFromFields(fields, options);\n if (!IsTemporalMonthDay(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function ToTemporalTimeZone(temporalTimeZoneLikeParam) {\n let temporalTimeZoneLike = temporalTimeZoneLikeParam;\n if (IsObject(temporalTimeZoneLike)) {\n if (IsTemporalZonedDateTime(temporalTimeZoneLike))\n return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n if (!('timeZone' in temporalTimeZoneLike))\n return temporalTimeZoneLike;\n temporalTimeZoneLike = temporalTimeZoneLike.timeZone;\n if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) {\n return temporalTimeZoneLike;\n }\n }\n const identifier = ToString(temporalTimeZoneLike);\n const timeZone = ParseTemporalTimeZone(identifier);\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(timeZone);\n}\nexport function TimeZoneEquals(one, two) {\n if (one === two)\n return true;\n const tz1 = ToString(one);\n const tz2 = ToString(two);\n return tz1 === tz2;\n}\nexport function TemporalDateTimeToDate(dateTime) {\n return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR));\n}\nexport function TemporalDateTimeToTime(dateTime) {\n const Time = GetIntrinsic('%Temporal.PlainTime%');\n return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n}\nexport function GetOffsetNanosecondsFor(timeZone, instant) {\n let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor;\n if (typeof getOffsetNanosecondsFor !== 'function') {\n throw new TypeError('getOffsetNanosecondsFor not callable');\n }\n const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]);\n if (typeof offsetNs !== 'number') {\n throw new TypeError('bad return from getOffsetNanosecondsFor');\n }\n if (!IsInteger(offsetNs) || MathAbs(offsetNs) > 86400e9) {\n throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n }\n return offsetNs;\n}\nexport function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) {\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n return FormatTimeZoneOffsetString(offsetNs);\n}\nexport function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) {\n const ns = GetSlot(instant, EPOCHNANOSECONDS);\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs));\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) {\n const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\nfunction DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const numInstants = possibleInstants.length;\n if (numInstants === 1)\n return possibleInstants[0];\n if (numInstants) {\n switch (disambiguation) {\n case 'compatible':\n // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n case 'earlier':\n return possibleInstants[0];\n case 'later':\n return possibleInstants[numInstants - 1];\n case 'reject': {\n throw new RangeError('multiple instants found');\n }\n }\n }\n const year = GetSlot(dateTime, ISO_YEAR);\n const month = GetSlot(dateTime, ISO_MONTH);\n const day = GetSlot(dateTime, ISO_DAY);\n const hour = GetSlot(dateTime, ISO_HOUR);\n const minute = GetSlot(dateTime, ISO_MINUTE);\n const second = GetSlot(dateTime, ISO_SECOND);\n const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utcns === null)\n throw new RangeError('DateTime outside of supported range');\n const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n const nanoseconds = offsetAfter - offsetBefore;\n switch (disambiguation) {\n case 'earlier': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined);\n const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar);\n return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n }\n case 'compatible':\n // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n case 'later': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined);\n const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar);\n const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n return possible[possible.length - 1];\n }\n case 'reject': {\n throw new RangeError('no such instant found');\n }\n }\n}\nfunction GetPossibleInstantsFor(timeZone, dateTime) {\n const possibleInstants = timeZone.getPossibleInstantsFor(dateTime);\n const result = [];\n for (const instant of possibleInstants) {\n if (!IsTemporalInstant(instant)) {\n throw new TypeError('bad return from getPossibleInstantsFor');\n }\n ArrayPrototypePush.call(result, instant);\n }\n return result;\n}\nexport function ISOYearString(year) {\n let yearString;\n if (year < 0 || year > 9999) {\n const sign = year < 0 ? '-' : '+';\n const yearNumber = MathAbs(year);\n yearString = sign + `000000${yearNumber}`.slice(-6);\n }\n else {\n yearString = `0000${year}`.slice(-4);\n }\n return yearString;\n}\nexport function ISODateTimePartString(part) {\n return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) {\n if (precision === 'minute')\n return '';\n const secs = `:${ISODateTimePartString(second)}`;\n let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n let fraction;\n if (precision === 'auto') {\n if (fractionNumber === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n }\n else {\n if (precision === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n }\n return `${secs}.${fraction}`;\n}\nexport function TemporalInstantToString(instant, timeZone, precision) {\n let outputTimeZone = timeZone;\n if (outputTimeZone === undefined) {\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n outputTimeZone = new TemporalTimeZone('UTC');\n }\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let timeZoneString = 'Z';\n if (timeZone !== undefined) {\n const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n }\n return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\nexport function TemporalDurationToString(duration, precision = 'auto', options = undefined) {\n function formatNumber(num) {\n if (num <= NumberMaxSafeInteger)\n return num.toString(10);\n return JSBI.BigInt(num).toString(10);\n }\n const years = GetSlot(duration, YEARS);\n const months = GetSlot(duration, MONTHS);\n const weeks = GetSlot(duration, WEEKS);\n const days = GetSlot(duration, DAYS);\n const hours = GetSlot(duration, HOURS);\n const minutes = GetSlot(duration, MINUTES);\n let seconds = GetSlot(duration, SECONDS);\n let ms = GetSlot(duration, MILLISECONDS);\n let µs = GetSlot(duration, MICROSECONDS);\n let ns = GetSlot(duration, NANOSECONDS);\n const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({\n seconds,\n milliseconds: ms,\n microseconds: µs,\n nanoseconds: ns\n } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n }\n const dateParts = [];\n if (years)\n dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n if (months)\n dateParts.push(`${formatNumber(MathAbs(months))}M`);\n if (weeks)\n dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n if (days)\n dateParts.push(`${formatNumber(MathAbs(days))}D`);\n const timeParts = [];\n if (hours)\n timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n if (minutes)\n timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n const secondParts = [];\n let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n let nsBigInt, µsBigInt, msBigInt, secondsBigInt;\n ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n const fraction = MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n let decimalPart;\n if (precision === 'auto') {\n if (fraction !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0');\n while (decimalPart[decimalPart.length - 1] === '0') {\n decimalPart = decimalPart.slice(0, -1);\n }\n }\n }\n else if (precision !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n }\n if (decimalPart)\n secondParts.unshift('.', decimalPart);\n if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n secondParts.unshift(abs(secondsBigInt).toString());\n }\n if (secondParts.length)\n timeParts.push(`${secondParts.join('')}S`);\n if (timeParts.length)\n timeParts.unshift('T');\n if (!dateParts.length && !timeParts.length)\n return 'PT0S';\n return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\nexport function TemporalDateToString(date, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(date, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n const calendarID = ToString(GetSlot(date, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${year}-${month}-${day}${calendar}`;\n}\nexport function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) {\n let year = GetSlot(dateTime, ISO_YEAR);\n let month = GetSlot(dateTime, ISO_MONTH);\n let day = GetSlot(dateTime, ISO_DAY);\n let hour = GetSlot(dateTime, ISO_HOUR);\n let minute = GetSlot(dateTime, ISO_MINUTE);\n let second = GetSlot(dateTime, ISO_SECOND);\n let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const yearString = ISOYearString(year);\n const monthString = ISODateTimePartString(month);\n const dayString = ISODateTimePartString(day);\n const hourString = ISODateTimePartString(hour);\n const minuteString = ISODateTimePartString(minute);\n const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n const calendarID = ToString(GetSlot(dateTime, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\nexport function TemporalMonthDayToString(monthDay, showCalendar = 'auto') {\n const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n let resultString = `${month}-${day}`;\n const calendar = GetSlot(monthDay, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n resultString = `${year}-${resultString}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n let resultString = `${year}-${month}`;\n const calendar = GetSlot(yearMonth, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n resultString += `-${day}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) {\n let instant = GetSlot(zdt, INSTANT);\n if (options) {\n const { unit, increment, roundingMode } = options;\n const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n instant = new TemporalInstant(ns);\n }\n const tz = GetSlot(zdt, TIME_ZONE);\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n if (showOffset !== 'never') {\n const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n result += FormatISOTimeZoneOffsetString(offsetNs);\n }\n if (showTimeZone !== 'never')\n result += `[${tz}]`;\n const calendarID = ToString(GetSlot(zdt, CALENDAR));\n result += FormatCalendarAnnotation(calendarID, showCalendar);\n return result;\n}\nexport function TestTimeZoneOffsetString(string) {\n return OFFSET.test(StringCtor(string));\n}\nexport function ParseTimeZoneOffsetString(string) {\n const match = OFFSET.exec(StringCtor(string));\n if (!match) {\n throw new RangeError(`invalid time zone offset: ${string}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n const hours = +match[2];\n const minutes = +(match[3] || 0);\n const seconds = +(match[4] || 0);\n const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) {\n if (TestTimeZoneOffsetString(timeZoneIdentifier)) {\n const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n return FormatTimeZoneOffsetString(offsetNs);\n }\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n return formatter.resolvedOptions().timeZone;\n}\nexport function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) {\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utc === null)\n throw new RangeError('Date outside of supported range');\n return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam) {\n const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n const nanoseconds = offsetNanoseconds % 1e9;\n const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n const secondString = ISODateTimePartString(seconds);\n let post = '';\n if (nanoseconds) {\n let fraction = `${nanoseconds}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n post = `:${secondString}.${fraction}`;\n }\n else if (seconds) {\n post = `:${secondString}`;\n }\n return `${sign}${hourString}:${minuteString}${post}`;\n}\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam) {\n let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand'));\n const sign = offsetNanoseconds < 0 ? '-' : '+';\n offsetNanoseconds = MathAbs(offsetNanoseconds);\n const minutes = (offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n // Note: Date.UTC() interprets one and two-digit years as being in the\n // 20th century, so don't use it\n const legacyDate = new Date();\n legacyDate.setUTCHours(hour, minute, second, millisecond);\n legacyDate.setUTCFullYear(year, month - 1, day);\n const ms = legacyDate.getTime();\n if (NumberIsNaN(ms))\n return null;\n let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX))\n return null;\n return ns;\n}\nfunction GetISOPartsFromEpoch(epochNanoseconds) {\n const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n let epochMilliseconds = JSBI.toNumber(quotient);\n let nanos = JSBI.toNumber(remainder);\n if (nanos < 0) {\n nanos += 1e6;\n epochMilliseconds -= 1;\n }\n const microsecond = MathFloor(nanos / 1e3) % 1e3;\n const nanosecond = nanos % 1e3;\n const item = new Date(epochMilliseconds);\n const year = item.getUTCFullYear();\n const month = item.getUTCMonth() + 1;\n const day = item.getUTCDate();\n const hour = item.getUTCHours();\n const minute = item.getUTCMinutes();\n const second = item.getUTCSeconds();\n const millisecond = item.getUTCMilliseconds();\n return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) {\n const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction maxJSBI(one, two) {\n return JSBI.lessThan(one, two) ? two : one;\n}\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\nexport function GetIANATimeZoneNextTransition(epochNanoseconds, id) {\n // Decide how far in the future after `epochNanoseconds` we'll look for an\n // offset change. There are two cases:\n // 1. If it's a past date (or a date in the near future) then it's possible\n // that the time zone may have newly added DST in the next few years. So\n // we'll have to look from the provided time until a few years after the\n // current system time. (Changes to DST policy are usually announced a few\n // years in the future.) Note that the first DST anywhere started in 1847,\n // so we'll start checks in 1847 instead of wasting cycles on years where\n // there will never be transitions.\n // 2. If it's a future date beyond the next few years, then we'll just assume\n // that the latest DST policy in TZDB will still be in effect. In this\n // case, we only need to look one year in the future to see if there are\n // any DST transitions. We actually only need to look 9-10 months because\n // DST has two transitions per year, but we'll use a year just to be safe.\n const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n // start there if an earlier date is supplied.\n let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n let rightNanos = leftNanos;\n let rightOffsetNs = leftOffsetNs;\n while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n if (leftOffsetNs === rightOffsetNs) {\n leftNanos = rightNanos;\n }\n }\n if (leftOffsetNs === rightOffsetNs)\n return null;\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\nexport function GetIANATimeZonePreviousTransition(epochNanoseconds, id) {\n // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n // have to look back one year to find a transition. But if it doesn't use DST,\n // then we need to look all the way back to 1847 (the earliest rule in the\n // TZDB) to see if it had other offset transitions in the past. Looping back\n // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n // also unnecessary because DST rules aren't put into the TZDB more than a few\n // years in the future because the political changes in time zones happen with\n // only a few years' warning. Therefore, if a far-future date is provided,\n // then we'll run the check in two parts:\n // 1. First, we'll look back for up to one year to see if the latest TZDB\n // rules have DST.\n // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n // current system time, and then look back to 1847. This reduces the\n // worst-case loop from 273K years to 175 years, for a ~1500x improvement\n // in worst-case perf.\n const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n let leftNanos = rightNanos;\n let leftOffsetNs = rightOffsetNs;\n while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n if (rightOffsetNs === leftOffsetNs) {\n rightNanos = leftNanos;\n }\n }\n if (rightOffsetNs === leftOffsetNs) {\n if (isFarFuture) {\n // There was no DST after looking back one year, which means that the most\n // recent TZDB rules don't have any recurring transitions. To check for\n // transitions in older rules, back up to a few years after the current\n // date and then look all the way back to 1847. Note that we move back one\n // day from the latest possible rule so that when the recursion runs it\n // won't consider the new time to be \"far future\" because the system clock\n // has advanced in the meantime.\n const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n return GetIANATimeZonePreviousTransition(newTimeToCheck, id);\n }\n return null;\n }\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime) {\n const parts = datetime.split(/[^\\w]+/);\n if (parts.length !== 7) {\n throw new RangeError(`expected 7 parts in \"${datetime}`);\n }\n const month = +parts[0];\n const day = +parts[1];\n let year = +parts[2];\n const era = parts[3].toUpperCase();\n if (era === 'B' || era === 'BC') {\n year = -year + 1;\n }\n else if (era !== 'A' && era !== 'AD') {\n throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n }\n let hour = +parts[4];\n if (hour === 24) {\n // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n hour = 0;\n }\n const minute = +parts[5];\n const second = +parts[6];\n if (!NumberIsFinite(year) ||\n !NumberIsFinite(month) ||\n !NumberIsFinite(day) ||\n !NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second)) {\n throw new RangeError(`Invalid number in \"${datetime}`);\n }\n return { year, month, day, hour, minute, second };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone, epochMilliseconds) {\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n // Using `format` instead of `formatToParts` for compatibility with older clients\n const datetime = formatter.format(new Date(epochMilliseconds));\n return parseFromEnUsFormat(datetime);\n}\nexport function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (ns === null)\n throw new RangeError('DateTime outside of supported range');\n let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n if (JSBI.lessThan(nsEarlier, NS_MIN))\n nsEarlier = ns;\n let nsLater = JSBI.add(ns, DAY_NANOS);\n if (JSBI.greaterThan(nsLater, NS_MAX))\n nsLater = ns;\n const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id);\n const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id);\n const found = earliest === latest ? [earliest] : [earliest, latest];\n return found\n .map((offsetNanoseconds) => {\n const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n if (year !== parts.year ||\n month !== parts.month ||\n day !== parts.day ||\n hour !== parts.hour ||\n minute !== parts.minute ||\n second !== parts.second ||\n millisecond !== parts.millisecond ||\n microsecond !== parts.microsecond ||\n nanosecond !== parts.nanosecond) {\n return undefined;\n }\n return epochNanoseconds;\n })\n .filter((x) => x !== undefined);\n}\nexport function LeapYear(year) {\n if (undefined === year)\n return false;\n const isDiv4 = year % 4 === 0;\n const isDiv100 = year % 100 === 0;\n const isDiv400 = year % 400 === 0;\n return isDiv4 && (!isDiv100 || isDiv400);\n}\nexport function ISODaysInMonth(year, month) {\n const DoM = {\n standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n };\n return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\nexport function DayOfWeek(year, month, day) {\n const m = month + (month < 3 ? 10 : -2);\n const Y = year - (month < 3 ? 1 : 0);\n const c = MathFloor(Y / 100);\n const y = Y - c * 100;\n const d = day;\n const pD = d;\n const pM = MathFloor(2.6 * m - 0.2);\n const pY = y + MathFloor(y / 4);\n const pC = MathFloor(c / 4) - 2 * c;\n const dow = (pD + pM + pY + pC) % 7;\n return dow + (dow <= 0 ? 7 : 0);\n}\nexport function DayOfYear(year, month, day) {\n let days = day;\n for (let m = month - 1; m > 0; m--) {\n days += ISODaysInMonth(year, m);\n }\n return days;\n}\nexport function WeekOfYear(year, month, day) {\n const doy = DayOfYear(year, month, day);\n const dow = DayOfWeek(year, month, day) || 7;\n const doj = DayOfWeek(year, 1, 1);\n const week = MathFloor((doy - dow + 10) / 7);\n if (week < 1) {\n if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n return 53;\n }\n else {\n return 52;\n }\n }\n if (week === 53) {\n if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n return 1;\n }\n }\n return week;\n}\nexport function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) {\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (prop !== 0)\n return prop < 0 ? -1 : 1;\n }\n return 0;\n}\nfunction BalanceISOYearMonth(yearParam, monthParam) {\n let year = yearParam;\n let month = monthParam;\n if (!NumberIsFinite(year) || !NumberIsFinite(month))\n throw new RangeError('infinity is out of range');\n month -= 1;\n year += MathFloor(month / 12);\n month %= 12;\n if (month < 0)\n month += 12;\n month += 1;\n return { year, month };\n}\nfunction BalanceISODate(yearParam, monthParam, dayParam) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n if (!NumberIsFinite(day))\n throw new RangeError('infinity is out of range');\n ({ year, month } = BalanceISOYearMonth(year, month));\n let daysInYear = 0;\n let testYear = month > 2 ? year : year - 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n year -= 1;\n testYear -= 1;\n day += daysInYear;\n }\n testYear += 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n year += 1;\n testYear += 1;\n day -= daysInYear;\n }\n while (day < 1) {\n ({ year, month } = BalanceISOYearMonth(year, month - 1));\n day += ISODaysInMonth(year, month);\n }\n while (day > ISODaysInMonth(year, month)) {\n day -= ISODaysInMonth(year, month);\n ({ year, month } = BalanceISOYearMonth(year, month + 1));\n }\n return { year, month, day };\n}\nfunction BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n if (!NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second) ||\n !NumberIsFinite(millisecond) ||\n !NumberIsFinite(microsecond) ||\n !NumberIsFinite(nanosecond)) {\n throw new RangeError('infinity is out of range');\n }\n microsecond += MathFloor(nanosecond / 1000);\n nanosecond = NonNegativeModulo(nanosecond, 1000);\n millisecond += MathFloor(microsecond / 1000);\n microsecond = NonNegativeModulo(microsecond, 1000);\n second += MathFloor(millisecond / 1000);\n millisecond = NonNegativeModulo(millisecond, 1000);\n minute += MathFloor(second / 60);\n second = NonNegativeModulo(second, 60);\n hour += MathFloor(minute / 60);\n minute = NonNegativeModulo(minute, 60);\n const deltaDays = MathFloor(hour / 24);\n hour = NonNegativeModulo(hour, 24);\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) {\n const days = JSBI.BigInt(daysParam);\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n if (daysParam !== 0)\n nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\nfunction NanosecondsToDays(nanosecondsParam, relativeTo) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n let dayLengthNs = 86400e9;\n if (sign === 0)\n return { days: 0, nanoseconds: ZERO, dayLengthNs };\n if (!IsTemporalZonedDateTime(relativeTo)) {\n let days;\n ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n }\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n const start = GetSlot(relativeTo, INSTANT);\n const endNs = JSBI.add(startNs, nanoseconds);\n const end = new TemporalInstant(endNs);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n // Find the difference in days only.\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate(null));\n let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n // If clock time after addition was in the middle of a skipped period, the\n // endpoint was disambiguated to a later clock time. So it's possible that\n // the resulting disambiguated result is later than endNs. If so, then back\n // up one day and try again. Repeat if necessary (some transitions are\n // > 24 hours) until either there's zero days left or the date duration is\n // back inside the period where it belongs. Note that this case only can\n // happen for positive durations because the only direction that\n // `disambiguation: 'compatible'` can change clock time is forwards.\n if (sign === 1) {\n while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) {\n --days;\n intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may do disambiguation\n }\n }\n nanoseconds = JSBI.subtract(endNs, intermediateNs);\n let isOverflow = false;\n let relativeInstant = new TemporalInstant(intermediateNs);\n do {\n // calculate length of the next day (day that contains the time remainder)\n const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO);\n if (isOverflow) {\n nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n relativeInstant = new TemporalInstant(oneDayFartherNs);\n days += sign;\n }\n } while (isOverflow);\n return { days, nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\nexport function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) {\n let days = daysParam;\n let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt;\n if (IsTemporalZonedDateTime(relativeTo)) {\n const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam);\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n }\n else {\n nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0);\n }\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n }\n else {\n days = 0;\n }\n const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n nanosecondsBigInt = abs(nanosecondsBigInt);\n microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n switch (largestUnit) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n break;\n case 'minute':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n break;\n case 'second':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n break;\n case 'millisecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n break;\n case 'microsecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n break;\n case 'nanosecond':\n break;\n default:\n throw new Error('assert not reached');\n }\n const hours = JSBI.toNumber(hoursBigInt) * sign;\n const minutes = JSBI.toNumber(minutesBigInt) * sign;\n const seconds = JSBI.toNumber(secondsBigInt) * sign;\n const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year':\n // no-op\n break;\n case 'month':\n {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance years down to months\n const dateAdd = calendar.dateAdd;\n const dateUntil = calendar.dateUntil;\n let relativeToDateOnly = relativeTo;\n while (MathAbs(years) > 0) {\n const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil);\n const oneYearMonths = GetSlot(untilResult, MONTHS);\n relativeToDateOnly = newRelativeTo;\n months += oneYearMonths;\n years -= sign;\n }\n }\n break;\n case 'week':\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance years down to days\n while (MathAbs(years) > 0) {\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n break;\n default:\n // balance years down to days\n while (MathAbs(years) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n // balance weeks down to days\n while (MathAbs(weeks) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n days += oneWeekDays;\n weeks -= sign;\n }\n break;\n }\n return { years, months, weeks, days };\n}\nexport function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n if (sign === 0)\n return { years, months, weeks, days };\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('a starting point is required for years balancing');\n // balance days up to years\n let newRelativeTo, oneYearDays;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n while (MathAbs(days) >= MathAbs(oneYearDays)) {\n days -= oneYearDays;\n years += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n }\n // balance days up to months\n let oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n // balance months up to years\n const dateAdd = calendar.dateAdd;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const dateUntil = calendar.dateUntil;\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n let oneYearMonths = GetSlot(untilResult, MONTHS);\n while (MathAbs(months) >= MathAbs(oneYearMonths)) {\n months -= oneYearMonths;\n years += sign;\n relativeTo = newRelativeTo;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n oneYearMonths = GetSlot(untilResult, MONTHS);\n }\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance days up to months\n let newRelativeTo, oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance days up to weeks\n let newRelativeTo, oneWeekDays;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n days -= oneWeekDays;\n weeks += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n break;\n }\n default:\n // no-op\n break;\n }\n return { years, months, weeks, days };\n}\nexport function CalculateOffsetShift(relativeTo, y, mon, w, d) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n const instant = GetSlot(relativeTo, INSTANT);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instantAfter = new TemporalInstant(after);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n return offsetAfter - offsetBefore;\n }\n return 0;\n}\nexport function CreateNegatedTemporalDuration(duration) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS));\n}\nexport function ConstrainToRange(value, min, max) {\n // Math.Max accepts undefined values and returns NaN. Undefined values are\n // used for optional params in the method below.\n return MathMin(max, MathMax(min, value));\n}\nfunction ConstrainISODate(year, monthParam, dayParam) {\n const month = ConstrainToRange(monthParam, 1, 12);\n const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n return { year, month, day };\n}\nfunction ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const hour = ConstrainToRange(hourParam, 0, 23);\n const minute = ConstrainToRange(minuteParam, 0, 59);\n const second = ConstrainToRange(secondParam, 0, 59);\n const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RejectToRange(value, min, max) {\n if (value < min || value > max)\n throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\nfunction RejectISODate(year, month, day) {\n RejectToRange(month, 1, 12);\n RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\nfunction RejectDateRange(year, month, day) {\n // Noon avoids trouble at edges of DateTime range (excludes midnight)\n RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\nexport function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(hour, 0, 23);\n RejectToRange(minute, 0, 59);\n RejectToRange(second, 0, 59);\n RejectToRange(millisecond, 0, 999);\n RejectToRange(microsecond, 0, 999);\n RejectToRange(nanosecond, 0, 999);\n}\nfunction RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectISODate(year, month, day);\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n // Reject any DateTime 24 hours or more outside the Instant range\n if ((year === YEAR_MIN &&\n null ==\n GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n (year === YEAR_MAX &&\n null ==\n GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) {\n throw new RangeError('DateTime outside of supported range');\n }\n}\nexport function ValidateEpochNanoseconds(epochNanoseconds) {\n if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n throw new RangeError('Instant outside of supported range');\n }\n}\nfunction RejectYearMonthRange(year, month) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n if (year === YEAR_MIN) {\n RejectToRange(month, 4, 12);\n }\n else if (year === YEAR_MAX) {\n RejectToRange(month, 1, 9);\n }\n}\nexport function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) {\n const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (!NumberIsFinite(prop))\n throw new RangeError('infinite values not allowed as duration fields');\n const propSign = MathSign(prop);\n if (propSign !== 0 && propSign !== sign)\n throw new RangeError('mixed-sign values not allowed as duration fields');\n }\n}\nexport function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) {\n switch (largestUnit) {\n case 'year':\n case 'month': {\n const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n if (sign === 0)\n return { years: 0, months: 0, weeks: 0, days: 0 };\n const start = { year: y1, month: m1, day: d1 };\n const end = { year: y2, month: m2, day: d2 };\n let years = end.year - start.year;\n let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months: 0, weeks: 0, days: 0 }\n : { years: 0, months: years * 12, weeks: 0, days: 0 };\n }\n let months = end.month - start.month;\n if (midSign !== sign) {\n years -= sign;\n months += sign * 12;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months, weeks: 0, days: 0 }\n : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n }\n if (midSign !== sign) {\n // The end date is later in the month than mid date (or earlier for\n // negative durations). Back up one month.\n months -= sign;\n if (months === -sign) {\n years -= sign;\n months = 11 * sign;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n }\n let days = 0;\n // If we get here, months and years are correct (no overflow), and `mid`\n // is within the range from `start` to `end`. To count the days between\n // `mid` and `end`, there are 3 cases:\n // 1) same month: use simple subtraction\n // 2) end is previous month from intermediate (negative duration)\n // 3) end is next month from intermediate (positive duration)\n if (mid.month === end.month) {\n // 1) same month: use simple subtraction\n days = end.day - mid.day;\n }\n else if (sign < 0) {\n // 2) end is previous month from intermediate (negative duration)\n // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n }\n else {\n // 3) end is next month from intermediate (positive duration)\n // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n }\n if (largestUnit === 'month') {\n months += years * 12;\n years = 0;\n }\n return { years, months, weeks: 0, days };\n }\n case 'week':\n case 'day': {\n let larger, smaller, sign;\n if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n smaller = { year: y1, month: m1, day: d1 };\n larger = { year: y2, month: m2, day: d2 };\n sign = 1;\n }\n else {\n smaller = { year: y2, month: m2, day: d2 };\n larger = { year: y1, month: m1, day: d1 };\n sign = -1;\n }\n let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n for (let year = smaller.year; year < larger.year; ++year) {\n days += LeapYear(year) ? 366 : 365;\n }\n let weeks = 0;\n if (largestUnit === 'week') {\n weeks = MathFloor(days / 7);\n days %= 7;\n }\n weeks *= sign;\n days *= sign;\n return { years: 0, months: 0, weeks, days };\n }\n default:\n throw new Error('assert not reached');\n }\n}\nfunction DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) {\n let hours = h2 - h1;\n let minutes = min2 - min1;\n let seconds = s2 - s1;\n let milliseconds = ms2 - ms1;\n let microseconds = µs2 - µs1;\n let nanoseconds = ns2 - ns1;\n const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n let deltaDays = 0;\n ({\n deltaDays,\n hour: hours,\n minute: minutes,\n second: seconds,\n millisecond: milliseconds,\n microsecond: microseconds,\n nanosecond: nanoseconds\n } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n if (deltaDays != 0)\n throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceInstant(ns1, ns2, increment, unit, roundingMode) {\n const diff = JSBI.subtract(ns2, ns1);\n const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(diff, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n const roundedDiff = JSBI.add(wholeDays, roundedRemainder);\n const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND));\n const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND));\n const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND));\n const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION));\n return { seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) {\n let y1 = y1Param;\n let mon1 = mon1Param;\n let d1 = d1Param;\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2);\n const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n if (dateSign === -timeSign) {\n ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const untilOptions = MergeLargestUnitOption(options, dateLargestUnit);\n // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n // Type 'SmallestUnit | undefined' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n // Type '\"hour\"' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions);\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) {\n const nsDiff = JSBI.subtract(ns2, ns1);\n if (JSBI.equal(nsDiff, ZERO)) {\n return {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n }\n // Find the difference in dates only.\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const start = new TemporalInstant(ns1);\n const end = new TemporalInstant(ns2);\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options);\n const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n // Finally, merge the date and time durations and return the merged result.\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour');\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// TODO: does it make sense to explicitly union the other and options types for each operation?\nexport function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) {\n const other = ToTemporalInstant(otherParam);\n let first, second;\n if (operation === 'until') {\n [first, second] = [instant, other];\n }\n else {\n [first, second] = [other, instant];\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ToTemporalRoundingMode(options, 'trunc');\n const MAX_DIFFERENCE_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false);\n const onens = GetSlot(first, EPOCHNANOSECONDS);\n const twons = GetSlot(second, EPOCHNANOSECONDS);\n let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode);\n let hours, minutes;\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDate(otherParam);\n const calendar = GetSlot(plainDate, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions);\n if (smallestUnit !== 'day' || roundingIncrement !== 1) {\n ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDateTime(otherParam);\n const calendar = GetSlot(plainDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options);\n const relativeTo = TemporalDateTimeToDate(plainDateTime);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalTime(otherParam);\n const options = GetOptionsObject(optionsParam);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'hour';\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalYearMonth(otherParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarID = ToString(calendar);\n const otherCalendarID = ToString(otherCalendar);\n if (calendarID !== otherCalendarID) {\n throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n if (c === 'date' && s !== 'week' && s !== 'day')\n allowed.push(s, p);\n return allowed;\n }, []);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month');\n if (smallestUnit === 'week' || smallestUnit === 'day') {\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'week' || largestUnit === 'day') {\n throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n }\n if (largestUnit === 'auto')\n largestUnit = 'year';\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const otherFields = PrepareTemporalFields(other, fieldNames, []);\n otherFields.day = 1;\n const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n thisFields.day = 1;\n // The calls to PrepareTemporalFields don't mark day as a required property,\n // and TS doesn't automatically narrow the type of the object because of the\n // assignments above, so we must \"cast\" the inputs.\n const otherDate = CalendarDateFromFields(calendar, otherFields);\n const thisDate = CalendarDateFromFields(calendar, thisFields);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions);\n if (smallestUnit !== 'month' || roundingIncrement !== 1) {\n ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalZonedDateTime(otherParam);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, \n // TODO this doesn't type-check as it includes >= day-size units\n // This is probably safe as the typing for ToSmallestTemporalUnit isn't\n // very good.\n smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n throw new RangeError(\"When calculating difference between time zones, largestUnit must be 'hours' \" +\n 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.');\n }\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n year += years;\n month += months;\n ({ year, month } = BalanceISOYearMonth(year, month));\n ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n days += 7 * weeks;\n day += days;\n ({ year, month, day } = BalanceISODate(year, month, day));\n return { year, month, day };\n}\nfunction AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n hour += hours;\n minute += minutes;\n second += seconds;\n millisecond += milliseconds;\n microsecond += microseconds;\n nanosecond += nanoseconds;\n let deltaDays = 0;\n ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond));\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) {\n const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (!relativeTo) {\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n }\n years = months = weeks = 0;\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else if (IsTemporalDate(relativeTo)) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n const dateAdd = calendar.dateAdd;\n const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const differenceOptions = ObjectCreate(null);\n differenceOptions.largestUnit = dateLargestUnit;\n ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else {\n // relativeTo is a ZonedDateTime\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate(null)));\n }\n }\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) {\n let sum = ZERO;\n sum = JSBI.add(sum, JSBI.BigInt(ns));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n const result = JSBI.add(epochNanoseconds, sum);\n ValidateEpochNanoseconds(result);\n return result;\n}\nfunction AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) {\n let days = daysParam;\n // Add the time part\n let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n days += deltaDays;\n // Delegate the date part addition to the calendar\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const datePart = CreateTemporalDate(year, month, day, calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n return {\n year: GetSlot(addedDate, ISO_YEAR),\n month: GetSlot(addedDate, ISO_MONTH),\n day: GetSlot(addedDate, ISO_DAY),\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond\n };\n}\nexport function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) {\n // If only time is to be added, then use Instant math. It's not OK to fall\n // through to the date/time code below because compatible disambiguation in\n // the PlainDateTime=>Instant conversion will change the offset of any\n // ZonedDateTime in the repeated clock time after a backwards transition.\n // When adding/subtracting time units and not dates, this disambiguation is\n // not expected and so is avoided below via a fast path for time-only\n // arithmetic.\n // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n }\n // RFC 5545 requires the date portion to be added in calendar days and the\n // time portion to be added in exact time.\n const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar);\n const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar);\n // Note that 'compatible' is used below because this disambiguation behavior\n // is required by RFC 5545.\n const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible');\n return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\nexport function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other);\n const options = GetOptionsObject(optionsParam);\n const relativeTo = ToRelativeTemporalObject(options);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n 'years',\n 'months',\n 'weeks',\n 'days'\n ]);\n const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ns);\n}\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(dateTime, CALENDAR);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'));\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) {\n let duration = ToTemporalDurationRecord(durationLike);\n if (operation === 'subtract') {\n duration = {\n years: -duration.years,\n months: -duration.months,\n weeks: -duration.weeks,\n days: -duration.days,\n hours: -duration.hours,\n minutes: -duration.minutes,\n seconds: -duration.seconds,\n milliseconds: -duration.milliseconds,\n microseconds: -duration.microseconds,\n nanoseconds: -duration.nanoseconds\n };\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1;\n // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n // and TS doesn't narrow the type as a result of the assignment above, so we\n // cast the fields input to the new type.\n const startDate = CalendarDateFromFields(calendar, fields);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const optionsCopy = ObjectAssign(ObjectCreate(null), options);\n const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options);\n const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nfunction RoundNumberToIncrement(quantity, increment, mode) {\n if (increment === 1)\n return quantity;\n let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment));\n if (JSBI.equal(remainder, ZERO))\n return quantity;\n const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n switch (mode) {\n case 'ceil':\n if (sign > 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'floor':\n if (sign < 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'trunc':\n // no change needed, because divmod is a truncation\n break;\n case 'halfExpand':\n // \"half up away from zero\"\n if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) {\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n }\n break;\n }\n return JSBI.multiply(quotient, JSBI.BigInt(increment));\n}\nexport function RoundInstant(epochNs, increment, unit, roundingMode) {\n // Note: NonNegativeModulo, but with BigInt\n let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9));\n if (JSBI.lessThan(remainder, ZERO))\n remainder = JSBI.add(remainder, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(epochNs, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n return JSBI.add(wholeDays, roundedRemainder);\n}\nexport function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n let quantity = ZERO;\n switch (unit) {\n case 'day':\n case 'hour':\n quantity = JSBI.BigInt(hour);\n // fall through\n case 'minute':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n // fall through\n case 'second':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n // fall through\n case 'millisecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n // fall through\n case 'microsecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n // fall through\n case 'nanosecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n }\n const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode);\n const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n switch (unit) {\n case 'day':\n return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n case 'hour':\n return BalanceTime(result, 0, 0, 0, 0, 0);\n case 'minute':\n return BalanceTime(hour, result, 0, 0, 0, 0);\n case 'second':\n return BalanceTime(hour, minute, result, 0, 0, 0);\n case 'millisecond':\n return BalanceTime(hour, minute, second, result, 0, 0);\n case 'microsecond':\n return BalanceTime(hour, minute, second, millisecond, result, 0);\n case 'nanosecond':\n return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n default:\n throw new Error(`Invalid unit ${unit}`);\n }\n}\nfunction DaysUntil(earlier, later) {\n return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days;\n}\nfunction MoveRelativeDate(calendar, relativeToParam, duration) {\n const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined);\n const days = DaysUntil(relativeToParam, later);\n return { relativeTo: later, days };\n}\nexport function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) {\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\nexport function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (!IsTemporalZonedDateTime(relativeTo) ||\n unit === 'year' ||\n unit === 'month' ||\n unit === 'week' ||\n unit === 'day' ||\n (unit === 'nanosecond' && increment === 1)) {\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n }\n // There's one more round of rounding possible: if relativeTo is a\n // ZonedDateTime, the time units could have rounded up into enough hours\n // to exceed the day length. If this happens, grow the date part by a\n // single day and re-run exact time rounding on the smaller remainder. DO\n // NOT RECURSE, because once the extra hours are sucked up into the date\n // duration, there's no way for another full day to come from the next\n // round of rounding. And if it were possible (e.g. contrived calendar\n // with 30-minute-long \"days\") then it'd risk an infinite loop.\n let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0);\n const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) {\n ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo));\n timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'));\n }\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n let calendar, zdtRelative;\n // A cast is used below because relativeTo will be either PlainDate or\n // undefined for the rest of this long method (after any ZDT=>PlainDate\n // conversion below), and TS isn't smart enough to know that the type has\n // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n let relativeTo = relativeToParam;\n if (relativeTo) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n zdtRelative = relativeTo;\n relativeTo = ToTemporalDate(relativeTo);\n }\n else if (!IsTemporalDate(relativeTo)) {\n throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n }\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n // First convert time units up to days, if rounding to days or higher units.\n // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n // larger. We'll cast away `undefined` when it's used lower down below.\n let dayLengthNs;\n if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n let intermediate;\n if (zdtRelative) {\n intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n }\n let deltaDays;\n let dayLength;\n ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n dayLengthNs = JSBI.BigInt(dayLength);\n days += deltaDays;\n hours = minutes = seconds = milliseconds = microseconds = 0;\n }\n let total;\n switch (unit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('A starting point is required for years rounding');\n // convert months and weeks to days by calculating difference(\n // relativeTo + years, relativeTo + { years, months, weeks })\n const yearsDuration = new TemporalDuration(years);\n const dateAdd = calendar.dateAdd;\n const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n relativeTo = yearsLater;\n days += monthsWeeksInDays;\n const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'year';\n const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years;\n years += yearsPassed;\n const oldRelativeTo = relativeTo;\n relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd);\n const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n days -= daysPassed;\n const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear);\n // Note that `nanoseconds` below (here and in similar code for months,\n // weeks, and days further below) isn't actually nanoseconds for the\n // full date range. Instead, it's a BigInt representation of total\n // days multiplied by the number of nanoseconds in the last day of\n // the duration. This lets us do days-or-larger rounding using BigInt\n // math which reduces precision loss.\n oneYearDays = MathAbs(oneYearDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n months = weeks = days = 0;\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('A starting point is required for months rounding');\n // convert weeks to days by calculating difference(relativeTo +\n // { years, months }, relativeTo + { years, months, weeks })\n const yearsMonths = new TemporalDuration(years, months);\n const dateAdd = calendar.dateAdd;\n const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n relativeTo = yearsMonthsLater;\n days += weeksInDays;\n // Months may be different lengths of days depending on the calendar,\n // convert days to months in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n months += sign;\n days -= oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n oneMonthDays = MathAbs(oneMonthDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n weeks = days = 0;\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('A starting point is required for weeks rounding');\n // Weeks may be different lengths of days depending on the calendar,\n // convert days to weeks in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n weeks += sign;\n days -= oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n oneWeekDays = MathAbs(oneWeekDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n days = 0;\n break;\n }\n case 'day': {\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = dayLengthNs;\n nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n break;\n }\n case 'hour': {\n const divisor = 3600e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n minutes = seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'minute': {\n const divisor = 60e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'second': {\n const divisor = 1e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n milliseconds = microseconds = 0;\n break;\n }\n case 'millisecond': {\n const divisor = 1e6;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n microseconds = 0;\n break;\n }\n case 'microsecond': {\n const divisor = 1e3;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n break;\n }\n case 'nanosecond': {\n total = JSBI.toNumber(nanoseconds);\n nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode);\n break;\n }\n }\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n microseconds,\n nanoseconds: JSBI.toNumber(nanoseconds),\n total\n };\n}\nexport function CompareISODate(y1, m1, d1, y2, m2, d2) {\n for (const [x, y] of [\n [y1, y2],\n [m1, m2],\n [d1, d2]\n ]) {\n if (x !== y)\n return ComparisonResult(x - y);\n }\n return 0;\n}\nfunction NonNegativeModulo(x, y) {\n let result = x % y;\n if (ObjectIs(result, -0))\n return 0;\n if (result < 0)\n result += y;\n return result;\n}\nexport function ToBigIntExternal(arg) {\n const jsbiBI = ToBigInt(arg);\n if (typeof globalThis.BigInt !== 'undefined')\n return globalThis.BigInt(jsbiBI.toString(10));\n return jsbiBI;\n}\nexport function ToBigInt(arg) {\n if (arg instanceof JSBI) {\n return arg;\n }\n let prim = arg;\n if (typeof arg === 'object') {\n const toPrimFn = arg[Symbol.toPrimitive];\n if (toPrimFn && typeof toPrimFn === 'function') {\n prim = ReflectApply(toPrimFn, arg, ['number']);\n }\n }\n switch (typeof prim) {\n case 'undefined':\n case 'object':\n case 'number':\n case 'symbol':\n default:\n throw new TypeError(`cannot convert ${typeof arg} to bigint`);\n case 'string':\n if (!prim.match(/^\\s*(?:[+-]?\\d+\\s*)?$/)) {\n throw new SyntaxError('invalid BigInt syntax');\n }\n // eslint: no-fallthrough: false\n case 'bigint':\n try {\n return JSBI.BigInt(prim.toString());\n }\n catch (e) {\n if (e instanceof Error && e.message.startsWith('Invalid integer'))\n throw new SyntaxError(e.message);\n throw e;\n }\n case 'boolean':\n if (prim) {\n return ONE;\n }\n else {\n return ZERO;\n }\n }\n}\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds = (() => {\n let ns = JSBI.BigInt(Date.now() % 1e6);\n return () => {\n const ms = JSBI.BigInt(Date.now());\n const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n ns = JSBI.remainder(ms, MILLION);\n if (JSBI.greaterThan(result, NS_MAX))\n return NS_MAX;\n if (JSBI.lessThan(result, NS_MIN))\n return NS_MIN;\n return result;\n };\n})();\nexport function SystemTimeZone() {\n const fmt = new IntlDateTimeFormat('en-us');\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone));\n}\nexport function ComparisonResult(value) {\n return value < 0 ? -1 : value > 0 ? 1 : value;\n}\nexport function GetOptionsObject(options) {\n if (options === undefined)\n return ObjectCreate(null);\n if (IsObject(options) && options !== null)\n return options;\n throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\nexport function CreateOnePropObject(propName, propValue) {\n const o = ObjectCreate(null);\n o[propName] = propValue;\n return o;\n}\nfunction GetOption(options, property, allowedValues, fallback) {\n let value = options[property];\n if (value !== undefined) {\n value = ToString(value);\n if (!allowedValues.includes(value)) {\n throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n }\n return value;\n }\n return fallback;\n}\nfunction GetNumberOption(options, property, minimum, maximum, fallback) {\n let valueRaw = options[property];\n if (valueRaw === undefined)\n return fallback;\n const value = ToNumber(valueRaw);\n if (NumberIsNaN(value) || value < minimum || value > maximum) {\n throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`);\n }\n return MathFloor(value);\n}\nexport function IsBuiltinCalendar(id) {\n return ArrayIncludes.call(BUILTIN_CALENDAR_IDS, id);\n}\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\nfunction bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) {\n // This doesn't make much sense - why do these get converted unnecessarily?\n let left = JSBI.BigInt(leftParam);\n let right = JSBI.BigInt(rightParam);\n let lstate = lstateParam;\n let rstate = rstateParam;\n while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n const mstate = getState(middle);\n if (mstate === lstate) {\n left = middle;\n lstate = mstate;\n }\n else if (mstate === rstate) {\n right = middle;\n rstate = mstate;\n }\n else {\n throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n }\n }\n return right;\n}\nconst nsPerTimeUnit = {\n hour: 3600e9,\n minute: 60e9,\n second: 1e9,\n millisecond: 1e6,\n microsecond: 1e3,\n nanosecond: 1\n};\n//# sourceMappingURL=ecmascript.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { GetSlot, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, TIME_ZONE } from './slots';\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst ZONED = Symbol('zoneddatetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst TZ_GIVEN = Symbol('timezone-id-given');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\nconst descriptor = (value) => {\n return {\n value,\n enumerable: true,\n writable: false,\n configurable: true\n };\n};\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy(obj, prop) {\n let val = obj[prop];\n if (typeof val === 'function') {\n // If we get here, `val` is an \"amender function\". It will take the user's\n // options and transform them into suitable options to be passed into the\n // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n // will vary depending on the Temporal type, so that's why we store separate\n // formatters in separate props on the polyfill's DateTimeFormat instances.\n // The efficiency happens because we don't create an (expensive) formatter\n // until the user calls toLocaleString for that Temporal type.\n val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n // TODO: can this be typed more cleanly?\n obj[prop] = val;\n }\n return val;\n}\n// Similarly, lazy-init TimeZone instances.\nfunction getResolvedTimeZoneLazy(obj) {\n let val = obj[TZ_RESOLVED];\n if (typeof val === 'string') {\n val = ES.ToTemporalTimeZone(val);\n obj[TZ_RESOLVED] = val;\n }\n return val;\n}\nfunction DateTimeFormatImpl(locale = undefined, optionsParam = {}) {\n if (!(this instanceof DateTimeFormatImpl)) {\n return new DateTimeFormatImpl(locale, optionsParam);\n }\n const hasOptions = typeof optionsParam !== 'undefined';\n const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n // TODO: remove type assertion after Temporal types land in TS lib types\n const original = new IntlDateTimeFormat(locale, options);\n const ro = original.resolvedOptions();\n // DateTimeFormat instances are very expensive to create. Therefore, they will\n // be lazily created only when needed, using the locale and options provided.\n // But it's possible for callers to mutate those inputs before lazy creation\n // happens. For this reason, we clone the inputs instead of caching the\n // original objects. To avoid the complexity of deep cloning any inputs that\n // are themselves objects (e.g. the locales array, or options property values\n // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n // coercion and cloning for us. Unfortunately, we can't just use the resolved\n // options as-is because our options-amending logic adds additional fields if\n // the user doesn't supply any unit fields like year, month, day, hour, etc.\n // Therefore, we limit the properties in the clone to properties that were\n // present in the original input.\n if (hasOptions) {\n const clonedResolved = ObjectAssign({}, ro);\n for (const prop in clonedResolved) {\n if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n delete clonedResolved[prop];\n }\n }\n this[OPTIONS] = clonedResolved;\n }\n else {\n this[OPTIONS] = options;\n }\n this[TZ_GIVEN] = options.timeZone ? options.timeZone : null;\n this[LOCALE] = ro.locale;\n this[ORIGINAL] = original;\n this[TZ_RESOLVED] = ro.timeZone;\n this[CAL_ID] = ro.calendar;\n this[DATE] = dateAmend;\n this[YM] = yearMonthAmend;\n this[MD] = monthDayAmend;\n this[TIME] = timeAmend;\n this[DATETIME] = datetimeAmend;\n this[ZONED] = zonedDateTimeAmend;\n this[INST] = instantAmend;\n return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n writable: true,\n value: 'DateTimeFormat'\n});\nDateTimeFormatImpl.supportedLocalesOf = function (locales, options) {\n return IntlDateTimeFormat.supportedLocalesOf(locales, options);\n};\nconst propertyDescriptors = {\n resolvedOptions: descriptor(resolvedOptions),\n format: descriptor(format),\n formatRange: descriptor(formatRange)\n};\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n writable: false,\n enumerable: false,\n configurable: false\n});\nexport const DateTimeFormat = DateTimeFormatImpl;\nfunction resolvedOptions() {\n return this[ORIGINAL].resolvedOptions();\n}\nfunction adjustFormatterTimeZone(formatter, timeZone) {\n if (!timeZone)\n return formatter;\n const options = formatter.resolvedOptions();\n if (options.timeZone === timeZone)\n return formatter;\n // Existing Intl isn't typed to accept Temporal-specific options and the lib\n // types for resolved options are less restrictive than the types for options.\n // For example, `weekday` is\n // `'long' | 'short' | 'narrow'` in options but `string` in resolved options.\n // TODO: investigate why, and file an issue against TS if it's a bug.\n if (options['dateStyle'] || options['timeStyle']) {\n // Unfortunately, Safari's resolvedOptions include parameters that will\n // cause errors at runtime if passed along with\n // dateStyle or timeStyle options as per\n // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components.\n // This has been fixed in newer versions of Safari:\n // https://bugs.webkit.org/show_bug.cgi?id=231041\n delete options['weekday'];\n delete options['era'];\n delete options['year'];\n delete options['month'];\n delete options['day'];\n delete options['hour'];\n delete options['minute'];\n delete options['second'];\n delete options['timeZoneName'];\n delete options['hourCycle'];\n delete options['hour12'];\n delete options['dayPeriod'];\n }\n return new IntlDateTimeFormat(options.locale, { ...options, timeZone });\n}\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.format(instant.epochMilliseconds);\n }\n return this[ORIGINAL].format(datetime, ...rest);\n}\nfunction formatToParts(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.formatToParts(instant.epochMilliseconds);\n }\n return this[ORIGINAL].formatToParts(datetime, ...rest);\n}\nfunction formatRange(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRange(a, b);\n}\nfunction formatRangeToParts(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRangeToParts(a, b);\n}\nfunction amend(optionsParam = {}, amended = {}) {\n const options = ObjectAssign({}, optionsParam);\n for (const opt of [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'weekday',\n 'dayPeriod',\n 'timeZoneName',\n 'dateStyle',\n 'timeStyle'\n ]) {\n options[opt] = opt in amended ? amended[opt] : options[opt];\n if (options[opt] === false || options[opt] === undefined)\n delete options[opt];\n }\n return options;\n}\nfunction timeAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n month: false,\n day: false,\n weekday: false,\n timeZoneName: false,\n dateStyle: false\n });\n if (!hasTimeOptions(options)) {\n options = ObjectAssign({}, options, {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction yearMonthAmend(optionsParam) {\n let options = amend(optionsParam, {\n day: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('year' in options || 'month' in options)) {\n options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n }\n return options;\n}\nfunction monthDayAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('month' in options || 'day' in options)) {\n options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n }\n return options;\n}\nfunction dateAmend(optionsParam) {\n let options = amend(optionsParam, {\n hour: false,\n minute: false,\n second: false,\n dayPeriod: false,\n timeZoneName: false,\n timeStyle: false\n });\n if (!hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n });\n }\n return options;\n}\nfunction datetimeAmend(optionsParam) {\n let options = amend(optionsParam, { timeZoneName: false });\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction zonedDateTimeAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n if (options.timeZoneName === undefined)\n options.timeZoneName = 'short';\n }\n return options;\n}\nfunction instantAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction hasDateOptions(options) {\n return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\nfunction hasTimeOptions(options) {\n return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options);\n}\nfunction isTemporalObject(obj) {\n return (ES.IsTemporalDate(obj) ||\n ES.IsTemporalTime(obj) ||\n ES.IsTemporalDateTime(obj) ||\n ES.IsTemporalZonedDateTime(obj) ||\n ES.IsTemporalYearMonth(obj) ||\n ES.IsTemporalMonthDay(obj) ||\n ES.IsTemporalInstant(obj));\n}\nfunction sameTemporalType(x, y) {\n if (!isTemporalObject(x) || !isTemporalObject(y))\n return false;\n if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y))\n return false;\n if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y))\n return false;\n if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y))\n return false;\n if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y))\n return false;\n if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y))\n return false;\n if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y))\n return false;\n if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y))\n return false;\n return true;\n}\nfunction extractOverrides(temporalObj, main) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n if (ES.IsTemporalTime(temporalObj)) {\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, TIME)\n };\n }\n if (ES.IsTemporalYearMonth(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, YM)\n };\n }\n if (ES.IsTemporalMonthDay(temporalObj)) {\n const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, MD)\n };\n }\n if (ES.IsTemporalDate(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATE)\n };\n }\n if (ES.IsTemporalDateTime(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n let datetime = temporalObj;\n if (calendar === 'iso8601') {\n datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n }\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATETIME)\n };\n }\n if (ES.IsTemporalZonedDateTime(temporalObj)) {\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const timeZone = GetSlot(temporalObj, TIME_ZONE);\n const objTimeZone = ES.ToString(timeZone);\n if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) {\n throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`);\n }\n return {\n instant: GetSlot(temporalObj, INSTANT),\n formatter: getPropLazy(main, ZONED),\n timeZone: objTimeZone\n };\n }\n if (ES.IsTemporalInstant(temporalObj)) {\n return {\n instant: temporalObj,\n formatter: getPropLazy(main, INST)\n };\n }\n return {};\n}\n//# sourceMappingURL=intl.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\nexport class Instant {\n constructor(epochNanoseconds) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const ns = ES.ToBigInt(epochNanoseconds);\n ES.ValidateEpochNanoseconds(ns);\n CreateSlots(this);\n SetSlot(this, EPOCHNANOSECONDS, ns);\n if (DEBUG) {\n const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${repr}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get epochSeconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n hour: 24,\n minute: 1440,\n second: 86400,\n millisecond: 86400e3,\n microsecond: 86400e6,\n nanosecond: 86400e9\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true);\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n return new Instant(roundedNs);\n }\n equals(otherParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalInstant(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n let timeZone = options.timeZone;\n if (timeZone !== undefined)\n timeZone = ES.ToTemporalTimeZone(timeZone);\n // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n const roundedInstant = new Instant(roundedNs);\n return ES.TemporalInstantToString(roundedInstant, timeZone, precision);\n }\n toJSON() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalInstantToString(this, undefined, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument in toZonedDateTime');\n }\n const calendarLike = item.calendar;\n if (calendarLike === undefined) {\n throw new TypeError('missing calendar property in toZonedDateTime');\n }\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const temporalTimeZoneLike = item.timeZone;\n if (temporalTimeZoneLike === undefined) {\n throw new TypeError('missing timeZone property in toZonedDateTime');\n }\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toZonedDateTimeISO(itemParam) {\n let item = itemParam;\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (ES.IsObject(item)) {\n const timeZoneProperty = item.timeZone;\n if (timeZoneProperty !== undefined) {\n item = timeZoneProperty;\n }\n }\n const timeZone = ES.ToTemporalTimeZone(item);\n const calendar = ES.GetISO8601Calendar();\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n static fromEpochSeconds(epochSecondsParam) {\n const epochSeconds = ES.ToNumber(epochSecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMilliseconds(epochMillisecondsParam) {\n const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMicroseconds(epochMicrosecondsParam) {\n const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochNanoseconds(epochNanosecondsParam) {\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static from(item) {\n if (ES.IsTemporalInstant(item)) {\n return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n }\n return ES.ToTemporalInstant(item);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalInstant(oneParam);\n const two = ES.ToTemporalInstant(twoParam);\n const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(oneNs, twoNs))\n return -1;\n if (JSBI.greaterThan(oneNs, twoNs))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n//# sourceMappingURL=instant.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport { CALENDAR_ID, ISO_YEAR, ISO_MONTH, ISO_DAY, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, HasSlot, SetSlot } from './slots';\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectEntries = Object.entries;\nconst ObjectKeys = Object.keys;\n/**\n * Implementations for each calendar. Non-ISO calendars have an extra `helper`\n * property that provides additional per-calendar logic.\n */\nconst impl = {};\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n * PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar {\n constructor(idParam) {\n // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n // exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: id is required');\n }\n const id = ES.ToString(idParam);\n if (!ES.IsBuiltinCalendar(id))\n throw new RangeError(`invalid calendar identifier ${id}`);\n CreateSlots(this);\n SetSlot(this, CALENDAR_ID, id);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${id}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n dateFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this);\n }\n yearMonthFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this);\n }\n monthDayFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this);\n }\n fields(fields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const fieldsArray = [];\n const allowed = new Set([\n 'year',\n 'month',\n 'monthCode',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n 'microsecond',\n 'nanosecond'\n ]);\n for (const name of fields) {\n if (typeof name !== 'string')\n throw new TypeError('invalid fields');\n if (!allowed.has(name))\n throw new RangeError(`invalid field name ${name}`);\n allowed.delete(name);\n ArrayPrototypePush.call(fieldsArray, name);\n }\n return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n }\n mergeFields(fields, additionalFields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields);\n }\n dateAdd(dateParam, durationParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n const duration = ES.ToTemporalDuration(durationParam);\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const { days } = ES.BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day');\n return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this);\n }\n dateUntil(oneParam, twoParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'day';\n const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n }\n year(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].year(date);\n }\n month(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (ES.IsTemporalMonthDay(date))\n throw new TypeError('use monthCode on PlainMonthDay instead');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].month(date);\n }\n monthCode(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthCode(date);\n }\n day(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].day(date);\n }\n era(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].era(date);\n }\n eraYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].eraYear(date);\n }\n dayOfWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n }\n dayOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n }\n weekOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n }\n daysInWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n }\n daysInMonth(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date);\n }\n daysInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date);\n }\n monthsInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date);\n }\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date);\n }\n toString() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR_ID);\n }\n toJSON() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalCalendar(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month, day } = fields;\n ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month } = fields;\n ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n return ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1);\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n throw new TypeError('either year or monthCode required with month');\n }\n const useYear = fields.monthCode === undefined;\n const referenceISOYear = 1972;\n fields = resolveNonLunisolarMonth(fields);\n let { month, day, year } = fields;\n ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n return ES.CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n },\n fields(fields) {\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const merged = {};\n for (const nextKey of ObjectKeys(fields)) {\n if (nextKey === 'month' || nextKey === 'monthCode')\n continue;\n merged[nextKey] = fields[nextKey];\n }\n const newKeys = ObjectKeys(additionalFields);\n for (const nextKey of newKeys) {\n merged[nextKey] = additionalFields[nextKey];\n }\n if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) {\n const { month, monthCode } = fields;\n if (month !== undefined)\n merged.month = month;\n if (monthCode !== undefined)\n merged.monthCode = monthCode;\n }\n return merged;\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n let year = GetSlot(date, ISO_YEAR);\n let month = GetSlot(date, ISO_MONTH);\n let day = GetSlot(date, ISO_DAY);\n ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n dateUntil(one, two, largestUnit) {\n return ES.DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit);\n },\n year(date) {\n return GetSlot(date, ISO_YEAR);\n },\n era() {\n return undefined;\n },\n eraYear() {\n return undefined;\n },\n month(date) {\n return GetSlot(date, ISO_MONTH);\n },\n monthCode(date) {\n return buildMonthCode(GetSlot(date, ISO_MONTH));\n },\n day(date) {\n return GetSlot(date, ISO_DAY);\n },\n dayOfWeek(date) {\n return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n dayOfYear(date) {\n return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n weekOfYear(date) {\n return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n daysInWeek() {\n return 7;\n },\n daysInMonth(date) {\n return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n },\n monthsInYear() {\n return 12;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR));\n }\n};\nfunction monthCodeNumberPart(monthCode) {\n if (!monthCode.startsWith('M')) {\n throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`);\n }\n const month = +monthCode.slice(1);\n if (isNaN(month))\n throw new RangeError(`Invalid month code: ${monthCode}`);\n return month;\n}\nfunction buildMonthCode(month, leap = false) {\n return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) {\n let { month, monthCode } = calendarDate;\n if (monthCode === undefined) {\n if (month === undefined)\n throw new TypeError('Either month or monthCode are required');\n // The ISO calendar uses the default (undefined) value because it does\n // constrain/reject after this method returns. Non-ISO calendars, however,\n // rely on this function to constrain/reject out-of-range `month` values.\n if (overflow === 'reject')\n ES.RejectToRange(month, 1, monthsPerYear);\n if (overflow === 'constrain')\n month = ES.ConstrainToRange(month, 1, monthsPerYear);\n monthCode = buildMonthCode(month);\n }\n else {\n const numberPart = monthCodeNumberPart(monthCode);\n if (month !== undefined && month !== numberPart) {\n throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n }\n if (monthCode !== buildMonthCode(numberPart)) {\n throw new RangeError(`Invalid month code: ${monthCode}`);\n }\n month = numberPart;\n if (month < 1 || month > monthsPerYear)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n return { ...calendarDate, month, monthCode };\n}\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance. No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n constructor(cacheToClone) {\n this.map = new Map();\n this.calls = 0;\n this.hits = 0;\n this.misses = 0;\n this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n if (cacheToClone !== undefined) {\n let i = 0;\n for (const entry of cacheToClone.map.entries()) {\n if (++i > OneObjectCache.MAX_CACHE_ENTRIES)\n break;\n this.map.set(...entry);\n }\n }\n }\n get(key) {\n const result = this.map.get(key);\n if (result) {\n this.hits++;\n this.report();\n }\n this.calls++;\n return result;\n }\n set(key, value) {\n this.map.set(key, value);\n this.misses++;\n this.report();\n }\n report() {\n /*\n if (this.calls === 0) return;\n const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n */\n }\n setObject(obj) {\n if (OneObjectCache.objectMap.get(obj))\n throw new RangeError('object already cached');\n OneObjectCache.objectMap.set(obj, this);\n this.report();\n }\n /**\n * Returns a WeakMap-backed cache that's used to store expensive results\n * that are associated with a particular Temporal object instance.\n *\n * @param obj - object to associate with the cache\n */\n static getCacheForObject(obj) {\n let cache = OneObjectCache.objectMap.get(obj);\n if (!cache) {\n cache = new OneObjectCache();\n OneObjectCache.objectMap.set(obj, cache);\n }\n return cache;\n }\n}\nOneObjectCache.objectMap = new WeakMap();\nOneObjectCache.MAX_CACHE_ENTRIES = 1000;\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }) {\n const yearString = ES.ISOYearString(isoYear);\n const monthString = ES.ISODateTimePartString(isoMonth);\n const dayString = ES.ISODateTimePartString(isoDay);\n return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\nfunction simpleDateDiff(one, two) {\n return {\n years: one.year - two.year,\n months: one.month - two.month,\n days: one.day - two.day\n };\n}\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nclass HelperBase {\n constructor() {\n // The short era format works for all calendars except Japanese, which will\n // override.\n this.eraLength = 'short';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = true;\n }\n getFormatter() {\n // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n // calendars that are used. Note that the nonIsoHelperBase object is spread\n // into each each calendar's implementation before any cache is created, so\n // each calendar gets its own separate cached formatter.\n if (typeof this.formatter === 'undefined') {\n this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n era: this.eraLength,\n timeZone: 'UTC'\n });\n }\n return this.formatter;\n }\n isoToCalendarDate(isoDate, cache) {\n const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n let parts, isoString;\n try {\n isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n parts = dateTimeFormat.formatToParts(new Date(isoString));\n }\n catch (e) {\n throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n }\n const result = {};\n for (let { type, value } of parts) {\n if (type === 'year')\n result.eraYear = +value;\n // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n if (type === 'relatedYear')\n result.eraYear = +value;\n if (type === 'month') {\n const matches = /^([0-9]*)(.*?)$/.exec(value);\n if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n throw new RangeError(`Unexpected month: ${value}`);\n }\n // If the month has no numeric part (should only see this for the Hebrew\n // calendar with newer FF / Chromium versions; see\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n // placeholder month index of `1` and rely on the derived class to\n // calculate the correct month index from the month name stored in\n // `monthExtra`.\n result.month = matches[1] ? +matches[1] : 1;\n if (result.month < 1) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)');\n }\n if (result.month > 13) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n // The ICU formats for the Hebrew calendar no longer support a numeric\n // month format. So we'll rely on the derived class to interpret it.\n // `monthExtra` is also used on the Chinese calendar to handle a suffix\n // \"bis\" indicating a leap month.\n if (matches[2])\n result.monthExtra = matches[2];\n }\n if (type === 'day')\n result.day = +value;\n if (this.hasEra && type === 'era' && value != null && value !== '') {\n // The convention for Temporal era values is lowercase, so following\n // that convention in this prototype. Punctuation is removed, accented\n // letters are normalized, and spaces are replaced with dashes.\n // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n // The call to normalize() and the replacement regex deals with era\n // names that contain non-ASCII characters like Japanese eras. Also\n // ignore extra content in parentheses like JPN era date ranges.\n value = value.split(' (')[0];\n result.era = value\n .normalize('NFD')\n .replace(/[^-0-9 \\p{L}]/gu, '')\n .replace(' ', '-')\n .toLowerCase();\n }\n }\n if (result.eraYear === undefined) {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n // Translate eras that may be handled differently by Temporal vs. by Intl\n // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n if (this.reviseIntlEra) {\n const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n result.era = era;\n result.eraYear = eraYear;\n }\n if (this.checkIcuBugs)\n this.checkIcuBugs(isoDate);\n const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n if (calendarDate.year === undefined)\n throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.month === undefined)\n throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.day === undefined)\n throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n cache.set(key, calendarDate);\n // Also cache the reverse mapping\n ['constrain', 'reject'].forEach((overflow) => {\n const keyReverse = JSON.stringify({\n func: 'calendarToIsoDate',\n year: calendarDate.year,\n month: calendarDate.month,\n day: calendarDate.day,\n overflow,\n id: this.id\n });\n cache.set(keyReverse, isoDate);\n });\n return calendarDate;\n }\n validateCalendarDate(calendarDate) {\n const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n // the derived class must deal with it.\n if (monthExtra !== undefined)\n throw new RangeError('Unexpected `monthExtra` value');\n if (year === undefined && eraYear === undefined)\n throw new TypeError('year or eraYear is required');\n if (month === undefined && monthCode === undefined)\n throw new TypeError('month or monthCode is required');\n if (day === undefined)\n throw new RangeError('Missing day');\n if (monthCode !== undefined) {\n if (typeof monthCode !== 'string') {\n throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n }\n if (!/^M([01]?\\d)(L?)$/.test(monthCode))\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n if (this.constantEra) {\n if (era !== undefined && era !== this.constantEra) {\n throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n }\n if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n }\n }\n }\n /**\n * Allows derived calendars to add additional fields and/or to make\n * adjustments e.g. to set the era based on the date or to revise the month\n * number in lunisolar calendars per\n * https://github.com/tc39/proposal-temporal/issues/1203.\n *\n * The base implementation fills in missing values by assuming the simplest\n * possible calendar:\n * - no eras or a constant era defined in `.constantEra`\n * - non-lunisolar calendar (no leap months)\n * */\n adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', \n // This param is only used by derived classes\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromLegacyDate = false) {\n if (this.calendarType === 'lunisolar')\n throw new RangeError('Override required for lunisolar calendars');\n let calendarDate = calendarDateParam;\n this.validateCalendarDate(calendarDate);\n // For calendars that always use the same era, set it here so that derived\n // calendars won't need to implement this method simply to set the era.\n if (this.constantEra) {\n // year and eraYear always match when there's only one possible era\n const { year, eraYear } = calendarDate;\n calendarDate = {\n ...calendarDate,\n era: this.constantEra,\n year: year !== undefined ? year : eraYear,\n eraYear: eraYear !== undefined ? eraYear : year\n };\n }\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, monthCode } = calendarDate;\n ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n return { ...calendarDate, month, monthCode };\n }\n regulateMonthDayNaive(calendarDate, overflow, cache) {\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, day } = calendarDate;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n }\n return { ...calendarDate, month, day };\n }\n calendarToIsoDate(dateParam, overflow = 'constrain', cache) {\n const originalDate = dateParam;\n // First, normalize the calendar date to ensure that (year, month, day)\n // are all present, converting monthCode and eraYear if needed.\n let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n // Fix obviously out-of-bounds values. Values that are valid generally, but\n // not in this particular year, may not be caught here for some calendars.\n // If so, these will be handled lower below.\n date = this.regulateMonthDayNaive(date, overflow, cache);\n const { year, month, day } = date;\n const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n let cached = cache.get(key);\n if (cached)\n return cached;\n // If YMD are present in the input but the input has been constrained\n // already, then cache both the original value and the constrained value.\n let keyOriginal;\n if (originalDate.year !== undefined &&\n originalDate.month !== undefined &&\n originalDate.day !== undefined &&\n (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) {\n keyOriginal = JSON.stringify({\n func: 'calendarToIsoDate',\n year: originalDate.year,\n month: originalDate.month,\n day: originalDate.day,\n overflow,\n id: this.id\n });\n cached = cache.get(keyOriginal);\n if (cached)\n return cached;\n }\n // First, try to roughly guess the result\n let isoEstimate = this.estimateIsoDate({ year, month, day });\n const calculateSameMonthResult = (diffDays) => {\n // If the estimate is in the same year & month as the target, then we can\n // calculate the result exactly and short-circuit any additional logic.\n // This optimization assumes that months are continuous. It would break if\n // a calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So\n // this optimization should be safe for all ICU calendars.\n let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n if (date.day > this.minimumMonthLength(date)) {\n // There's a chance that the calendar date is out of range. Throw or\n // constrain if so.\n let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n if (overflow === 'reject') {\n throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n }\n // Back up a day at a time until we're not hanging over the month end\n testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n }\n }\n return testIsoEstimate;\n };\n let sign = 0;\n let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n let diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n }\n else {\n sign = this.compareCalendarDates(date, roundtripEstimate);\n }\n }\n // If the initial guess is not in the same month, then then bisect the\n // distance to the target, starting with 8 days per step.\n let increment = 8;\n let maybeConstrained = false;\n while (sign) {\n isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n const oldRoundtripEstimate = roundtripEstimate;\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n const oldSign = sign;\n sign = this.compareCalendarDates(date, roundtripEstimate);\n if (sign) {\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n // Signal the loop condition that there's a match.\n sign = 0;\n // If the calendar day is larger than the minimal length for this\n // month, then it might be larger than the actual length of the month.\n // So we won't cache it as the correct calendar date for this ISO\n // date.\n maybeConstrained = date.day > this.minimumMonthLength(date);\n }\n else if (oldSign && sign !== oldSign) {\n if (increment > 1) {\n // If the estimate overshot the target, try again with a smaller increment\n // in the reverse direction.\n increment /= 2;\n }\n else {\n // Increment is 1, and neither the previous estimate nor the new\n // estimate is correct. The only way that can happen is if the\n // original date was an invalid value that will be constrained or\n // rejected here.\n if (overflow === 'reject') {\n throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n }\n else {\n // To constrain, pick the earliest value\n const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n // If current value is larger, then back up to the previous value.\n if (order > 0)\n isoEstimate = this.addDaysIso(isoEstimate, -1);\n maybeConstrained = true;\n sign = 0;\n }\n }\n }\n }\n }\n cache.set(key, isoEstimate);\n if (keyOriginal)\n cache.set(keyOriginal, isoEstimate);\n if (date.year === undefined ||\n date.month === undefined ||\n date.day === undefined ||\n date.monthCode === undefined ||\n (this.hasEra && (date.era === undefined || date.eraYear === undefined))) {\n throw new RangeError('Unexpected missing property');\n }\n if (!maybeConstrained) {\n // Also cache the reverse mapping\n const keyReverse = JSON.stringify({\n func: 'isoToCalendarDate',\n isoYear: isoEstimate.year,\n isoMonth: isoEstimate.month,\n isoDay: isoEstimate.day,\n id: this.id\n });\n cache.set(keyReverse, date);\n }\n return isoEstimate;\n }\n temporalToCalendarDate(date, cache) {\n const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n const result = this.isoToCalendarDate(isoDate, cache);\n return result;\n }\n compareCalendarDates(date1Param, date2Param) {\n // `date1` and `date2` are already records. The calls below simply validate\n // that all three required fields are present.\n const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n if (date1.year !== date2.year)\n return ES.ComparisonResult(date1.year - date2.year);\n if (date1.month !== date2.month)\n return ES.ComparisonResult(date1.month - date2.month);\n if (date1.day !== date2.day)\n return ES.ComparisonResult(date1.day - date2.day);\n return 0;\n }\n /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n regulateDate(calendarDate, overflow = 'constrain', cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n return this.isoToCalendarDate(isoDate, cache);\n }\n addDaysIso(isoDate, days) {\n const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n return added;\n }\n addDaysCalendar(calendarDate, days, cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIso = this.addDaysIso(isoDate, days);\n const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n return addedCalendar;\n }\n addMonthsCalendar(calendarDateParam, months, overflow, cache) {\n let calendarDate = calendarDateParam;\n const { day } = calendarDate;\n for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n const { month } = calendarDate;\n const oldCalendarDate = calendarDate;\n const days = months < 0\n ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n : this.daysInMonth(calendarDate, cache);\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n let addedIso = this.addDaysIso(isoDate, days);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n // Normally, we can advance one month by adding the number of days in the\n // current month. However, if we're at the end of the current month and\n // the next month has fewer days, then we rolled over to the after-next\n // month. Below we detect this condition and back up until we're back in\n // the desired month.\n if (months > 0) {\n const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n while (calendarDate.month - 1 !== month % monthsInOldYear) {\n addedIso = this.addDaysIso(addedIso, -1);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n }\n }\n if (calendarDate.day !== day) {\n // try to retain the original day-of-month, if possible\n calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n }\n }\n if (overflow === 'reject' && calendarDate.day !== day) {\n throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n }\n return calendarDate;\n }\n addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) {\n const { year, day, monthCode } = calendarDate;\n const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n const initialDays = days + weeks * 7;\n const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n return addedDays;\n }\n untilCalendar(calendarOne, calendarTwo, largestUnit, cache) {\n let days = 0;\n let weeks = 0;\n let months = 0;\n let years = 0;\n switch (largestUnit) {\n case 'day':\n days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n break;\n case 'week': {\n const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n days = totalDays % 7;\n weeks = (totalDays - days) / 7;\n break;\n }\n case 'month':\n case 'year': {\n const diffYears = calendarTwo.year - calendarOne.year;\n const diffMonths = calendarTwo.month - calendarOne.month;\n const diffDays = calendarTwo.day - calendarOne.day;\n const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n if (!sign) {\n return { years: 0, months: 0, weeks: 0, days: 0 };\n }\n if (largestUnit === 'year' && diffYears) {\n const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0);\n years = isOneFurtherInYear ? diffYears - sign : diffYears;\n }\n const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n // Now we have less than one year remaining. Add one month at a time\n // until we go over the target, then back up one month and calculate\n // remaining days and weeks.\n let current;\n let next = yearsAdded;\n do {\n months += sign;\n current = next;\n next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n if (next.day !== calendarOne.day) {\n // In case the day was constrained down, try to un-constrain it\n next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n }\n } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n months -= sign; // correct for loop above which overshoots by 1\n const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n days = remainingDays;\n break;\n }\n }\n return { years, months, weeks, days };\n }\n daysInMonth(calendarDate, cache) {\n // Add enough days to roll over to the next month. One we're in the next\n // month, we can calculate the length of the current month. NOTE: This\n // algorithm assumes that months are continuous. It would break if a\n // calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So this\n // code should be safe for all ICU calendars.\n const { day } = calendarDate;\n const max = this.maximumMonthLength(calendarDate);\n const min = this.minimumMonthLength(calendarDate);\n // easiest case: we already know the month length if min and max are the same.\n if (min === max)\n return min;\n // Add enough days to get into the next month, without skipping it\n const increment = day <= max - min ? max : min;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIsoDate = this.addDaysIso(isoDate, increment);\n const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n // Now back up to the last day of the original month\n const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n return endOfMonthCalendar.day;\n }\n daysInPreviousMonth(calendarDate, cache) {\n const { day, month, year } = calendarDate;\n // Check to see if we already know the month length, and return it if so\n const previousMonthYear = month > 1 ? year : year - 1;\n let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n previousMonthDate = { ...previousMonthDate, month: previousMonth };\n const min = this.minimumMonthLength(previousMonthDate);\n const max = this.maximumMonthLength(previousMonthDate);\n if (min === max)\n return max;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n return lastDayOfPreviousMonthCalendar.day;\n }\n startOfCalendarYear(calendarDate) {\n return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n }\n startOfCalendarMonth(calendarDate) {\n return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n }\n calendarDaysUntil(calendarOne, calendarTwo, cache) {\n const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n return this.isoDaysUntil(oneIso, twoIso);\n }\n isoDaysUntil(oneIso, twoIso) {\n const duration = ES.DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day');\n return duration.days;\n }\n monthDayFromFields(fields, overflow, cache) {\n let { year, month, monthCode, day, era, eraYear } = fields;\n if (monthCode === undefined) {\n if (year === undefined && (era === undefined || eraYear === undefined)) {\n throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required');\n }\n ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow));\n }\n let isoYear, isoMonth, isoDay;\n let closestCalendar, closestIso;\n // Look backwards starting from the calendar year of 1972-01-01 up to 100\n // calendar years to find a year that has this month and day. Normal months\n // and days will match immediately, but for leap days and leap months we may\n // have to look for a while.\n const startDateIso = { year: 1972, month: 1, day: 1 };\n const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache);\n for (let i = 0; i < 100; i++) {\n const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache);\n const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n return { month: isoMonth, day: isoDay, year: isoYear };\n }\n else if (overflow === 'constrain') {\n // non-ISO constrain algorithm tries to find the closest date in a matching month\n if (closestCalendar === undefined ||\n (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n roundTripCalendarDate.day > closestCalendar.day)) {\n closestCalendar = roundTripCalendarDate;\n closestIso = isoDate;\n }\n }\n }\n if (overflow === 'constrain' && closestIso !== undefined)\n return closestIso;\n throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n }\n}\nclass HebrewHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'hebrew';\n this.calendarType = 'lunisolar';\n this.months = {\n Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n };\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate) {\n const { year } = calendarDate;\n // FYI: In addition to adding a month in leap years, the Hebrew calendar\n // also has per-year changes to the number of days of Heshvan and Kislev.\n // Given that these can be calculated by counting the number of days in\n // those months, I assume that these DO NOT need to be exposed as\n // Hebrew-only prototype fields or methods.\n return (7 * year + 1) % 19 < 7;\n }\n monthsInYear(calendarDate) {\n return this.inLeapYear(calendarDate) ? 13 : 12;\n }\n minimumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'min');\n }\n maximumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'max');\n }\n minMaxMonthLength(calendarDate, minOrMax) {\n const { month, year } = calendarDate;\n const monthCode = this.getMonthCode(year, month);\n const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n if (monthInfo === undefined)\n throw new RangeError(`unmatched Hebrew month: ${month}`);\n const daysInMonth = monthInfo[1].days;\n return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n }\n /** Take a guess at what ISO date a particular calendar date corresponds to */\n estimateIsoDate(calendarDate) {\n const { year } = calendarDate;\n return { year: year - 3760, month: 1, day: 1 };\n }\n getMonthCode(year, month) {\n if (this.inLeapYear({ year })) {\n return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n }\n else {\n return buildMonthCode(month);\n }\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n // The incoming type is actually CalendarDate (same as args to\n // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n // reassignments below, so as an alternative to 10+ type casts, we'll lie\n // here and claim that the type has `day` and `year` filled in already.\n let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate;\n if (year === undefined && eraYear !== undefined)\n year = eraYear;\n if (eraYear === undefined && year !== undefined)\n eraYear = year;\n if (fromLegacyDate) {\n // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n // output returns the numeric equivalent of `month` as a string, meaning\n // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n // means Adar. In this case, `month` will already be correct and no action\n // is needed. However, in Node 14 and later formatToParts returns the name\n // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n // correct `month` using the string name as a key.\n if (monthExtra) {\n const monthInfo = this.months[monthExtra];\n if (!monthInfo)\n throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n }\n // Because we're getting data from legacy Date, then `month` will always be present\n monthCode = this.getMonthCode(year, month);\n const result = { year, month: month, day, era: undefined, eraYear, monthCode };\n return result;\n }\n else {\n // When called without input coming from legacy Date output, simply ensure\n // that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (month === undefined) {\n if (monthCode.endsWith('L')) {\n if (monthCode !== 'M05L') {\n throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n }\n month = 6;\n if (!this.inLeapYear({ year })) {\n if (overflow === 'reject') {\n throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n }\n else {\n // constrain to last day of previous month (Av)\n month = 5;\n day = 30;\n monthCode = 'M05';\n }\n }\n }\n else {\n month = monthCodeNumberPart(monthCode);\n // if leap month is before this one, the month index is one more than the month code\n if (this.inLeapYear({ year }) && month >= 6)\n month++;\n const largestMonth = this.monthsInYear({ year });\n if (month < 1 || month > largestMonth)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n }\n else {\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n else {\n month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n if (monthCode === undefined) {\n monthCode = this.getMonthCode(year, month);\n }\n else {\n const calculatedMonthCode = this.getMonthCode(year, month);\n if (calculatedMonthCode !== monthCode) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n }\n }\n }\n return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear };\n }\n }\n}\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nclass IslamicBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunar';\n this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n this.DAYS_PER_ISO_YEAR = 365.2425;\n this.constantEra = 'ah';\n }\n inLeapYear(calendarDate, cache) {\n // In leap years, the 12th month has 30 days. In non-leap years: 29.\n const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n return days === 30;\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n }\n}\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic';\n }\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-umalqura';\n }\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-tbla';\n }\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-civil';\n }\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-rgsa';\n }\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamicc';\n }\n}\nclass PersianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'persian';\n this.calendarType = 'solar';\n this.constantEra = 'ap';\n }\n inLeapYear(calendarDate, cache) {\n // Same logic (count days in the last month) for Persian as for Islamic,\n // even though Persian is solar and Islamic is lunar.\n return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 29;\n return month <= 6 ? 31 : 30;\n }\n maximumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 30;\n return month <= 6 ? 31 : 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: year + 621, month: 1, day: 1 };\n }\n}\nclass IndianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'indian';\n this.calendarType = 'solar';\n this.constantEra = 'saka';\n // Indian months always start at the same well-known Gregorian month and\n // day. So this conversion is easy and fast. See\n // https://en.wikipedia.org/wiki/Indian_national_calendar\n this.months = {\n 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n 2: { length: 31, month: 4, day: 21 },\n 3: { length: 31, month: 5, day: 22 },\n 4: { length: 31, month: 6, day: 22 },\n 5: { length: 31, month: 7, day: 23 },\n 6: { length: 31, month: 8, day: 23 },\n 7: { length: 30, month: 9, day: 23 },\n 8: { length: 30, month: 10, day: 23 },\n 9: { length: 30, month: 11, day: 22 },\n 10: { length: 30, month: 12, day: 22 },\n 11: { length: 30, month: 1, nextYear: true, day: 21 },\n 12: { length: 30, month: 2, nextYear: true, day: 20 }\n };\n // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n // calendar output to fail for all dates before 0001-01-01 ISO. For example,\n // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n // expected.\n this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n }\n inLeapYear(calendarDate) {\n // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n // Years are counted in the Saka era, which starts its year 0 in the year 78\n // of the Common Era. To determine leap years, add 78 to the Saka year – if\n // the result is a leap year in the Gregorian calendar, then the Saka year\n // is a leap year as well.\n return isGregorianLeapYear(calendarDate.year + 78);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n maximumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n getMonthInfo(calendarDate) {\n const { month } = calendarDate;\n let monthInfo = this.months[month];\n if (monthInfo === undefined)\n throw new RangeError(`Invalid month: ${month}`);\n if (this.inLeapYear(calendarDate) && monthInfo.leap)\n monthInfo = monthInfo.leap;\n return monthInfo;\n }\n estimateIsoDate(calendarDateParam) {\n // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n // calendar fast!\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const monthInfo = this.getMonthInfo(calendarDate);\n const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n const isoMonth = monthInfo.month;\n const isoDay = monthInfo.day;\n const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n return isoDate;\n }\n checkIcuBugs(isoDate) {\n if (this.vulnerableToBceBug && isoDate.year < 1) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n }\n}\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam) {\n let eras = erasParam;\n if (eras.length === 0) {\n throw new RangeError('Invalid era data: eras are required');\n }\n if (eras.length === 1 && eras[0].reverseOf) {\n throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n }\n if (eras.length === 1 && !eras[0].name) {\n throw new RangeError('Invalid era data: at least one named era is required');\n }\n if (eras.filter((e) => e.reverseOf != null).length > 1) {\n throw new RangeError('Invalid era data: only one era can count years backwards');\n }\n // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n // eras can never be anchors. The era without an `anchorEpoch` property is the\n // anchor.\n let anchorEra;\n eras.forEach((e) => {\n if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n if (anchorEra)\n throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n anchorEra = e;\n e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n }\n else if (!e.name) {\n throw new RangeError('If era name is blank, it must be the anchor era');\n }\n });\n // If the era name is undefined, then it's an anchor that doesn't interact\n // with eras at all. For example, Japanese `year` is always the same as ISO\n // `year`. So this \"era\" is the anchor era but isn't used for era matching.\n // Strip it from the list that's returned.\n eras = eras.filter((e) => e.name);\n eras.forEach((e) => {\n // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n // Replace the string-valued \"reverseOf\" property with the actual era object\n // that's reversed.\n const { reverseOf } = e;\n if (reverseOf) {\n const reversedEra = eras.find((era) => era.name === reverseOf);\n if (reversedEra === undefined)\n throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n e.reverseOf = reversedEra;\n e.anchorEpoch = reversedEra.anchorEpoch;\n e.isoEpoch = reversedEra.isoEpoch;\n }\n if (e.anchorEpoch.month === undefined)\n e.anchorEpoch.month = 1;\n if (e.anchorEpoch.day === undefined)\n e.anchorEpoch.day = 1;\n });\n // Ensure that the latest epoch is first in the array. This lets us try to\n // match eras in index order, with the last era getting the remaining older\n // years. Any reverse-signed era must be at the end.\n ArraySort.call(eras, (e1, e2) => {\n if (e1.reverseOf)\n return 1;\n if (e2.reverseOf)\n return -1;\n if (!e1.isoEpoch || !e2.isoEpoch)\n throw new RangeError('Invalid era data: missing ISO epoch');\n return e2.isoEpoch.year - e1.isoEpoch.year;\n });\n // If there's a reversed era, then the one before it must be the era that's\n // being reversed.\n const lastEraReversed = eras[eras.length - 1].reverseOf;\n if (lastEraReversed) {\n if (lastEraReversed !== eras[eras.length - 2])\n throw new RangeError('Invalid era data: invalid reverse-sign era');\n }\n // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n // zero-based index, with the oldest era being zero. This format is used by\n // older versions of ICU data.\n eras.forEach((e, i) => {\n e.genericName = `era${eras.length - 1 - i}`;\n });\n return { eras: eras, anchorEra: (anchorEra || eras[0]) };\n}\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n/** Base for all Gregorian-like calendars. */\nclass GregorianBaseHelper extends HelperBase {\n constructor(id, originalEras) {\n super();\n this.calendarType = 'solar';\n // Several calendars based on the Gregorian calendar use Julian dates (not\n // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n .startsWith('12');\n this.calendarIsVulnerableToJulianBug = false;\n this.id = id;\n const { eras, anchorEra } = adjustEras(originalEras);\n this.anchorEra = anchorEra;\n this.eras = eras;\n }\n inLeapYear(calendarDate) {\n // Calendars that don't override this method use the same months and leap\n // years as Gregorian. Once we know the ISO year corresponding to the\n // calendar year, we'll know if it's a leap year or not.\n const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n return isGregorianLeapYear(year);\n }\n monthsInYear( /* calendarDate */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 2)\n return this.inLeapYear(calendarDate) ? 29 : 28;\n return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n /** Fill in missing parts of the (year, era, eraYear) tuple */\n completeEraYear(calendarDate) {\n const checkField = (name, value) => {\n const currentValue = calendarDate[name];\n if (currentValue != null && currentValue != value) {\n throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n }\n };\n const eraFromYear = (year) => {\n let eraYear;\n const adjustedCalendarDate = { ...calendarDate, year };\n const matchingEra = this.eras.find((e, i) => {\n if (i === this.eras.length - 1) {\n if (e.reverseOf) {\n // This is a reverse-sign era (like BCE) which must be the oldest\n // era. Count years backwards.\n if (year > 0)\n throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n eraYear = e.anchorEpoch.year - year;\n return true;\n }\n // last era always gets all \"leftover\" (older than epoch) years,\n // so no need for a comparison like below.\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n if (comparison >= 0) {\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n return false;\n });\n if (!matchingEra)\n throw new RangeError(`Year ${year} was not matched by any era`);\n return { eraYear: eraYear, era: matchingEra.name };\n };\n let { year, eraYear, era } = calendarDate;\n if (year != null) {\n ({ eraYear, era } = eraFromYear(year));\n checkField('era', era);\n checkField('eraYear', eraYear);\n }\n else if (eraYear != null) {\n const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n if (!matchingEra)\n throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n if (eraYear < 1 && matchingEra.reverseOf) {\n throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n }\n if (matchingEra.reverseOf) {\n year = matchingEra.anchorEpoch.year - eraYear;\n }\n else {\n year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n }\n checkField('year', year);\n // We'll accept dates where the month/day is earlier than the start of\n // the era or after its end as long as it's in the same year. If that\n // happens, we'll adjust the era/eraYear pair to be the correct era for\n // the `year`.\n ({ eraYear, era } = eraFromYear(year));\n }\n else {\n throw new RangeError('Either `year` or `eraYear` and `era` are required');\n }\n return { ...calendarDate, year, eraYear, era };\n }\n adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') {\n let calendarDate = calendarDateParam;\n // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n const { month, monthCode } = calendarDate;\n if (month === undefined)\n calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) };\n this.validateCalendarDate(calendarDate);\n calendarDate = this.completeEraYear(calendarDate);\n return super.adjustCalendarDate(calendarDate, cache, overflow);\n }\n estimateIsoDate(calendarDateParam) {\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const { year, month, day } = calendarDate;\n const { anchorEra } = this;\n const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n }\n checkIcuBugs(isoDate) {\n if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n if (beforeJulianSwitch) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)');\n }\n }\n }\n}\nclass OrthodoxBaseHelper extends GregorianBaseHelper {\n constructor(id, originalEras) {\n super(id, originalEras);\n }\n inLeapYear(calendarDate) {\n // Leap years happen one year before the Julian leap year. Note that this\n // calendar is based on the Julian calendar which has a leap year every 4\n // years, unlike the Gregorian calendar which doesn't have leap years on\n // years divisible by 100 except years divisible by 400.\n //\n // Note that we're assuming that leap years in before-epoch times match\n // how leap years are defined now. This is probably not accurate but I'm\n // not sure how better to do it.\n const { year } = calendarDate;\n return (year + 1) % 4 === 0;\n }\n monthsInYear( /* calendarDate */) {\n return 13;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n if (month === 13)\n return this.inLeapYear(calendarDate) ? 6 : 5;\n return 30;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n}\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n// two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n// zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n constructor() {\n super('coptic', [\n { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n { name: 'era0', reverseOf: 'era1' }\n ]);\n }\n}\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethiopic', [\n { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n ]);\n }\n}\nclass RocHelper extends GregorianBaseHelper {\n constructor() {\n super('roc', [\n { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n { name: 'before-roc', reverseOf: 'minguo' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass BuddhistHelper extends GregorianBaseHelper {\n constructor() {\n super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass GregoryHelper extends GregorianBaseHelper {\n constructor() {\n super('gregory', [\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n }\n reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) {\n let { era, eraYear } = calendarDate;\n // Firefox 96 introduced a bug where the `'short'` format of the era\n // option mistakenly returns the one-letter (narrow) format instead. The\n // code below handles either the correct or Firefox-buggy format. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n if (era === 'bc' || era === 'b')\n era = 'bce';\n if (era === 'ad' || era === 'a')\n era = 'ce';\n return { era, eraYear };\n }\n}\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n// challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n// dates are modified, leading to considerable churn which is not good for\n// Temporal use.\n// - The earliest era (in 645 CE) may not end up being the earliest depending\n// on future historical scholarship\n// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n// that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n constructor() {\n super('japanese', [\n // The Japanese calendar `year` is just the ISO year, because (unlike other\n // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n // The last 3 Japanese eras confusingly return only one character in the\n // default \"short\" era, so need to use the long format.\n this.eraLength = 'long';\n }\n reviseIntlEra(calendarDate, isoDate) {\n const { era, eraYear } = calendarDate;\n const { year: isoYear } = isoDate;\n if (this.eras.find((e) => e.name === era))\n return { era, eraYear };\n return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear });\n }\n}\nclass ChineseBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunisolar';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate, cache) {\n const months = this.getMonthList(calendarDate.year, cache);\n return ObjectEntries(months).length === 13;\n }\n monthsInYear(calendarDate, cache) {\n return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n getMonthList(calendarYear, cache) {\n if (calendarYear === undefined) {\n throw new TypeError('Missing year');\n }\n const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n const getCalendarDate = (isoYear, daysPastFeb1) => {\n const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n const legacyDate = new Date(isoStringFeb1);\n // Now add the requested number of days, which may wrap to the next month.\n legacyDate.setUTCDate(daysPastFeb1 + 1);\n const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value;\n const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value;\n let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear');\n if (calendarYearToVerify !== undefined) {\n calendarYearToVerify = +calendarYearToVerify.value;\n }\n else {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n return { calendarMonthString, calendarDay, calendarYearToVerify };\n };\n // First, find a date close to Chinese New Year. Feb 17 will either be in\n // the first month or near the end of the last month of the previous year.\n let isoDaysDelta = 17;\n let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n // If we didn't guess the first month correctly, add (almost in some months)\n // a lunar month\n if (calendarMonthString !== '1') {\n isoDaysDelta += 29;\n ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n }\n // Now back up to near the start of the first month, but not too near that\n // off-by-one issues matter.\n isoDaysDelta -= calendarDay - 5;\n const result = {};\n let monthIndex = 1;\n let oldCalendarDay;\n let oldMonthString;\n let done = false;\n do {\n ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n if (oldCalendarDay) {\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n }\n if (calendarYearToVerify !== calendarYear) {\n done = true;\n }\n else {\n result[calendarMonthString] = { monthIndex: monthIndex++ };\n // Move to the next month. Because months are sometimes 29 days, the day of the\n // calendar month will move forward slowly but not enough to flip over to a new\n // month before the loop ends at 12-13 months.\n isoDaysDelta += 30;\n }\n oldCalendarDay = calendarDay;\n oldMonthString = calendarMonthString;\n } while (!done);\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n cache.set(key, result);\n return result;\n }\n estimateIsoDate(calendarDate) {\n const { year, month } = calendarDate;\n return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n if (fromLegacyDate) {\n // Legacy Date output returns a string that's an integer with an optional\n // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n // month. Below we'll normalize the output.\n year = eraYear;\n if (monthExtra && monthExtra !== 'bis')\n throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n const monthCode = buildMonthCode(month, monthExtra !== undefined);\n const monthString = `${month}${monthExtra || ''}`;\n const months = this.getMonthList(year, cache);\n const monthInfo = months[monthString];\n if (monthInfo === undefined)\n throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n month = monthInfo.monthIndex;\n return { year: year, month, day: day, era: undefined, eraYear, monthCode };\n }\n else {\n // When called without input coming from legacy Date output,\n // simply ensure that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (year === undefined)\n year = eraYear;\n if (eraYear === undefined)\n eraYear = year;\n if (month === undefined) {\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n let monthInfo = months[numberPart];\n month = monthInfo && monthInfo.monthIndex;\n // If this leap month isn't present in this year, constrain down to the last day of the previous month.\n if (month === undefined &&\n monthCode.endsWith('L') &&\n !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) &&\n overflow === 'constrain') {\n let withoutML = monthCode.slice(1, -1);\n if (withoutML[0] === '0')\n withoutML = withoutML.slice(1);\n monthInfo = months[withoutML];\n if (monthInfo) {\n ({ daysInMonth: day, monthIndex: month } = monthInfo);\n monthCode = buildMonthCode(withoutML);\n }\n }\n if (month === undefined) {\n throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n }\n }\n else if (monthCode === undefined) {\n const months = this.getMonthList(year, cache);\n const monthEntries = ObjectEntries(months);\n const largestMonth = monthEntries.length;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength());\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n }\n const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n if (matchingMonthEntry === undefined) {\n throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n }\n monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1);\n }\n else {\n // Both month and monthCode are present. Make sure they don't conflict.\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n const monthInfo = months[numberPart];\n if (!monthInfo)\n throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n if (month !== monthInfo.monthIndex) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n }\n }\n return {\n ...calendarDate,\n year: year,\n eraYear,\n month,\n monthCode: monthCode,\n day: day\n };\n }\n }\n}\nclass ChineseHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'chinese';\n }\n}\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'dangi';\n }\n}\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nconst nonIsoImpl = {\n // `helper` is added when this object is spread into each calendar's\n // implementation\n helper: undefined,\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n const result = ES.CreateTemporalDate(year, month, day, calendar);\n cache.setObject(result);\n return result;\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []);\n const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n const result = ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day);\n cache.setObject(result);\n return result;\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n // All built-in calendars require `day`, but some allow other fields to be\n // substituted for `month`. And for lunisolar calendars, either `monthCode`\n // or `year` must be provided because `month` is ambiguous without a year or\n // a code.\n const cache = new OneObjectCache();\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n // `year` is a reference year where this month/day exists in this calendar\n const result = ES.CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year);\n cache.setObject(result);\n return result;\n },\n fields(fieldsParam) {\n let fields = fieldsParam;\n if (ArrayIncludes.call(fields, 'year'))\n fields = [...fields, 'era', 'eraYear'];\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const fieldsCopy = { ...fields };\n const additionalFieldsCopy = { ...additionalFields };\n // era and eraYear are intentionally unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy;\n const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy;\n if (newMonth === undefined && newMonthCode === undefined) {\n original.month = month;\n original.monthCode = monthCode;\n }\n if (newYear === undefined && newEra === undefined && newEraYear === undefined) {\n // Only `year` is needed. We don't set era and eraYear because it's\n // possible to create a conflict for eras that start or end mid-year. See\n // https://github.com/tc39/proposal-temporal/issues/1784.\n original.year = year;\n }\n return { ...original, ...additionalFieldsCopy };\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n const { year, month, day } = isoAdded;\n const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendar);\n // The new object's cache starts with the cache of the old object\n const newCache = new OneObjectCache(cache);\n newCache.setObject(newTemporalObject);\n return newTemporalObject;\n },\n dateUntil(one, two, largestUnit) {\n const cacheOne = OneObjectCache.getCacheForObject(one);\n const cacheTwo = OneObjectCache.getCacheForObject(two);\n const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n return result;\n },\n year(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.year;\n },\n month(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.month;\n },\n day(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.day;\n },\n era(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.era;\n },\n eraYear(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.eraYear;\n },\n monthCode(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.monthCode;\n },\n dayOfWeek(date) {\n return impl['iso8601'].dayOfWeek(date);\n },\n dayOfYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.isoToCalendarDate(date, cache);\n const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n return diffDays + 1;\n },\n weekOfYear(date) {\n return impl['iso8601'].weekOfYear(date);\n },\n daysInWeek(date) {\n return impl['iso8601'].daysInWeek(date);\n },\n daysInMonth(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n // Easy case: if the helper knows the length without any heavy calculation.\n const max = this.helper.maximumMonthLength(calendarDate);\n const min = this.helper.minimumMonthLength(calendarDate);\n if (max === min)\n return max;\n // The harder case is where months vary every year, e.g. islamic calendars.\n // Find the answer by calculating the difference in days between the first\n // day of the current month and the first day of the next month.\n const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n return result;\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n return result;\n },\n monthsInYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.monthsInYear(calendarDate, cache);\n return result;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.inLeapYear(calendarDate, cache);\n return result;\n }\n};\nfor (const Helper of [\n HebrewHelper,\n PersianHelper,\n EthiopicHelper,\n EthioaaHelper,\n CopticHelper,\n ChineseHelper,\n DangiHelper,\n RocHelper,\n IndianHelper,\n BuddhistHelper,\n GregoryHelper,\n JapaneseHelper,\n IslamicHelper,\n IslamicUmalquraHelper,\n IslamicTblaHelper,\n IslamicCivilHelper,\n IslamicRgsaHelper,\n IslamicCcHelper\n]) {\n const helper = new Helper();\n // Clone the singleton non-ISO implementation that's the same for all\n // calendars. The `helper` property contains per-calendar logic.\n impl[helper.id] = { ...nonIsoImpl, helper };\n}\n//# sourceMappingURL=calendar.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDate {\n constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalDateSlots. This check\n // exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get year() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateFromFields(calendar, fields, options);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n }\n add(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.ToTemporalDuration(temporalDurationLike);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n subtract(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDate(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalDateToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n }\n toPlainDateTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n let timeZone, temporalTime;\n if (ES.IsObject(item)) {\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n // The cast below is needed because it's possible here for\n // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`,\n // not a TimeZoneProtocol.\n // TODO: should we check for that shape to improve on the (bad) error\n // message that the caller will get from ToTemporalTimeZone?\n timeZone = ES.ToTemporalTimeZone(item);\n }\n else {\n timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n temporalTime = item.plainTime;\n }\n }\n else {\n timeZone = ES.ToTemporalTimeZone(item);\n }\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0;\n if (temporalTime !== undefined) {\n temporalTime = ES.ToTemporalTime(temporalTime);\n hour = GetSlot(temporalTime, ISO_HOUR);\n minute = GetSlot(temporalTime, ISO_MINUTE);\n second = GetSlot(temporalTime, ISO_SECOND);\n millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n }\n const dt = ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDate(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDate(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n//# sourceMappingURL=plaindate.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDateTime {\n constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const hour = ES.ToIntegerThrowOnInfinity(hourParam);\n const minute = ES.ToIntegerThrowOnInfinity(minuteParam);\n const second = ES.ToIntegerThrowOnInfinity(secondParam);\n const millisecond = ES.ToIntegerThrowOnInfinity(millisecondParam);\n const microsecond = ES.ToIntegerThrowOnInfinity(microsecondParam);\n const nanosecond = ES.ToIntegerThrowOnInfinity(nanosecondParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get year() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get hour() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike);\n const options = ES.GetOptionsObject(optionsParam);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const props = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-time-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n let year = GetSlot(this, ISO_YEAR);\n let month = GetSlot(this, ISO_MONTH);\n let day = GetSlot(this, ISO_DAY);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDateTime(otherParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const showCalendar = ES.ToShowCalendarOption(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n }\n toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation);\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n toPlainDate() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n toPlainTime() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(this);\n }\n getISOFields() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDateTime(oneParam);\n const two = ES.ToTemporalDateTime(twoParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n//# sourceMappingURL=plaindatetime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class Duration {\n constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) {\n const years = ES.ToIntegerWithoutRounding(yearsParam);\n const months = ES.ToIntegerWithoutRounding(monthsParam);\n const weeks = ES.ToIntegerWithoutRounding(weeksParam);\n const days = ES.ToIntegerWithoutRounding(daysParam);\n const hours = ES.ToIntegerWithoutRounding(hoursParam);\n const minutes = ES.ToIntegerWithoutRounding(minutesParam);\n const seconds = ES.ToIntegerWithoutRounding(secondsParam);\n const milliseconds = ES.ToIntegerWithoutRounding(millisecondsParam);\n const microseconds = ES.ToIntegerWithoutRounding(microsecondsParam);\n const nanoseconds = ES.ToIntegerWithoutRounding(nanosecondsParam);\n ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n CreateSlots(this);\n SetSlot(this, YEARS, years);\n SetSlot(this, MONTHS, months);\n SetSlot(this, WEEKS, weeks);\n SetSlot(this, DAYS, days);\n SetSlot(this, HOURS, hours);\n SetSlot(this, MINUTES, minutes);\n SetSlot(this, SECONDS, seconds);\n SetSlot(this, MILLISECONDS, milliseconds);\n SetSlot(this, MICROSECONDS, microseconds);\n SetSlot(this, NANOSECONDS, nanoseconds);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get years() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, YEARS);\n }\n get months() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MONTHS);\n }\n get weeks() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, WEEKS);\n }\n get days() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, DAYS);\n }\n get hours() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, HOURS);\n }\n get minutes() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MINUTES);\n }\n get seconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, SECONDS);\n }\n get milliseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MILLISECONDS);\n }\n get microseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MICROSECONDS);\n }\n get nanoseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, NANOSECONDS);\n }\n get sign() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS));\n }\n get blank() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return (ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0);\n }\n with(durationLike) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const props = ES.PrepareTemporalFields(durationLike, \n // NOTE: Field order here is important.\n [\n 'days',\n 'hours',\n 'microseconds',\n 'milliseconds',\n 'minutes',\n 'months',\n 'nanoseconds',\n 'seconds',\n 'weeks',\n 'years'\n ], 'partial');\n if (!props) {\n throw new TypeError('invalid duration-like');\n }\n const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props;\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n negated() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.CreateNegatedTemporalDuration(this);\n }\n abs() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS)));\n }\n add(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n }\n subtract(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n let defaultLargestUnit = ES.DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n let smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined);\n let smallestUnitPresent = true;\n if (!smallestUnit) {\n smallestUnitPresent = false;\n smallestUnit = 'nanosecond';\n }\n defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']);\n let largestUnitPresent = true;\n if (!largestUnit) {\n largestUnitPresent = false;\n largestUnit = defaultLargestUnit;\n }\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (!smallestUnitPresent && !largestUnitPresent) {\n throw new RangeError('at least one of smallestUnit or largestUnit is required');\n }\n if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const roundingIncrement = ES.ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let relativeTo = ES.ToRelativeTemporalObject(options);\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n relativeTo = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo));\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n total(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n if (optionsParam === undefined)\n throw new TypeError('options argument is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('unit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n // Convert larger units down to days\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n let intermediate;\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate));\n // Finally, truncate to the correct unit and calculate remainder\n const { total } = ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo);\n return total;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n if (precision === 'minute')\n throw new RangeError('smallestUnit must not be \"minute\"');\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDurationToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') {\n return new Intl.DurationFormat(locales, options).format(this);\n }\n console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n return ES.TemporalDurationToString(this);\n }\n valueOf() {\n throw new TypeError('use compare() to compare Temporal.Duration');\n }\n static from(item) {\n if (ES.IsTemporalDuration(item)) {\n return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS));\n }\n return ES.ToTemporalDuration(item);\n }\n static compare(oneParam, twoParam, optionsParam = undefined) {\n const one = ES.ToTemporalDuration(oneParam);\n const two = ES.ToTemporalDuration(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n const y1 = GetSlot(one, YEARS);\n const mon1 = GetSlot(one, MONTHS);\n const w1 = GetSlot(one, WEEKS);\n let d1 = GetSlot(one, DAYS);\n const h1 = GetSlot(one, HOURS);\n const min1 = GetSlot(one, MINUTES);\n const s1 = GetSlot(one, SECONDS);\n const ms1 = GetSlot(one, MILLISECONDS);\n const µs1 = GetSlot(one, MICROSECONDS);\n let ns1 = GetSlot(one, NANOSECONDS);\n const y2 = GetSlot(two, YEARS);\n const mon2 = GetSlot(two, MONTHS);\n const w2 = GetSlot(two, WEEKS);\n let d2 = GetSlot(two, DAYS);\n const h2 = GetSlot(two, HOURS);\n const min2 = GetSlot(two, MINUTES);\n const s2 = GetSlot(two, SECONDS);\n const ms2 = GetSlot(two, MILLISECONDS);\n const µs2 = GetSlot(two, MICROSECONDS);\n let ns2 = GetSlot(two, NANOSECONDS);\n const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n }\n const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n//# sourceMappingURL=duration.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainMonthDay {\n constructor(isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar(), referenceISOYearParam = 1972) {\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISOYear = ES.ToIntegerThrowOnInfinity(referenceISOYearParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoMonth and isoDay are required');\n }\n ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n }\n get monthCode() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n with(temporalMonthDayLike, optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalMonthDayLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid month-day-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarMonthDayFromFields(calendar, fields, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalMonthDay(otherParam);\n for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalMonthDayToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalMonthDayToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['year']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalMonthDay(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR));\n }\n return ES.ToTemporalMonthDay(item, options);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n//# sourceMappingURL=plainmonthday.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nconst instant = () => {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.GetISO8601Calendar();\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return zonedDateTime(ES.GetISO8601Calendar(), temporalTimeZoneLike);\n};\nconst plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZone = () => {\n return ES.SystemTimeZone();\n};\nexport const Now = {\n instant,\n plainDateTime,\n plainDateTimeISO,\n plainDate,\n plainDateISO,\n plainTimeISO,\n timeZone,\n zonedDateTime,\n zonedDateTimeISO,\n [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n value: 'Temporal.Now',\n writable: false,\n enumerable: false,\n configurable: true\n});\n//# sourceMappingURL=now.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectAssign = Object.assign;\nfunction TemporalTimeToString(time, precision, options = undefined) {\n let hour = GetSlot(time, ISO_HOUR);\n let minute = GetSlot(time, ISO_MINUTE);\n let second = GetSlot(time, ISO_SECOND);\n let millisecond = GetSlot(time, ISO_MILLISECOND);\n let microsecond = GetSlot(time, ISO_MICROSECOND);\n let nanosecond = GetSlot(time, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const hourString = ES.ISODateTimePartString(hour);\n const minuteString = ES.ISODateTimePartString(minute);\n const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n return `${hourString}:${minuteString}${seconds}`;\n}\nexport class PlainTime {\n constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) {\n const isoHour = ES.ToIntegerThrowOnInfinity(isoHourParam);\n const isoMinute = ES.ToIntegerThrowOnInfinity(isoMinuteParam);\n const isoSecond = ES.ToIntegerThrowOnInfinity(isoSecondParam);\n const isoMillisecond = ES.ToIntegerThrowOnInfinity(isoMillisecondParam);\n const isoMicrosecond = ES.ToIntegerThrowOnInfinity(isoMicrosecondParam);\n const isoNanosecond = ES.ToIntegerThrowOnInfinity(isoNanosecondParam);\n ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n CreateSlots(this);\n SetSlot(this, ISO_HOUR, isoHour);\n SetSlot(this, ISO_MINUTE, isoMinute);\n SetSlot(this, ISO_SECOND, isoSecond);\n SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n SetSlot(this, CALENDAR, ES.GetISO8601Calendar());\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get calendar() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n // PlainTime's calendar isn't settable, so can't be a userland calendar\n return GetSlot(this, CALENDAR);\n }\n get hour() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n with(temporalTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalTimeLike);\n const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const fields = ES.ToTemporalTimeRecord(this);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n equals(otherParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalTime(otherParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return true;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return TemporalTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n }\n toPlainDateTime(temporalDateParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument');\n }\n const dateLike = item.plainDate;\n if (dateLike === undefined) {\n throw new TypeError('missing date property');\n }\n const temporalDate = ES.ToTemporalDate(dateLike);\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n throw new TypeError('missing timeZone property');\n }\n const timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n getISOFields() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n if (ES.IsTemporalTime(item)) {\n return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n return ES.ToTemporalTime(item, overflow);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalTime(oneParam);\n const two = ES.ToTemporalTime(twoParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n//# sourceMappingURL=plaintime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { TIMEZONE_ID, EPOCHNANOSECONDS, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class TimeZone {\n constructor(timeZoneIdentifierParam) {\n // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n // This check exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: identifier is required');\n }\n const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n CreateSlots(this);\n SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n getOffsetNanosecondsFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n return ES.ParseTimeZoneOffsetString(id);\n }\n return ES.GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id);\n }\n getOffsetStringFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n return ES.BuiltinTimeZoneGetOffsetStringFor(this, instant);\n }\n getPlainDateTimeFor(instantParam, calendarParam = ES.GetISO8601Calendar()) {\n const instant = ES.ToTemporalInstant(instantParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar);\n }\n getInstantFor(dateTimeParam, optionsParam = undefined) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n return ES.BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation);\n }\n getPossibleInstantsFor(dateTimeParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n const epochNs = ES.GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n const offsetNs = ES.ParseTimeZoneOffsetString(id);\n return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n }\n const possibleEpochNs = ES.GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n return possibleEpochNs.map((ns) => new Instant(ns));\n }\n getNextTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZoneNextTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n getPreviousTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZonePreviousTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n toString() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(GetSlot(this, TIMEZONE_ID));\n }\n toJSON() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalTimeZone(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\n//# sourceMappingURL=timezone.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainYearMonth {\n constructor(isoYearParam, isoMonthParam, calendarParam = ES.GetISO8601Calendar(), referenceISODayParam = 1) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISODay = ES.ToIntegerThrowOnInfinity(referenceISODayParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoYear and isoMonth are required');\n }\n ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n }\n get year() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalYearMonthLike, optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalYearMonthLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid year-month-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarYearMonthFromFields(calendar, fields, options);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalYearMonth(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalYearMonthToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalYearMonthToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['day']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalYearMonth(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY));\n }\n return ES.ToTemporalYearMonth(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalYearMonth(oneParam);\n const two = ES.ToTemporalYearMonth(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n//# sourceMappingURL=plainyearmonth.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { CALENDAR, EPOCHNANOSECONDS, ISO_HOUR, INSTANT, ISO_DAY, ISO_MONTH, ISO_YEAR, ISO_MICROSECOND, ISO_MILLISECOND, ISO_MINUTE, ISO_NANOSECOND, ISO_SECOND, TIME_ZONE, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO } from './ecmascript';\nexport class ZonedDateTime {\n constructor(epochNanosecondsParam, timeZoneParam, calendarParam = ES.GetISO8601Calendar()) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n // ToTemporalTimeZone(undefined) will end up calling TimeZone.from(\"undefined\"), which\n // could succeed.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get timeZone() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, TIME_ZONE);\n }\n get year() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get month() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthCode() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n }\n get day() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hour() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n }\n get eraYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get epochSeconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n }\n get dayOfWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get dayOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get weekOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hoursInDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const year = GetSlot(dt, ISO_YEAR);\n const month = GetSlot(dt, ISO_MONTH);\n const day = GetSlot(dt, ISO_DAY);\n const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n const timeZone = GetSlot(this, TIME_ZONE);\n const todayNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n const tomorrowNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12;\n }\n get daysInWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthsInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get inLeapYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get offset() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n get offsetNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n with(temporalZonedDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalZonedDateTimeLike)) {\n throw new TypeError('invalid zoned-date-time-like');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike);\n // TODO: Reorder according to spec.\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const offset = ES.ToTemporalOffset(options, 'prefer');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldsWithOffset = ES.ArrayPush(fieldNames, 'offset');\n const props = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial');\n const fieldsWithTimeZoneAndOffset = ES.ArrayPush(fieldsWithOffset, 'timeZone');\n let fields = ES.PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const thisDt = dateTime(this);\n const hour = GetSlot(thisDt, ISO_HOUR);\n const minute = GetSlot(thisDt, ISO_MINUTE);\n const second = GetSlot(thisDt, ISO_SECOND);\n const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n const thisDt = dateTime(this);\n const year = GetSlot(thisDt, ISO_YEAR);\n const month = GetSlot(thisDt, ISO_MONTH);\n const day = GetSlot(thisDt, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withTimeZone(timeZoneParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n // first, round the underlying DateTime fields\n const dt = dateTime(this);\n let year = GetSlot(dt, ISO_YEAR);\n let month = GetSlot(dt, ISO_MONTH);\n let day = GetSlot(dt, ISO_DAY);\n let hour = GetSlot(dt, ISO_HOUR);\n let minute = GetSlot(dt, ISO_MINUTE);\n let second = GetSlot(dt, ISO_SECOND);\n let millisecond = GetSlot(dt, ISO_MILLISECOND);\n let microsecond = GetSlot(dt, ISO_MICROSECOND);\n let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n const instantStart = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n if (JSBI.equal(dayLengthNs, ZERO)) {\n throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days');\n }\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, \n // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n // (which can hold up to 104 days in nanoseconds)\n JSBI.toNumber(dayLengthNs)));\n // Now reset all DateTime fields but leave the TimeZone. The offset will\n // also be retained if the new date/time values are still OK with the old\n // offset. Otherwise the offset will be changed to be compatible with the\n // new date/time values. If DST disambiguation is required, the `compatible`\n // disambiguation algorithm will be used.\n const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalZonedDateTime(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)))\n return false;\n if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE)))\n return false;\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const showCalendar = ES.ToShowCalendarOption(options);\n const showTimeZone = ES.ToShowTimeZoneNameOption(options);\n const showOffset = ES.ToShowOffsetOption(options);\n return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n unit,\n increment,\n roundingMode\n });\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n toJSON() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalZonedDateTimeToString(this, 'auto');\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n }\n startOfDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toInstant() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n }\n toPlainDate() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(dateTime(this));\n }\n toPlainTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(dateTime(this));\n }\n toPlainDateTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return dateTime(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const tz = GetSlot(this, TIME_ZONE);\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(dt, ISO_DAY),\n isoHour: GetSlot(dt, ISO_HOUR),\n isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n isoMinute: GetSlot(dt, ISO_MINUTE),\n isoMonth: GetSlot(dt, ISO_MONTH),\n isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n isoSecond: GetSlot(dt, ISO_SECOND),\n isoYear: GetSlot(dt, ISO_YEAR),\n offset: ES.BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n timeZone: tz\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalZonedDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n ES.ToTemporalDisambiguation(options);\n ES.ToTemporalOffset(options, 'reject');\n return ES.CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalZonedDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalZonedDateTime(oneParam);\n const two = ES.ToTemporalZonedDateTime(twoParam);\n const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return -1;\n if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\nfunction dateTime(zdt) {\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n//# sourceMappingURL=zoneddatetime.js.map","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n Temporal.Instant,\n Temporal.Calendar,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.Duration,\n Temporal.PlainMonthDay,\n // Temporal.Now, // plain object (not a constructor), so no `prototype`\n Temporal.PlainTime,\n Temporal.TimeZone,\n Temporal.PlainYearMonth,\n Temporal.ZonedDateTime\n];\nfor (const type of types) {\n const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype');\n if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n descriptor.configurable = false;\n descriptor.enumerable = false;\n descriptor.writable = false;\n Object.defineProperty(type, 'prototype', descriptor);\n }\n}\nexport { Temporal, Intl, toTemporalInstant };\n//# sourceMappingURL=index.js.map","import { Instant } from './instant';\nimport JSBI from 'jsbi';\nimport * as ES from './ecmascript';\nimport { MILLION } from './ecmascript';\nexport function toTemporalInstant() {\n // Observable access to valueOf is not correct here, but unavoidable\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n return new Instant(ES.ToBigInt(epochNanoseconds));\n}\n//# sourceMappingURL=legacydate.js.map"],"names":["JSBI","i","_","_this","sign","Object","length","__kMaxLength","RangeError","toDebugString","result","this","digit","toString","radix","valueOf","Error","__copy","__trim","newLength","last","pop","__initializeDigits","__clzmsd","__digit","__inplaceMultiplyAdd","t","mLow","mHigh","multiplier","carry","high","d","s","dLow","_i","dHigh","pLow","e","pMid1","n","pMid2","g","r","a","pHigh","__setDigit","o","__inplaceAdd","sum","__halfDigit","startIndex","summand","__setHalfDigit","__inplaceSub","borrow","current","r0","halfDigits","sub","subtrahend","r15","_i2","_e","l","_g","_i4","_e2","_s2","_o2","_i3","_o","_l","_s","__inplaceRightShift","shift","__unsignedDigit","__setDigitGrow","__halfDigitLength","len","digitIndex","previous","updated","value","BigInt","Math","floor","Number","isFinite","__zero","_3","SyntaxError","arg","primitive","TypeError","toNumber","xLength","x","xMsd","msdLeadingZeros","xBitLength","exponent","currentDigit","mantissaHigh","mantissaHighBitsUnset","mantissaLow","mantissaLowBitsUnset","rounding","h","u","signBit","unaryMinus","bitwiseNot","exponentiate","y","expValue","__kMaxLengthBits","neededDigits","_6","msd","runningSquare","multiply","resultLength","divide","__absoluteCompare","resultSign","divisor","quotient","remainder","remainderDigit","_7","add","subtract","leftShift","signedRightShift","unsignedRightShift","lessThan","__compareToBigInt","lessThanOrEqual","greaterThan","greaterThanOrEqual","equal","notEqual","bitwiseAnd","max","y1","bitwiseXor","_e4","bitwiseOr","asIntN","neededLength","topDigit","compareDigit","asUintN","bitsInTopDigit","ADD","LT","LE","GT","GE","EQ","NE","__oneDigit","__decideRounding","topUnconsumedBit","mask","__fromDouble","digits","__kBitConversionInts","msdTopBit","remainingMantissaBits","_i6","_i7","_8","__isWhitespace","c","__fromString","string","cursor","chars","bitsPerChar","roundup","bitsMin","__kBitsPerCharTableShift","limDigit","limAlpha","parts","partsBits","done","part","bits","_r","_l2","_o3","charsSoFar","m","_l3","digitsSoFar","__kBitsPerCharTableMultiplier","_t4","__fillFromParts","bitsInDigit","partBits","__toStringBasePowerOfTwo","charMask","charsRequired","Array","pos","availableBits","newDigit","_e5","_t5","consumedBits","_o5","__toStringGeneric","bitLength","minBitsPerChar","secondHalfChars","conqueror","_e7","input","secondHalf","divisionResult","firstHalf","__unequalSign","leftNegative","__absoluteGreater","bothNegative","__absoluteLess","xSign","__compareToNumber","ySign","yAbs","xDigit","__compareToDouble","Infinity","rawExponent","yBitLength","compareMantissa","_i10","_i11","_e9","b","__equalToNumber","abs","__comparisonResultToBool","__compare","__absoluteAdd","__absoluteSub","__absoluteAddOne","inputLength","__absoluteSubOne","__absoluteAnd","yLength","numPairs","tmp","tmpLength","__absoluteAndNot","__absoluteOr","__absoluteXor","diff","__multiplyAccumulate","m2Low","m2High","multiplicand","accumulatorIndex","acc","accumulator","m1","m1Low","m1High","rLow","rMid1","rMid2","rHigh","__internalMultiplyAdd","source","rx","ry","_g3","__absoluteDivSmall","upperHalf","lowerHalf","__absoluteModSmall","__absoluteDivLarge","n2","dividend","q","wantQuotient","qhatv","_r3","vn1","halfDigitBuffer","j","qhat","ujn","rhat","vn2","ujn2","_o6","_e14","__clz15","__specialLeftShift","addDigit","__leftShiftByAbsolute","digitShift","bitsShift","grow","_o7","_t12","__rightShiftByAbsolute","mustRoundDown","_t13","_n5","_e17","__rightShiftByMaximum","__toShiftAmount","__toPrimitive","hint","obj","Symbol","toPrimitive","exoticToPrim","_t15","_i20","_13","_14","__toNumeric","__isBigInt","__truncateToNBits","drop","_15","__truncateAndSubFromPowerOfTwo","min","limit","msdBitsConsumed","resultMsd","minuendMsd","_i22","__digitPow","base","__isOneDigitInt","ArrayBuffer","Float64Array","__kBitConversionBuffer","Int32Array","log","LN2","INTRINSICS","MakeIntrinsicClass","Class","name","defineProperty","prototype","toStringTag","writable","enumerable","configurable","getOwnPropertyNames","prop","desc","getOwnPropertyDescriptor","_prop","_desc","DefineIntrinsic","key","undefined","GetIntrinsic","intrinsic","depth","options","descr","stylize","entries","push","join","EPOCHNANOSECONDS","TIMEZONE_ID","ISO_YEAR","ISO_MONTH","ISO_DAY","ISO_HOUR","ISO_MINUTE","ISO_SECOND","ISO_MILLISECOND","ISO_MICROSECOND","ISO_NANOSECOND","CALENDAR","DATE_BRAND","YEAR_MONTH_BRAND","MONTH_DAY_BRAND","INSTANT","TIME_ZONE","YEARS","MONTHS","WEEKS","DAYS","HOURS","MINUTES","SECONDS","MILLISECONDS","MICROSECONDS","NANOSECONDS","CALENDAR_ID","slots","WeakMap","CreateSlots","container","set","create","GetSlots","get","HasSlot","myslots","ids","reduce","all","id","GetSlot","SetSlot","tzComponent","timeZoneID","RegExp","calComponent","calendarID","yearpart","monthpart","daypart","datesplit","timesplit","offset","zonesplit","calendar","zoneddatetime","time","yearmonth","monthday","fraction","durationTime","duration","ArrayIncludes","includes","ArrayPrototypePush","IntlDateTimeFormat","globalThis","Intl","DateTimeFormat","MathMin","MathMax","MathAbs","MathFloor","MathSign","MathTrunc","trunc","NumberIsNaN","isNaN","NumberIsFinite","NumberCtor","StringCtor","String","NumberMaxSafeInteger","MAX_SAFE_INTEGER","ObjectAssign","assign","ObjectCreate","ObjectGetOwnPropertyDescriptor","ObjectIs","is","ReflectApply","Reflect","apply","ZERO","ONE","SIXTY","THOUSAND","MILLION","BILLION","NEGATIVE_ONE","DAY_NANOS","NS_MIN","NS_MAX","YEAR_MIN","YEAR_MAX","BEFORE_FIRST_OFFSET_TRANSITION","ABOUT_TEN_YEARS_NANOS","ABOUT_ONE_YEAR_NANOS","TWO_WEEKS_NANOS","BUILTIN_CALENDAR_IDS","IsInteger","IsObject","_typeof","ToNumber","ToInteger","num","integer","ToString","ToIntegerThrowOnInfinity","ToPositiveInteger","valueParam","property","ToIntegerWithoutRounding","divmod","ArrayPush","arr","newItem","BUILTIN_CASTS","Map","BUILTIN_DEFAULTS","SINGULAR_PLURAL_UNITS","SINGULAR_FOR","map","PLURAL_FOR","p","UNITS_DESCENDING","DURATION_FIELDS","from","keys","sort","IntlDateTimeFormatEnUsCache","getIntlDateTimeFormatEnUsForTimeZone","timeZoneIdentifier","instance","timeZone","hour12","era","year","month","day","hour","minute","second","IsTemporalInstant","item","IsTemporalTimeZone","IsTemporalCalendar","IsTemporalDuration","IsTemporalDate","IsTemporalTime","IsTemporalDateTime","IsTemporalYearMonth","IsTemporalMonthDay","IsTemporalZonedDateTime","RejectObjectWithCalendarOrTimeZone","ParseTemporalTimeZone","stringIdent","ParseTemporalTimeZoneString","canonicalIdent","GetCanonicalTimeZoneIdentifier","ianaName","ParseISODateTime","z","FormatCalendarAnnotation","showCalendar","isoString","match","PARSE.zoneddatetime","exec","yearString","slice","hasTime","millisecond","microsecond","nanosecond","offsetSign","offsetHours","offsetMinutes","offsetSeconds","offsetFraction","endsWith","RejectDateTime","ParseTemporalTimeString","PARSE.time","test","ParseTemporalMonthDayString","RejectISODate","ParseTemporalYearMonthString","referenceISODay","PARSE.yearmonth","referenceISOYear","PARSE.monthday","ParseTemporalDurationString","PARSE.duration","every","element","years","months","weeks","days","hours","fHours","minutes","fMinutes","seconds","fSeconds","milliseconds","microseconds","nanoseconds","DurationHandleFractions","fHoursParam","minutesParam","fMinutesParam","secondsParam","millisecondsParam","microsecondsParam","nanosecondsParam","forEach","val","mins","secs","mils","fMilliseconds","mics","fMicroseconds","RejectDuration","ParseTemporalInstant","ParseTemporalInstantString","BalanceISODateTime","ParseTimeZoneOffsetString","epochNs","GetEpochFromISOParts","RegulateISODate","yearParam","monthParam","dayParam","overflow","ConstrainISODate","RegulateTime","hourParam","minuteParam","secondParam","millisecondParam","microsecondParam","nanosecondParam","RejectTime","ConstrainTime","ConstrainToRange","ToTemporalDurationRecord","partial","ToTemporalPartialDurationRecord","temporalDurationLike","any","ToTemporalOverflow","GetOption","ToTemporalDisambiguation","ToTemporalRoundingMode","fallback","NegateTemporalRoundingMode","roundingMode","ToTemporalOffset","ToShowCalendarOption","ToShowTimeZoneNameOption","ToShowOffsetOption","ToTemporalRoundingIncrement","inclusive","maximum","increment","GetNumberOption","minimum","valueRaw","ToTemporalDateTimeRoundingIncrement","smallestUnit","week","ToSecondsStringPrecision","GetTemporalUnit","ALLOWED_UNITS","allowed","precision","unit","fractionalSecondDigits","stringDigits","REQUIRED","unitGroup","requiredOrDefault","extraValues","allowedSingular","_singular","category","defaultVal","allowedValues","singular","plural","retval","has","ToRelativeTemporalObject","relativeTo","offsetBehaviour","matchMinutes","TemporalDateTimeToDate","fields","PrepareTemporalFields","CalendarFields","GetTemporalCalendarWithISODefault","dateOptions","InterpretTemporalDateTimeFields","GetISO8601Calendar","ToTemporalCalendar","ToTemporalTimeZone","offsetNs","CreateTemporalZonedDateTime","InterpretISODateTimeOffset","CreateTemporalDate","DefaultTemporalLargestUnit","LargerOfTwoTemporalUnits","unit1","unit2","indexOf","MergeLargestUnitOption","optionsParam","largestUnit","bag","requiredFields","emptySourceErrorMessage","call","eraYear","ToTemporalTimeRecord","completeness","field","valueDesc","ToTemporalDate","itemParam","BuiltinTimeZoneGetPlainDateTimeFor","_calendar","CalendarDateFromFields","ParseTemporalDateString","date","ToTemporalDateTime","CreateTemporalDateTime","ParseTemporalDateTimeString","ToTemporalDuration","ToTemporalInstant","ns","ToTemporalMonthDay","_calendar2","calendarAbsent","_maybeStringCalendar","monthCode","CalendarMonthDayFromFields","CreateTemporalMonthDay","ToTemporalTime","_TemporalPlainTime","TemporalPlainTime","ToTemporalYearMonth","_calendar3","CalendarYearMonthFromFields","CreateTemporalYearMonth","disambiguation","offsetOpt","matchMinute","dt","BuiltinTimeZoneGetInstantFor","possibleInstants","GetPossibleInstantsFor","candidate","candidateOffset","GetOffsetNanosecondsFor","roundedCandidateOffset","RoundNumberToIncrement","offsetStr","FormatTimeZoneOffsetString","timeZoneString","DisambiguatePossibleInstants","ToTemporalZonedDateTime","ParseTemporalZonedDateTimeString","CreateTemporalDateSlots","isoYear","isoMonth","isoDay","RejectDateRange","TemporalPlainDate","CreateTemporalDateTimeSlots","ms","RejectDateTimeRange","TemporalPlainDateTime","CreateTemporalMonthDaySlots","TemporalPlainMonthDay","CreateTemporalYearMonthSlots","RejectYearMonthRange","RejectToRange","TemporalPlainYearMonth","CreateTemporalZonedDateTimeSlots","epochNanoseconds","ValidateEpochNanoseconds","instant","TemporalZonedDateTime","fieldNamesParam","fieldNames","CalendarMergeFields","additionalFields","calMergeFields","mergeFields","CalendarDateAdd","dateAddParam","dateAdd","CalendarDateUntil","otherDate","dateUntilParam","dateUntil","CalendarYear","dateLike","CalendarMonth","CalendarMonthCode","CalendarDay","CalendarEra","CalendarEraYear","CalendarDayOfWeek","dayOfWeek","CalendarDayOfYear","dayOfYear","CalendarWeekOfYear","weekOfYear","CalendarDaysInWeek","daysInWeek","CalendarDaysInMonth","daysInMonth","CalendarDaysInYear","daysInYear","CalendarMonthsInYear","monthsInYear","CalendarInLeapYear","inLeapYear","calendarLikeParam","calendarLike","identifier","TemporalCalendar","IsBuiltinCalendar","CalendarEquals","one","two","ConsolidateCalendars","sOne","sTwo","dateFromFields","yearMonthFromFields","monthDayFromFields","temporalTimeZoneLikeParam","temporalTimeZoneLike","TimeZoneEquals","dateTime","TemporalDateTimeToTime","getOffsetNanosecondsFor","BuiltinTimeZoneGetOffsetStringFor","GetISOPartsFromEpoch","Instant","numInstants","utcns","dayBefore","dayAfter","offsetBefore","PlainDateTime","earlier","AddDateTime","_calendar4","_PlainDateTime","later","possible","getPossibleInstantsFor","ISOYearString","yearNumber","ISODateTimePartString","FormatSecondsStringPart","fractionNumber","padStart","TemporalInstantToString","outputTimeZone","FormatISOTimeZoneOffsetString","TemporalDurationToString","formatNumber","DurationSign","RoundDuration","dateParts","timeParts","nsBigInt","msBigInt","secondsBigInt","secondParts","total","TotalDurationNanoseconds","decimalPart","unshift","TemporalDateToString","TemporalDateTimeToString","RoundISODateTime","monthString","dayString","hourString","minuteString","secondsString","TemporalMonthDayToString","monthDay","resultString","calendarString","TemporalYearMonthToString","yearMonth","TemporalZonedDateTimeToString","zdt","showTimeZone","showOffset","RoundInstant","TemporalInstant","tz","iso","TestTimeZoneOffsetString","OFFSET","resolvedOptions","GetIANATimeZoneOffsetNanoseconds","GetIANATimeZoneDateTimeParts","utc","offsetNanosecondsParam","offsetNanoseconds","secondString","post","legacyDate","Date","setUTCHours","setUTCFullYear","getTime","epochMilliseconds","nanos","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","GetFormatterParts","parseFromEnUsFormat","datetime","split","toUpperCase","format","maxJSBI","afterLatestPossibleTzdbRuleChange","SystemUTCEpochNanoSeconds","GetIANATimeZonePreviousTransition","afterLatestRule","isFarFuture","lowercap","rightNanos","rightOffsetNs","leftNanos","leftOffsetNs","bisect","LeapYear","ISODaysInMonth","standard","leapyear","DayOfWeek","Y","dow","DayOfYear","mon","w","BalanceISOYearMonth","BalanceISODate","testYear","BalanceTime","deltaDays","NonNegativeModulo","daysParam","hoursParam","offsetShift","NanosecondsToDays","dayLengthNs","_days","startNs","start","endNs","end","dtStart","dtEnd","DifferenceISODateTime","intermediateNs","AddZonedDateTime","isOverflow","relativeInstant","oneDayFartherNs","relativeNs","BalanceDuration","nanosecondsBigInt","microsecondsBigInt","millisecondsBigInt","minutesBigInt","hoursBigInt","UnbalanceDurationRelative","yearsParam","monthsParam","weeksParam","relativeToParam","TemporalDuration","oneYear","oneMonth","oneWeek","relativeToDateOnly","newRelativeTo","untilOptions","untilResult","MoveRelativeDate","CalculateOffsetShift","after","CreateNegatedTemporalDuration","propSign","DifferenceISODate","d1","y2","m2","d2","CompareISODate","mid","AddISODate","midSign","larger","smaller","_sign","_days2","DifferenceTime","h1","min1","s1","ms1","ns1","h2","min2","s2","ms2","ns2","DifferenceInstant","wholeDays","roundedRemainder","nsPerTimeUnit","roundedDiff","y1Param","mon1Param","d1Param","mon2","mon1","timeSign","DifferenceZonedDateTime","nsDiff","timeRemainderNs","DifferenceTemporalInstant","operation","otherParam","first","other","GetOptionsObject","defaultLargestUnit","roundingIncrement","DifferenceTemporalPlainDate","plainDate","otherCalendar","calendarId","otherCalendarId","DifferenceTemporalPlainDateTime","plainDateTime","DifferenceTemporalPlainTime","plainTime","DifferenceTemporalPlainYearMonth","otherCalendarID","otherFields","thisFields","thisDate","DifferenceTemporalZonedDateTime","zonedDateTime","AdjustRoundedDurationDays","AddTime","AddDuration","w1","w2","dateDuration1","dateDuration2","intermediate","dateLargestUnit","differenceOptions","_calendar5","AddInstant","addedDate","dtIntermediate","AddDurationToOrSubtractDurationFromDuration","AddDurationToOrSubtractDurationFromInstant","durationLike","ToLimitedTemporalDuration","disallowedProperties","record","AddDurationToOrSubtractDurationFromPlainDateTime","AddDurationToOrSubtractDurationFromPlainTime","temporalTime","AddDurationToOrSubtractDurationFromPlainYearMonth","startDate","durationToAdd","optionsCopy","AddDurationToOrSubtractDurationFromZonedDateTime","quantity","mode","RoundTime","nsPerUnit","rounded","DaysUntil","MoveRelativeZonedDateTime","direction","dayStart","dayEnd","zdtRelative","dayLength","yearsDuration","yearsLater","yearsMonthsWeeks","yearsMonthsWeeksLater","monthsWeeksInDays","daysLater","yearsPassed","oldRelativeTo","daysPassed","oneYearDays","yearsMonths","_dateAdd","yearsMonthsLater","_yearsMonthsWeeks","_yearsMonthsWeeksLater","weeksInDays","oneMonthDays","_divisor","_rounded","oneWeekDays","_sign2","_divisor2","_rounded2","_divisor3","_rounded3","_divisor4","allNanoseconds","_rounded4","_divisor5","_allNanoseconds","_rounded5","_divisor6","_allNanoseconds2","_rounded6","_divisor7","_allNanoseconds3","_rounded7","_divisor8","_allNanoseconds4","_rounded8","ComparisonResult","ToBigIntExternal","jsbiBI","ToBigInt","prim","toPrimFn","message","startsWith","now","CreateOnePropObject","propName","propValue","PARSE.offset","getState","leftParam","rightParam","lstateParam","rstateParam","left","right","lstate","rstate","middle","mstate","DATE","YM","MD","TIME","DATETIME","ZONED","INST","ORIGINAL","TZ_RESOLVED","TZ_GIVEN","CAL_ID","LOCALE","OPTIONS","descriptor","ObjectHasOwnProperty","hasOwnProperty","getPropLazy","getResolvedTimeZoneLazy","ES.ToTemporalTimeZone","DateTimeFormatImpl","locale","hasOptions","original","ro","clonedResolved","dateAmend","yearMonthAmend","monthDayAmend","timeAmend","datetimeAmend","zonedDateTimeAmend","instantAmend","supportedLocalesOf","locales","propertyDescriptors","extractOverrides","formatter","adjustFormatterTimeZone","rest","formatRange","isTemporalObject","sameTemporalType","aa","aformatter","atz","bb","bformatter","btz","formatToParts","formatRangeToParts","amend","amended","opt","weekday","timeZoneName","dateStyle","hasTimeOptions","dayPeriod","timeStyle","hasDateOptions","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","temporalObj","main","DateTime","ES.BuiltinTimeZoneGetInstantFor","ES.ToString","_datetime","_isoMonth","_datetime2","_isoYear","_isoMonth2","_isoDay","_datetime3","_isoYear2","_isoMonth3","_isoDay2","_hour","_minute","_second","_millisecond","_microsecond","_nanosecond","_datetime4","objTimeZone","arguments","ES.ToBigInt","ES.ValidateEpochNanoseconds","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","ES.DifferenceTemporalInstant","ES.CreateOnePropObject","ES.GetOptionsObject","ES.GetTemporalUnit","ES.REQUIRED","ES.ToTemporalRoundingMode","ES.ToTemporalRoundingIncrement","ES.RoundInstant","ES.ToTemporalInstant","ES.ToSecondsStringPrecision","roundedNs","roundedInstant","ES.TemporalInstantToString","ES.IsObject","ES.ToTemporalCalendar","ES.CreateTemporalZonedDateTime","timeZoneProperty","ES.GetISO8601Calendar","epochSecondsParam","epochSeconds","ES.ToNumber","epochMillisecondsParam","epochMicrosecondsParam","epochMicroseconds","epochNanosecondsParam","oneParam","twoParam","oneNs","twoNs","ArraySort","ObjectEntries","ObjectKeys","impl","Calendar","idParam","ES.IsBuiltinCalendar","ES.IsTemporalCalendar","_fields","fieldsArray","Set","delete","dateParam","durationParam","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","Duration","monthCodeNumberPart","buildMonthCode","leap","resolveNonLunisolarMonth","calendarDate","monthsPerYear","ES.RejectToRange","ES.ConstrainToRange","numberPart","fieldsParam","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","RegulateISOYearMonth","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","useYear","ES.CreateTemporalMonthDay","_fields5","merged","nextKey","newKeys","_nextKey","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","WeekOfYear","doy","doj","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","OneObjectCache","cacheToClone","calls","hits","misses","performance","entry","MAX_CACHE_ENTRIES","report","objectMap","cache","toUtcIsoDateString","ES.ISOYearString","ES.ISODateTimePartString","simpleDateDiff","HelperBase","eraLength","hasEra","isoDate","JSON","stringify","func","cached","dateTimeFormat","getFormatter","type","matches","monthExtra","normalize","replace","toLowerCase","reviseIntlEra","checkIcuBugs","adjustCalendarDate","keyReverse","constantEra","calendarDateParam","calendarType","validateCalendarDate","largestMonth","maximumMonthLength","keyOriginal","originalDate","regulateMonthDayNaive","isoEstimate","estimateIsoDate","calculateSameMonthResult","diffDays","testIsoEstimate","_this2","addDaysIso","minimumMonthLength","testCalendarDate","isoToCalendarDate","roundtripEstimate","diffTotalDaysEstimate","compareCalendarDates","maybeConstrained","oldRoundtripEstimate","oldSign","order","date1Param","date2Param","date1","date2","ES.ComparisonResult","calendarToIsoDate","addedIso","absMonths","oldCalendarDate","daysInPreviousMonth","monthsInOldYear","regulateDate","addedYears","addedMonths","addMonthsCalendar","initialDays","addDaysCalendar","calendarOne","calendarTwo","calendarDaysUntil","totalDays","diffYears","diffMonths","next","addCalendar","addedIsoDate","addedCalendarDate","endOfMonthIso","previousMonthDate","previousMonth","lastDayOfPreviousMonthIso","oneIso","twoIso","isoDaysUntil","closestCalendar","closestIso","calendarYear","roundTripCalendarDate","HebrewHelper","Tishri","regular","Heshvan","Kislev","Tevet","Shevat","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul","minMaxMonthLength","minOrMax","getMonthCode","monthInfo","find","fromLegacyDate","calculatedMonthCode","IslamicBaseHelper","DAYS_PER_ISLAMIC_YEAR","DAYS_PER_ISO_YEAR","IslamicHelper","IslamicUmalquraHelper","IslamicTblaHelper","IslamicCivilHelper","IslamicRgsaHelper","IslamicCcHelper","PersianHelper","IndianHelper","nextYear","vulnerableToBceBug","toLocaleDateString","isGregorianLeapYear","getMonthInfo","GregorianBaseHelper","originalEras","v8IsVulnerableToJulianBug","calendarIsVulnerableToJulianBug","adjustEras","erasParam","anchorEra","eras","reverseOf","filter","isAnchor","anchorEpoch","hasYearZero","reversedEra","isoEpoch","e1","e2","lastEraReversed","genericName","checkField","currentValue","eraFromYear","adjustedCalendarDate","matchingEra","_this14","completeEraYear","ES.CompareISODate","OrthodoxBaseHelper","EthioaaHelper","CopticHelper","EthiopicHelper","RocHelper","BuddhistHelper","GregoryHelper","JapaneseHelper","ChineseBaseHelper","getMonthList","getCalendarDate","daysPastFeb1","isoStringFeb1","setUTCDate","newYearGuess","calendarMonthString","tv","calendarDay","calendarYearToVerify","_this19","isoDaysDelta","oldCalendarDay","oldMonthString","monthIndex","_monthCode","_months","_monthInfo","withoutML","_months2","monthEntries","matchingMonthEntry","_months3","_numberPart","_monthInfo3","nonIsoImpl","helper","setObject","fieldsCopy","additionalFieldsCopy","newMonth","newMonthCode","newYear","newEra","newEraYear","getCacheForObject","temporalToCalendarDate","added","isoAdded","newTemporalObject","cacheOne","cacheTwo","untilCalendar","startOfYear","startOfCalendarYear","startOfMonthCalendar","startOfCalendarMonth","startOfNextMonthCalendar","startOfYearCalendar","startOfNextYearCalendar","Helper","PlainDate","isoYearParam","isoMonthParam","isoDayParam","calendarParam","ES.ToIntegerThrowOnInfinity","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","temporalDateLike","ES.RejectObjectWithCalendarOrTimeZone","ES.CalendarFields","props","ES.CalendarMergeFields","ES.CalendarDateFromFields","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","slot","ES.CalendarEquals","ES.ToShowCalendarOption","ES.TemporalDateToString","temporalTimeParam","ES.CreateTemporalDateTime","ES.ToTemporalTime","timeZoneLike","ES.CalendarYearMonthFromFields","ES.CalendarMonthDayFromFields","ES.CreateTemporalDateTimeSlots","temporalDateTimeLike","ES.InterpretTemporalDateTimeFields","temporalDateParam","temporalDate","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","ES.TemporalDateTimeToDate","ES.TemporalDateTimeToTime","isoHour","isoMicrosecond","isoMillisecond","isoMinute","isoNanosecond","isoSecond","val1","val2","ES.ToIntegerWithoutRounding","ES.RejectDuration","ES.IsTemporalDuration","ES.DurationSign","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","smallestUnitPresent","ES.LargerOfTwoTemporalUnits","largestUnitPresent","ES.ToTemporalDateTimeRoundingIncrement","ES.ToRelativeTemporalObject","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","BalanceDurationRelative","oneYearMonths","_untilOptions","_newRelativeTo","_oneMonthDays2","_newRelativeTo2","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.TemporalDurationToString","DurationFormat","console","warn","shift1","ES.CalculateOffsetShift","shift2","totalNs1","ES.TotalDurationNanoseconds","totalNs2","PlainMonthDay","referenceISOYearParam","ES.CreateTemporalMonthDaySlots","temporalMonthDayLike","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","receiverFieldNames","inputFieldNames","mergedFields","ES.SystemUTCEpochNanoSeconds","tZ","inst","ES.BuiltinTimeZoneGetPlainDateTimeFor","plainDateTimeISO","SystemTimeZone","fmt","ES.SystemTimeZone","Now","plainDateISO","plainTimeISO","zonedDateTimeISO","TemporalTimeToString","ES.RoundTime","ES.FormatSecondsStringPart","PlainTime","isoHourParam","isoMinuteParam","isoSecondParam","isoMillisecondParam","isoMicrosecondParam","isoNanosecondParam","ES.RejectTime","temporalTimeLike","partialTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","TimeZone","timeZoneIdentifierParam","ES.GetCanonicalTimeZoneIdentifier","ES.IsTemporalTimeZone","instantParam","ES.TestTimeZoneOffsetString","ES.ParseTimeZoneOffsetString","ES.GetIANATimeZoneOffsetNanoseconds","ES.BuiltinTimeZoneGetOffsetStringFor","dateTimeParam","ES.GetEpochFromISOParts","GetIANATimeZoneEpochValue","nsEarlier","nsLater","earliest","latest","ES.GetIANATimeZoneEpochValue","startingPointParam","startingPoint","GetIANATimeZoneNextTransition","oneYearLater","uppercap","ES.GetIANATimeZoneNextTransition","ES.GetIANATimeZonePreviousTransition","PlainYearMonth","referenceISODayParam","ES.CreateTemporalYearMonthSlots","temporalYearMonthLike","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ZonedDateTime","timeZoneParam","ES.CreateTemporalZonedDateTimeSlots","today","tomorrowFields","tomorrow","todayNs","tomorrowNs","ES.GetOffsetNanosecondsFor","temporalZonedDateTimeLike","ES.ToTemporalOffset","fieldsWithOffset","ES.ArrayPush","fieldsWithTimeZoneAndOffset","ES.InterpretISODateTimeOffset","thisDt","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","instantStart","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.ToShowTimeZoneNameOption","ES.ToShowOffsetOption","ES.TemporalZonedDateTimeToString","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime","toTemporalInstant"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"index.umd.js","sources":["../node_modules/jsbi/dist/jsbi.mjs","../tsc-out/intrinsicclass.js","../tsc-out/slots.js","../tsc-out/regex.js","../tsc-out/ecmascript.js","../tsc-out/intl.js","../tsc-out/instant.js","../tsc-out/calendar.js","../tsc-out/plaindate.js","../tsc-out/plaindatetime.js","../tsc-out/duration.js","../tsc-out/plainmonthday.js","../tsc-out/now.js","../tsc-out/plaintime.js","../tsc-out/timezone.js","../tsc-out/plainyearmonth.js","../tsc-out/zoneddatetime.js","../tsc-out/legacydate.js","../tsc-out/index.js"],"sourcesContent":["class JSBI extends Array{constructor(i,_){if(super(i),this.sign=_,Object.setPrototypeOf(this,JSBI.prototype),i>JSBI.__kMaxLength)throw new RangeError(\"Maximum BigInt size exceeded\")}static BigInt(i){var _=Math.floor,t=Number.isFinite;if(\"number\"==typeof i){if(0===i)return JSBI.__zero();if(JSBI.__isOneDigitInt(i))return 0>i?JSBI.__oneDigit(-i,!0):JSBI.__oneDigit(i,!1);if(!t(i)||_(i)!==i)throw new RangeError(\"The number \"+i+\" cannot be converted to BigInt because it is not an integer\");return JSBI.__fromDouble(i)}if(\"string\"==typeof i){const _=JSBI.__fromString(i);if(null===_)throw new SyntaxError(\"Cannot convert \"+i+\" to a BigInt\");return _}if(\"boolean\"==typeof i)return!0===i?JSBI.__oneDigit(1,!1):JSBI.__zero();if(\"object\"==typeof i){if(i.constructor===JSBI)return i;const _=JSBI.__toPrimitive(i);return JSBI.BigInt(_)}throw new TypeError(\"Cannot convert \"+i+\" to a BigInt\")}toDebugString(){const i=[\"BigInt[\"];for(const _ of this)i.push((_?(_>>>0).toString(16):_)+\", \");return i.push(\"]\"),i.join(\"\")}toString(i=10){if(2>i||36>>=12;const a=l-12;let u=12<=l?0:o<<20+l,d=20+l;for(0>>30-a,u=o<>>30-d,d-=30;const h=JSBI.__decideRounding(i,d,s,o);if((1===h||0===h&&1==(1&u))&&(u=u+1>>>0,0===u&&(r++,0!=r>>>20&&(r=0,g++,1023=JSBI.__kMaxLengthBits)throw new RangeError(\"BigInt too big\");if(1===i.length&&2===i.__digit(0)){const _=1+(0|t/30),e=i.sign&&0!=(1&t),n=new JSBI(_,e);n.__initializeDigits();const g=1<>=1;0!==t;t>>=1)n=JSBI.multiply(n,n),0!=(1&t)&&(null===e?e=n:e=JSBI.multiply(e,n));return e}static multiply(_,t){if(0===_.length)return _;if(0===t.length)return t;let i=_.length+t.length;30<=_.__clzmsd()+t.__clzmsd()&&i--;const e=new JSBI(i,_.sign!==t.sign);e.__initializeDigits();for(let n=0;n<_.length;n++)JSBI.__multiplyAccumulate(t,_.__digit(n),e,n);return e.__trim()}static divide(i,_){if(0===_.length)throw new RangeError(\"Division by zero\");if(0>JSBI.__absoluteCompare(i,_))return JSBI.__zero();const t=i.sign!==_.sign,e=_.__unsignedDigit(0);let n;if(1===_.length&&32767>=e){if(1===e)return t===i.sign?i:JSBI.unaryMinus(i);n=JSBI.__absoluteDivSmall(i,e,null)}else n=JSBI.__absoluteDivLarge(i,_,!0,!1);return n.sign=t,n.__trim()}static remainder(i,_){if(0===_.length)throw new RangeError(\"Division by zero\");if(0>JSBI.__absoluteCompare(i,_))return i;const t=_.__unsignedDigit(0);if(1===_.length&&32767>=t){if(1===t)return JSBI.__zero();const _=JSBI.__absoluteModSmall(i,t);return 0===_?JSBI.__zero():JSBI.__oneDigit(_,i.sign)}const e=JSBI.__absoluteDivLarge(i,_,!1,!0);return e.sign=i.sign,e.__trim()}static add(i,_){const t=i.sign;return t===_.sign?JSBI.__absoluteAdd(i,_,t):0<=JSBI.__absoluteCompare(i,_)?JSBI.__absoluteSub(i,_,t):JSBI.__absoluteSub(_,i,!t)}static subtract(i,_){const t=i.sign;return t===_.sign?0<=JSBI.__absoluteCompare(i,_)?JSBI.__absoluteSub(i,_,t):JSBI.__absoluteSub(_,i,!t):JSBI.__absoluteAdd(i,_,t)}static leftShift(i,_){return 0===_.length||0===i.length?i:_.sign?JSBI.__rightShiftByAbsolute(i,_):JSBI.__leftShiftByAbsolute(i,_)}static signedRightShift(i,_){return 0===_.length||0===i.length?i:_.sign?JSBI.__leftShiftByAbsolute(i,_):JSBI.__rightShiftByAbsolute(i,_)}static unsignedRightShift(){throw new TypeError(\"BigInts have no unsigned right shift; use >> instead\")}static lessThan(i,_){return 0>JSBI.__compareToBigInt(i,_)}static lessThanOrEqual(i,_){return 0>=JSBI.__compareToBigInt(i,_)}static greaterThan(i,_){return 0_)throw new RangeError(\"Invalid value: not (convertible to) a safe integer\");if(0===_)return JSBI.__zero();if(_>=JSBI.__kMaxLengthBits)return t;const e=0|(_+29)/30;if(t.lengthi)throw new RangeError(\"Invalid value: not (convertible to) a safe integer\");if(0===i)return JSBI.__zero();if(_.sign){if(i>JSBI.__kMaxLengthBits)throw new RangeError(\"BigInt too big\");return JSBI.__truncateAndSubFromPowerOfTwo(i,_,!1)}if(i>=JSBI.__kMaxLengthBits)return _;const e=0|(i+29)/30;if(_.length>>g)return _}return JSBI.__truncateToNBits(i,_)}static ADD(i,_){if(i=JSBI.__toPrimitive(i),_=JSBI.__toPrimitive(_),\"string\"==typeof i)return\"string\"!=typeof _&&(_=_.toString()),i+_;if(\"string\"==typeof _)return i.toString()+_;if(i=JSBI.__toNumeric(i),_=JSBI.__toNumeric(_),JSBI.__isBigInt(i)&&JSBI.__isBigInt(_))return JSBI.add(i,_);if(\"number\"==typeof i&&\"number\"==typeof _)return i+_;throw new TypeError(\"Cannot mix BigInt and other types, use explicit conversions\")}static LT(i,_){return JSBI.__compare(i,_,0)}static LE(i,_){return JSBI.__compare(i,_,1)}static GT(i,_){return JSBI.__compare(i,_,2)}static GE(i,_){return JSBI.__compare(i,_,3)}static EQ(i,_){for(;;){if(JSBI.__isBigInt(i))return JSBI.__isBigInt(_)?JSBI.equal(i,_):JSBI.EQ(_,i);if(\"number\"==typeof i){if(JSBI.__isBigInt(_))return JSBI.__equalToNumber(_,i);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"string\"==typeof i){if(JSBI.__isBigInt(_))return i=JSBI.__fromString(i),null!==i&&JSBI.equal(i,_);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"boolean\"==typeof i){if(JSBI.__isBigInt(_))return JSBI.__equalToNumber(_,+i);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"symbol\"==typeof i){if(JSBI.__isBigInt(_))return!1;if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"object\"==typeof i){if(\"object\"==typeof _&&_.constructor!==JSBI)return i==_;i=JSBI.__toPrimitive(i)}else return i==_}}static NE(i,_){return!JSBI.EQ(i,_)}static __zero(){return new JSBI(0,!1)}static __oneDigit(i,_){const t=new JSBI(1,_);return t.__setDigit(0,i),t}__copy(){const _=new JSBI(this.length,this.sign);for(let t=0;t_)n=-_-1;else{if(0===t)return-1;t--,e=i.__digit(t),n=29}let g=1<>>20,t=_-1023,e=(0|t/30)+1,n=new JSBI(e,0>i);let g=1048575&JSBI.__kBitConversionInts[1]|1048576,o=JSBI.__kBitConversionInts[0];const s=20,l=t%30;let r,a=0;if(l<20){const i=s-l;a=i+32,r=g>>>i,g=g<<32-i|o>>>i,o<<=32-i}else if(l===20)a=32,r=g,g=o,o=0;else{const i=l-s;a=32-i,r=g<>>32-i,g=o<>>2,g=g<<30|o>>>2,o<<=30):r=0,n.__setDigit(_,r);return n.__trim()}static __isWhitespace(i){return!!(13>=i&&9<=i)||(159>=i?32==i:131071>=i?160==i||5760==i:196607>=i?(i&=131071,10>=i||40==i||41==i||47==i||95==i||4096==i):65279==i)}static __fromString(i,_=0){let t=0;const e=i.length;let n=0;if(n===e)return JSBI.__zero();let g=i.charCodeAt(n);for(;JSBI.__isWhitespace(g);){if(++n===e)return JSBI.__zero();g=i.charCodeAt(n)}if(43===g){if(++n===e)return null;g=i.charCodeAt(n),t=1}else if(45===g){if(++n===e)return null;g=i.charCodeAt(n),t=-1}if(0===_){if(_=10,48===g){if(++n===e)return JSBI.__zero();if(g=i.charCodeAt(n),88===g||120===g){if(_=16,++n===e)return null;g=i.charCodeAt(n)}else if(79===g||111===g){if(_=8,++n===e)return null;g=i.charCodeAt(n)}else if(66===g||98===g){if(_=2,++n===e)return null;g=i.charCodeAt(n)}}}else if(16===_&&48===g){if(++n===e)return JSBI.__zero();if(g=i.charCodeAt(n),88===g||120===g){if(++n===e)return null;g=i.charCodeAt(n)}}if(0!=t&&10!==_)return null;for(;48===g;){if(++n===e)return JSBI.__zero();g=i.charCodeAt(n)}const o=e-n;let s=JSBI.__kMaxBitsPerChar[_],l=JSBI.__kBitsPerCharTableMultiplier-1;if(o>1073741824/s)return null;const r=s*o+l>>>JSBI.__kBitsPerCharTableShift,a=new JSBI(0|(r+29)/30,!1),u=10>_?_:10,h=10<_?_-10:0;if(0==(_&_-1)){s>>=JSBI.__kBitsPerCharTableShift;const _=[],t=[];let o=!1;do{let l=0,r=0;for(;;){let _;if(g-48>>>0>>0>>0>>0>>JSBI.__kBitsPerCharTableShift)/30;a.__inplaceMultiplyAdd(b,r,D)}while(!t)}if(n!==e){if(!JSBI.__isWhitespace(g))return null;for(n++;n>>l-o)}if(0!==g){if(n>=_.length)throw new Error(\"implementation bug\");_.__setDigit(n++,g)}for(;n<_.length;n++)_.__setDigit(n,0)}static __toStringBasePowerOfTwo(_,i){const t=_.length;let e=i-1;e=(85&e>>>1)+(85&e),e=(51&e>>>2)+(51&e),e=(15&e>>>4)+(15&e);const n=e,g=i-1,o=_.__digit(t-1),s=JSBI.__clz30(o);let l=0|(30*t-s+n-1)/n;if(_.sign&&l++,268435456>>o,d=30-o;d>=n;)r[a--]=JSBI.__kConversionChars[u&g],u>>>=n,d-=n}const h=(u|o<>>n-d;0!==u;)r[a--]=JSBI.__kConversionChars[u&g],u>>>=n;if(_.sign&&(r[a--]=\"-\"),-1!=a)throw new Error(\"implementation bug\");return r.join(\"\")}static __toStringGeneric(_,i,t){const e=_.length;if(0===e)return\"\";if(1===e){let e=_.__unsignedDigit(0).toString(i);return!1===t&&_.sign&&(e=\"-\"+e),e}const n=30*e-JSBI.__clz30(_.__digit(e-1)),g=JSBI.__kMaxBitsPerChar[i],o=g-1;let s=n*JSBI.__kBitsPerCharTableMultiplier;s+=o-1,s=0|s/o;const l=s+1>>1,r=JSBI.exponentiate(JSBI.__oneDigit(i,!1),JSBI.__oneDigit(l,!1));let a,u;const d=r.__unsignedDigit(0);if(1===r.length&&32767>=d){a=new JSBI(_.length,!1),a.__initializeDigits();let t=0;for(let e=2*_.length-1;0<=e;e--){const i=t<<15|_.__halfDigit(e);a.__setHalfDigit(e,0|i/d),t=0|i%d}u=t.toString(i)}else{const t=JSBI.__absoluteDivLarge(_,r,!0,!0);a=t.quotient;const e=t.remainder.__trim();u=JSBI.__toStringGeneric(e,i,!0)}a.__trim();let h=JSBI.__toStringGeneric(a,i,!0);for(;u.lengthe?JSBI.__absoluteLess(t):0}static __compareToNumber(i,_){if(JSBI.__isOneDigitInt(_)){const t=i.sign,e=0>_;if(t!==e)return JSBI.__unequalSign(t);if(0===i.length){if(e)throw new Error(\"implementation bug\");return 0===_?0:-1}if(1n?JSBI.__absoluteGreater(t):g_)return JSBI.__unequalSign(t);if(0===_)throw new Error(\"implementation bug: should be handled elsewhere\");if(0===i.length)return-1;JSBI.__kBitConversionDouble[0]=_;const e=2047&JSBI.__kBitConversionInts[1]>>>20;if(2047==e)throw new Error(\"implementation bug: handled elsewhere\");const n=e-1023;if(0>n)return JSBI.__absoluteGreater(t);const g=i.length;let o=i.__digit(g-1);const s=JSBI.__clz30(o),l=30*g-s,r=n+1;if(lr)return JSBI.__absoluteGreater(t);let a=1048576|1048575&JSBI.__kBitConversionInts[1],u=JSBI.__kBitConversionInts[0];const d=20,h=29-s;if(h!==(0|(l-1)%30))throw new Error(\"implementation bug\");let m,b=0;if(20>h){const i=d-h;b=i+32,m=a>>>i,a=a<<32-i|u>>>i,u<<=32-i}else if(20===h)b=32,m=a,a=u,u=0;else{const i=h-d;b=32-i,m=a<>>32-i,a=u<>>=0,m>>>=0,o>m)return JSBI.__absoluteGreater(t);if(o>>2,a=a<<30|u>>>2,u<<=30):m=0;const _=i.__unsignedDigit(e);if(_>m)return JSBI.__absoluteGreater(t);if(__&&i.__unsignedDigit(0)===t(_):0===JSBI.__compareToDouble(i,_)}static __comparisonResultToBool(i,_){return 0===_?0>i:1===_?0>=i:2===_?0_;case 3:return i>=_;}if(JSBI.__isBigInt(i)&&\"string\"==typeof _)return _=JSBI.__fromString(_),null!==_&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(\"string\"==typeof i&&JSBI.__isBigInt(_))return i=JSBI.__fromString(i),null!==i&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(i=JSBI.__toNumeric(i),_=JSBI.__toNumeric(_),JSBI.__isBigInt(i)){if(JSBI.__isBigInt(_))return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(\"number\"!=typeof _)throw new Error(\"implementation bug\");return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(i,_),t)}if(\"number\"!=typeof i)throw new Error(\"implementation bug\");if(JSBI.__isBigInt(_))return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(_,i),2^t);if(\"number\"!=typeof _)throw new Error(\"implementation bug\");return 0===t?i<_:1===t?i<=_:2===t?i>_:3===t?i>=_:void 0}__clzmsd(){return JSBI.__clz30(this.__digit(this.length-1))}static __absoluteAdd(_,t,e){if(_.length>>30,g.__setDigit(s,1073741823&i)}for(;s<_.length;s++){const i=_.__digit(s)+o;o=i>>>30,g.__setDigit(s,1073741823&i)}return s>>30,n.__setDigit(o,1073741823&i)}for(;o<_.length;o++){const i=_.__digit(o)-g;g=1&i>>>30,n.__setDigit(o,1073741823&i)}return n.__trim()}static __absoluteAddOne(_,i,t=null){const e=_.length;null===t?t=new JSBI(e,i):t.sign=i;let n=1;for(let g=0;g>>30,t.__setDigit(g,1073741823&i)}return 0!=n&&t.__setDigitGrow(e,1),t}static __absoluteSubOne(_,t){const e=_.length;t=t||e;const n=new JSBI(t,!1);let g=1;for(let o=0;o>>30,n.__setDigit(o,1073741823&i)}if(0!=g)throw new Error(\"implementation bug\");for(let g=e;gn?0:_.__unsignedDigit(n)>t.__unsignedDigit(n)?1:-1}static __multiplyAccumulate(_,t,e,n){if(0===t)return;const g=32767&t,o=t>>>15;let s=0,l=0;for(let r,a=0;a<_.length;a++,n++){r=e.__digit(n);const i=_.__digit(a),t=32767&i,u=i>>>15,d=JSBI.__imul(t,g),h=JSBI.__imul(t,o),m=JSBI.__imul(u,g),b=JSBI.__imul(u,o);r+=l+d+s,s=r>>>30,r&=1073741823,r+=((32767&h)<<15)+((32767&m)<<15),s+=r>>>30,l=b+(h>>>15)+(m>>>15),e.__setDigit(n,1073741823&r)}for(;0!=s||0!==l;n++){let i=e.__digit(n);i+=s+l,l=0,s=i>>>30,e.__setDigit(n,1073741823&i)}}static __internalMultiplyAdd(_,t,e,g,o){let s=e,l=0;for(let n=0;n>>15,t),a=e+((32767&g)<<15)+l+s;s=a>>>30,l=g>>>15,o.__setDigit(n,1073741823&a)}if(o.length>g)for(o.__setDigit(g++,s+l);gthis.length&&(t=this.length);const e=32767&i,n=i>>>15;let g=0,o=_;for(let s=0;s>>15,l=JSBI.__imul(_,e),r=JSBI.__imul(_,n),a=JSBI.__imul(t,e),u=JSBI.__imul(t,n);let d=o+l+g;g=d>>>30,d&=1073741823,d+=((32767&r)<<15)+((32767&a)<<15),g+=d>>>30,o=u+(r>>>15)+(a>>>15),this.__setDigit(s,1073741823&d)}if(0!=g||0!==o)throw new Error(\"implementation bug\")}static __absoluteDivSmall(_,t,e=null){null===e&&(e=new JSBI(_.length,!1));let n=0;for(let g,o=2*_.length-1;0<=o;o-=2){g=(n<<15|_.__halfDigit(o))>>>0;const i=0|g/t;n=0|g%t,g=(n<<15|_.__halfDigit(o-1))>>>0;const s=0|g/t;n=0|g%t,e.__setDigit(o>>>1,i<<15|s)}return e}static __absoluteModSmall(_,t){let e=0;for(let n=2*_.length-1;0<=n;n--){const i=(e<<15|_.__halfDigit(n))>>>0;e=0|i%t}return e}static __absoluteDivLarge(i,_,t,e){const g=_.__halfDigitLength(),n=_.length,o=i.__halfDigitLength()-g;let s=null;t&&(s=new JSBI(o+2>>>1,!1),s.__initializeDigits());const l=new JSBI(g+2>>>1,!1);l.__initializeDigits();const r=JSBI.__clz15(_.__halfDigit(g-1));0>>0;r=0|t/u;let e=0|t%u;const n=_.__halfDigit(g-2),o=a.__halfDigit(h+g-2);for(;JSBI.__imul(r,n)>>>0>(e<<16|o)>>>0&&(r--,e+=u,!(32767>>1,d|r))}if(e)return a.__inplaceRightShift(r),t?{quotient:s,remainder:a}:a;if(t)return s;throw new Error(\"unreachable\")}static __clz15(i){return JSBI.__clz30(i)-15}__inplaceAdd(_,t,e){let n=0;for(let g=0;g>>15,this.__setHalfDigit(t+g,32767&i)}return n}__inplaceSub(_,t,e){let n=0;if(1&t){t>>=1;let g=this.__digit(t),o=32767&g,s=0;for(;s>>1;s++){const i=_.__digit(s),e=(g>>>15)-(32767&i)-n;n=1&e>>>15,this.__setDigit(t+s,(32767&e)<<15|32767&o),g=this.__digit(t+s+1),o=(32767&g)-(i>>>15)-n,n=1&o>>>15}const i=_.__digit(s),l=(g>>>15)-(32767&i)-n;n=1&l>>>15,this.__setDigit(t+s,(32767&l)<<15|32767&o);if(t+s+1>=this.length)throw new RangeError(\"out of bounds\");0==(1&e)&&(g=this.__digit(t+s+1),o=(32767&g)-(i>>>15)-n,n=1&o>>>15,this.__setDigit(t+_.length,1073709056&g|32767&o))}else{t>>=1;let g=0;for(;g<_.length-1;g++){const i=this.__digit(t+g),e=_.__digit(g),o=(32767&i)-(32767&e)-n;n=1&o>>>15;const s=(i>>>15)-(e>>>15)-n;n=1&s>>>15,this.__setDigit(t+g,(32767&s)<<15|32767&o)}const i=this.__digit(t+g),o=_.__digit(g),s=(32767&i)-(32767&o)-n;n=1&s>>>15;let l=0;0==(1&e)&&(l=(i>>>15)-(o>>>15)-n,n=1&l>>>15),this.__setDigit(t+g,(32767&l)<<15|32767&s)}return n}__inplaceRightShift(_){if(0===_)return;let t=this.__digit(0)>>>_;const e=this.length-1;for(let n=0;n>>_}this.__setDigit(e,t)}static __specialLeftShift(_,t,e){const g=_.length,n=new JSBI(g+e,!1);if(0===t){for(let t=0;t>>30-t}return 0t)throw new RangeError(\"BigInt too big\");const e=0|t/30,n=t%30,g=_.length,o=0!==n&&0!=_.__digit(g-1)>>>30-n,s=g+e+(o?1:0),l=new JSBI(s,_.sign);if(0===n){let t=0;for(;t>>30-n}if(o)l.__setDigit(g+e,t);else if(0!==t)throw new Error(\"implementation bug\")}return l.__trim()}static __rightShiftByAbsolute(_,i){const t=_.length,e=_.sign,n=JSBI.__toShiftAmount(i);if(0>n)return JSBI.__rightShiftByMaximum(e);const g=0|n/30,o=n%30;let s=t-g;if(0>=s)return JSBI.__rightShiftByMaximum(e);let l=!1;if(e){if(0!=(_.__digit(g)&(1<>>o;const n=t-g-1;for(let t=0;t>>o}r.__setDigit(n,e)}return l&&(r=JSBI.__absoluteAddOne(r,!0,r)),r.__trim()}static __rightShiftByMaximum(i){return i?JSBI.__oneDigit(1,!0):JSBI.__zero()}static __toShiftAmount(i){if(1JSBI.__kMaxLengthBits?-1:_}static __toPrimitive(i,_=\"default\"){if(\"object\"!=typeof i)return i;if(i.constructor===JSBI)return i;if(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol.toPrimitive){const t=i[Symbol.toPrimitive];if(t){const i=t(_);if(\"object\"!=typeof i)return i;throw new TypeError(\"Cannot convert object to primitive value\")}}const t=i.valueOf;if(t){const _=t.call(i);if(\"object\"!=typeof _)return _}const e=i.toString;if(e){const _=e.call(i);if(\"object\"!=typeof _)return _}throw new TypeError(\"Cannot convert object to primitive value\")}static __toNumeric(i){return JSBI.__isBigInt(i)?i:+i}static __isBigInt(i){return\"object\"==typeof i&&null!==i&&i.constructor===JSBI}static __truncateToNBits(i,_){const t=0|(i+29)/30,e=new JSBI(t,_.sign),n=t-1;for(let t=0;t>>_}return e.__setDigit(n,g),e.__trim()}static __truncateAndSubFromPowerOfTwo(_,t,e){var n=Math.min;const g=0|(_+29)/30,o=new JSBI(g,e);let s=0;const l=g-1;let a=0;for(const i=n(l,t.length);s>>30,o.__setDigit(s,1073741823&i)}for(;s>>i;const _=1<<32-i;h=_-u-a,h&=_-1}return o.__setDigit(l,h),o.__trim()}__digit(_){return this[_]}__unsignedDigit(_){return this[_]>>>0}__setDigit(_,i){this[_]=0|i}__setDigitGrow(_,i){this[_]=0|i}__halfDigitLength(){const i=this.length;return 32767>=this.__unsignedDigit(i-1)?2*i-1:2*i}__halfDigit(_){return 32767&this[_>>>1]>>>15*(1&_)}__setHalfDigit(_,i){const t=_>>>1,e=this.__digit(t),n=1&_?32767&e|i<<15:1073709056&e|32767&i;this.__setDigit(t,n)}static __digitPow(i,_){let t=1;for(;0<_;)1&_&&(t*=i),_>>>=1,i*=i;return t}static __isOneDigitInt(i){return(1073741823&i)===i}}JSBI.__kMaxLength=33554432,JSBI.__kMaxLengthBits=JSBI.__kMaxLength<<5,JSBI.__kMaxBitsPerChar=[0,0,32,51,64,75,83,90,96,102,107,111,115,119,122,126,128,131,134,136,139,141,143,145,147,149,151,153,154,156,158,159,160,162,163,165,166],JSBI.__kBitsPerCharTableShift=5,JSBI.__kBitsPerCharTableMultiplier=1<>>0)/Math.LN2)},JSBI.__imul=Math.imul||function(i,_){return 0|i*_};export default JSBI;\n//# sourceMappingURL=jsbi.mjs.map\n","import { DEBUG } from './debug';\nconst INTRINSICS = {};\nconst customUtilInspectFormatters = {\n ['Temporal.Duration'](depth, options) {\n const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n if (depth < 1)\n return descr;\n const entries = [];\n for (const prop of [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n 'microseconds',\n 'nanoseconds'\n ]) {\n if (this[prop] !== 0)\n entries.push(` ${prop}: ${options.stylize(this[prop], 'number')}`);\n }\n return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n }\n};\nfunction defaultUtilInspectFormatter(depth, options) {\n return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\nexport function MakeIntrinsicClass(Class, name) {\n Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n value: name,\n writable: false,\n enumerable: false,\n configurable: true\n });\n if (DEBUG) {\n Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n for (const prop of Object.getOwnPropertyNames(Class)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class, prop, desc);\n }\n for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n // we know that `prop` is present, so the descriptor is never undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop);\n if (!desc.configurable || !desc.enumerable)\n continue;\n desc.enumerable = false;\n Object.defineProperty(Class.prototype, prop, desc);\n }\n DefineIntrinsic(name, Class);\n DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\nexport function DefineIntrinsic(name, value) {\n const key = `%${name}%`;\n if (INTRINSICS[key] !== undefined)\n throw new Error(`intrinsic ${name} already exists`);\n INTRINSICS[key] = value;\n}\nexport function GetIntrinsic(intrinsic) {\n return INTRINSICS[intrinsic];\n}\n//# sourceMappingURL=intrinsicclass.js.map","// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\nconst slots = new WeakMap();\nexport function CreateSlots(container) {\n slots.set(container, Object.create(null));\n}\nfunction GetSlots(container) {\n return slots.get(container);\n}\nexport function HasSlot(container, ...ids) {\n if (!container || 'object' !== typeof container)\n return false;\n const myslots = GetSlots(container);\n return !!myslots && ids.reduce((all, id) => all && id in myslots, true);\n}\nexport function GetSlot(container, id) {\n const value = GetSlots(container)[id];\n if (value === undefined)\n throw new TypeError(`Missing internal slot ${id}`);\n return value;\n}\nexport function SetSlot(container, id, value) {\n GetSlots(container)[id] = value;\n}\n//# sourceMappingURL=slots.js.map","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nconst timeZoneID = new RegExp(`(?:(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*|Etc/GMT[-+]\\\\d{1,2}|${offsetNoCapture.source})`);\nconst calComponent = /[A-Za-z0-9]{3,8}/;\nconst calendarID = new RegExp(`(?:${calComponent.source}(?:-${calComponent.source})*)`);\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(`(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst zonesplit = new RegExp(`(?:([zZ])|(?:${offset.source})?)(?:\\\\[(${timeZoneID.source})\\\\])?`);\nconst calendar = new RegExp(`\\\\[u-ca=(${calendarID.source})\\\\]`);\nexport const zoneddatetime = new RegExp(`^${datesplit.source}(?:(?:T|\\\\s+)${timesplit.source})?${zonesplit.source}(?:${calendar.source})?$`, 'i');\nexport const time = new RegExp(`^T?${timesplit.source}(?:${zonesplit.source})?(?:${calendar.source})?$`, 'i');\n// The short forms of YearMonth and MonthDay are only for the ISO calendar.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\nexport const yearmonth = new RegExp(`^(${yearpart.source})-?(${monthpart.source})$`);\nexport const monthday = new RegExp(`^(?:--)?(${monthpart.source})-?(${daypart.source})$`);\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n//# sourceMappingURL=regex.js.map","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectAssign = Object.assign;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ObjectIs = Object.is;\nconst ReflectApply = Reflect.apply;\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { CreateSlots, GetSlot, HasSlot, SetSlot, EPOCHNANOSECONDS, TIMEZONE_ID, CALENDAR_ID, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, DATE_BRAND, YEAR_MONTH_BRAND, MONTH_DAY_BRAND, TIME_ZONE, CALENDAR, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS } from './slots';\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst DAY_SECONDS = 86400;\nconst DAY_NANOS = JSBI.multiply(JSBI.BigInt(DAY_SECONDS), BILLION);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\nconst BUILTIN_CALENDAR_IDS = [\n 'iso8601',\n 'hebrew',\n 'islamic',\n 'islamic-umalqura',\n 'islamic-tbla',\n 'islamic-civil',\n 'islamic-rgsa',\n 'islamicc',\n 'persian',\n 'ethiopic',\n 'ethioaa',\n 'coptic',\n 'chinese',\n 'dangi',\n 'roc',\n 'indian',\n 'buddhist',\n 'japanese',\n 'gregory'\n];\nfunction IsInteger(value) {\n if (typeof value !== 'number' || !NumberIsFinite(value))\n return false;\n const abs = MathAbs(value);\n return MathFloor(abs) === abs;\n}\nexport function IsObject(value) {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\nexport function ToNumber(value) {\n if (typeof value === 'bigint')\n throw new TypeError('Cannot convert BigInt to number');\n return NumberCtor(value);\n}\nfunction ToInteger(value) {\n const num = ToNumber(value);\n if (NumberIsNaN(num))\n return 0;\n const integer = MathTrunc(num);\n if (num === 0)\n return 0;\n return integer;\n}\nexport function ToString(value) {\n if (typeof value === 'symbol') {\n throw new TypeError('Cannot convert a Symbol value to a String');\n }\n return StringCtor(value);\n}\nexport function ToIntegerThrowOnInfinity(value) {\n const integer = ToInteger(value);\n if (!NumberIsFinite(integer)) {\n throw new RangeError('infinity is out of range');\n }\n return integer;\n}\nfunction ToPositiveInteger(valueParam, property) {\n const value = ToInteger(valueParam);\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (value < 1) {\n if (property !== undefined) {\n throw new RangeError(`property '${property}' cannot be a a number less than one`);\n }\n throw new RangeError('Cannot convert a number less than one to a positive integer');\n }\n return value;\n}\nexport function ToIntegerWithoutRounding(valueParam) {\n const value = ToNumber(valueParam);\n if (NumberIsNaN(value))\n return 0;\n if (!NumberIsFinite(value)) {\n throw new RangeError('infinity is out of range');\n }\n if (!IsInteger(value)) {\n throw new RangeError(`unsupported fractional value ${value}`);\n }\n return ToInteger(value); // ℝ(value) in spec text; converts -0 to 0\n}\nfunction divmod(x, y) {\n const quotient = JSBI.divide(x, y);\n const remainder = JSBI.remainder(x, y);\n return { quotient, remainder };\n}\nfunction abs(x) {\n if (JSBI.lessThan(x, ZERO))\n return JSBI.multiply(x, NEGATIVE_ONE);\n return x;\n}\nexport function ArrayPush(arr, ...newItem) {\n ArrayPrototypePush.apply(arr, newItem);\n return arr;\n}\nconst BUILTIN_CASTS = new Map([\n ['year', ToIntegerThrowOnInfinity],\n ['month', ToPositiveInteger],\n ['monthCode', ToString],\n ['day', ToPositiveInteger],\n ['hour', ToIntegerThrowOnInfinity],\n ['minute', ToIntegerThrowOnInfinity],\n ['second', ToIntegerThrowOnInfinity],\n ['millisecond', ToIntegerThrowOnInfinity],\n ['microsecond', ToIntegerThrowOnInfinity],\n ['nanosecond', ToIntegerThrowOnInfinity],\n ['years', ToIntegerWithoutRounding],\n ['months', ToIntegerWithoutRounding],\n ['weeks', ToIntegerWithoutRounding],\n ['days', ToIntegerWithoutRounding],\n ['hours', ToIntegerWithoutRounding],\n ['minutes', ToIntegerWithoutRounding],\n ['seconds', ToIntegerWithoutRounding],\n ['milliseconds', ToIntegerWithoutRounding],\n ['microseconds', ToIntegerWithoutRounding],\n ['nanoseconds', ToIntegerWithoutRounding],\n ['era', ToString],\n ['eraYear', ToInteger],\n ['offset', ToString]\n]);\nconst BUILTIN_DEFAULTS = new Map([\n ['hour', 0],\n ['minute', 0],\n ['second', 0],\n ['millisecond', 0],\n ['microsecond', 0],\n ['nanosecond', 0]\n]);\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n ['years', 'year', 'date'],\n ['months', 'month', 'date'],\n ['weeks', 'week', 'date'],\n ['days', 'day', 'date'],\n ['hours', 'hour', 'time'],\n ['minutes', 'minute', 'time'],\n ['seconds', 'second', 'time'],\n ['milliseconds', 'millisecond', 'time'],\n ['microseconds', 'microsecond', 'time'],\n ['nanoseconds', 'nanosecond', 'time']\n];\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]]));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\nimport * as PARSE from './regex';\nconst IntlDateTimeFormatEnUsCache = new Map();\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier) {\n let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n if (instance === undefined) {\n instance = new IntlDateTimeFormat('en-us', {\n timeZone: StringCtor(timeZoneIdentifier),\n hour12: false,\n era: 'short',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n }\n return instance;\n}\nexport function IsTemporalInstant(item) {\n return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\nexport function IsTemporalTimeZone(item) {\n return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item) {\n return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item) {\n return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item) {\n return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item) {\n return (HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY));\n}\nexport function IsTemporalDateTime(item) {\n return HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND);\n}\nexport function IsTemporalYearMonth(item) {\n return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item) {\n return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item) {\n return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectObjectWithCalendarOrTimeZone(item) {\n if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n throw new TypeError('with() does not support a calendar or timeZone property');\n }\n if (item.calendar !== undefined) {\n throw new TypeError('with() does not support a calendar property');\n }\n if (item.timeZone !== undefined) {\n throw new TypeError('with() does not support a timeZone property');\n }\n}\nfunction ParseTemporalTimeZone(stringIdent) {\n let { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n if (ianaName)\n return ianaName;\n if (z)\n return 'UTC';\n return offset; // if !ianaName && !z then offset must be present\n}\nfunction FormatCalendarAnnotation(id, showCalendar) {\n if (showCalendar === 'never')\n return '';\n if (showCalendar === 'auto' && id === 'iso8601')\n return '';\n return `[u-ca=${id}]`;\n}\nfunction ParseISODateTime(isoString) {\n // ZDT is the superset of fields for every other Temporal type\n const match = PARSE.zoneddatetime.exec(isoString);\n if (!match)\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n const year = ToInteger(yearString);\n const month = ToInteger(match[2] || match[4]);\n const day = ToInteger(match[3] || match[5]);\n const hour = ToInteger(match[6]);\n const hasTime = match[6] !== undefined;\n const minute = ToInteger(match[7] || match[10]);\n let second = ToInteger(match[8] || match[11]);\n if (second === 60)\n second = 59;\n const fraction = (match[9] || match[12]) + '000000000';\n const millisecond = ToInteger(fraction.slice(0, 3));\n const microsecond = ToInteger(fraction.slice(3, 6));\n const nanosecond = ToInteger(fraction.slice(6, 9));\n let offset;\n let z = false;\n if (match[13]) {\n offset = undefined;\n z = true;\n }\n else if (match[14] && match[15]) {\n const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n const offsetHours = match[15] || '00';\n const offsetMinutes = match[16] || '00';\n const offsetSeconds = match[17] || '00';\n let offsetFraction = match[18] || '0';\n offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n if (+offsetFraction) {\n while (offsetFraction.endsWith('0'))\n offsetFraction = offsetFraction.slice(0, -1);\n offset += `:${offsetSeconds}.${offsetFraction}`;\n }\n else if (+offsetSeconds) {\n offset += `:${offsetSeconds}`;\n }\n if (offset === '-00:00')\n offset = '+00:00';\n }\n let ianaName = match[19];\n if (ianaName) {\n try {\n // Canonicalize name if it is an IANA link name or is capitalized wrong\n ianaName = GetCanonicalTimeZoneIdentifier(ianaName).toString();\n }\n catch {\n // Not an IANA name, may be a custom ID, pass through unchanged\n }\n }\n const calendar = match[20];\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n return {\n year,\n month,\n day,\n hasTime,\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond,\n ianaName,\n offset,\n z,\n calendar\n };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.z && !result.offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString) {\n const result = ParseISODateTime(isoString);\n if (!result.ianaName)\n throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n return result;\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString) {\n return ParseISODateTime(isoString);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString) {\n const match = PARSE.time.exec(isoString);\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (match) {\n hour = ToInteger(match[1]);\n minute = ToInteger(match[2] || match[5]);\n second = ToInteger(match[3] || match[6]);\n if (second === 60)\n second = 59;\n const fraction = (match[4] || match[7]) + '000000000';\n millisecond = ToInteger(fraction.slice(0, 3));\n microsecond = ToInteger(fraction.slice(3, 6));\n nanosecond = ToInteger(fraction.slice(6, 9));\n calendar = match[15];\n }\n else {\n let z, hasTime;\n ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseISODateTime(isoString));\n if (!hasTime)\n throw new RangeError(`time is missing in string: ${isoString}`);\n if (z)\n throw new RangeError('Z designator not supported for PlainTime');\n }\n // if it's a date-time string, OK\n if (/[tT ][0-9][0-9]/.test(isoString)) {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n // slow but non-grammar-dependent way to ensure that time-only strings that\n // are also valid PlainMonthDay and PlainYearMonth throw. corresponds to\n // assertion in spec text\n try {\n const { month, day } = ParseTemporalMonthDayString(isoString);\n RejectISODate(1972, month, day);\n }\n catch {\n try {\n const { year, month } = ParseTemporalYearMonthString(isoString);\n RejectISODate(year, month, 1);\n }\n catch {\n return { hour, minute, second, millisecond, microsecond, nanosecond, calendar };\n }\n }\n throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString) {\n const match = PARSE.yearmonth.exec(isoString);\n let year, month, calendar, referenceISODay;\n if (match) {\n let yearString = match[1];\n if (yearString[0] === '\\u2212')\n yearString = `-${yearString.slice(1)}`;\n if (yearString === '-000000')\n throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n year = ToInteger(yearString);\n month = ToInteger(match[2]);\n calendar = match[3];\n }\n else {\n let z;\n ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainYearMonth');\n }\n return { year, month, calendar, referenceISODay };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString) {\n const match = PARSE.monthday.exec(isoString);\n let month, day, calendar, referenceISOYear;\n if (match) {\n month = ToInteger(match[1]);\n day = ToInteger(match[2]);\n }\n else {\n let z;\n ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n if (z)\n throw new RangeError('Z designator not supported for PlainMonthDay');\n }\n return { month, day, calendar, referenceISOYear };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent) {\n try {\n let canonicalIdent = GetCanonicalTimeZoneIdentifier(stringIdent);\n if (canonicalIdent)\n return { ianaName: canonicalIdent.toString() };\n }\n catch {\n // fall through\n }\n try {\n // Try parsing ISO string instead\n const result = ParseISODateTime(stringIdent);\n if (result.z || result.offset || result.ianaName) {\n return result;\n }\n }\n catch {\n // fall through\n }\n throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString) {\n const match = PARSE.duration.exec(isoString);\n if (!match)\n throw new RangeError(`invalid duration: ${isoString}`);\n if (match.slice(2).every((element) => element === undefined)) {\n throw new RangeError(`invalid duration: ${isoString}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n const years = ToInteger(match[2]) * sign;\n const months = ToInteger(match[3]) * sign;\n const weeks = ToInteger(match[4]) * sign;\n const days = ToInteger(match[5]) * sign;\n const hours = ToInteger(match[6]) * sign;\n let fHours = match[7];\n let minutes = ToInteger(match[8]) * sign;\n let fMinutes = match[9];\n let seconds = ToInteger(match[10]) * sign;\n const fSeconds = match[11] + '000000000';\n let milliseconds = ToInteger(fSeconds.slice(0, 3)) * sign;\n let microseconds = ToInteger(fSeconds.slice(3, 6)) * sign;\n let nanoseconds = ToInteger(fSeconds.slice(6, 9)) * sign;\n fHours = fHours ? (sign * ToInteger(fHours)) / 10 ** fHours.length : 0;\n fMinutes = fMinutes ? (sign * ToInteger(fMinutes)) / 10 ** fMinutes.length : 0;\n ({ minutes, seconds, milliseconds, microseconds, nanoseconds } = DurationHandleFractions(fHours, minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds));\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString) {\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } = ParseTemporalInstantString(isoString);\n if (!z && !offset)\n throw new RangeError('Temporal.Instant requires a time zone offset');\n // At least one of z or offset is defined, but TS doesn't seem to understand\n // that we only use offset if z is not defined (and thus offset must be defined).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond - offsetNs));\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n return epochNs;\n}\nexport function RegulateISODate(yearParam, monthParam, dayParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, day);\n break;\n case 'constrain':\n ({ year, month, day } = ConstrainISODate(year, month, day));\n break;\n }\n return { year, month, day };\n}\nexport function RegulateTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, overflow) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n switch (overflow) {\n case 'reject':\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n break;\n case 'constrain':\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(hour, minute, second, millisecond, microsecond, nanosecond));\n break;\n }\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RegulateISOYearMonth(yearParam, monthParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n const referenceISODay = 1;\n switch (overflow) {\n case 'reject':\n RejectISODate(year, month, referenceISODay);\n break;\n case 'constrain':\n ({ year, month } = ConstrainISODate(year, month));\n break;\n }\n return { year, month };\n}\nfunction DurationHandleFractions(fHoursParam, minutesParam, fMinutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam) {\n let fHours = fHoursParam;\n let minutes = minutesParam;\n let fMinutes = fMinutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (fHours !== 0) {\n [minutes, fMinutes, seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const mins = fHours * 60;\n minutes = MathTrunc(mins);\n fMinutes = mins % 1;\n }\n if (fMinutes !== 0) {\n [seconds, milliseconds, microseconds, nanoseconds].forEach((val) => {\n if (val !== 0)\n throw new RangeError('only the smallest unit can be fractional');\n });\n const secs = fMinutes * 60;\n seconds = MathTrunc(secs);\n const fSeconds = secs % 1;\n if (fSeconds !== 0) {\n const mils = fSeconds * 1000;\n milliseconds = MathTrunc(mils);\n const fMilliseconds = mils % 1;\n if (fMilliseconds !== 0) {\n const mics = fMilliseconds * 1000;\n microseconds = MathTrunc(mics);\n const fMicroseconds = mics % 1;\n if (fMicroseconds !== 0) {\n const nans = fMicroseconds * 1000;\n nanoseconds = MathTrunc(nans);\n }\n }\n }\n }\n return { minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalDurationRecord(item) {\n if (!IsObject(item)) {\n return ParseTemporalDurationString(ToString(item));\n }\n if (IsTemporalDuration(item)) {\n return {\n years: GetSlot(item, YEARS),\n months: GetSlot(item, MONTHS),\n weeks: GetSlot(item, WEEKS),\n days: GetSlot(item, DAYS),\n hours: GetSlot(item, HOURS),\n minutes: GetSlot(item, MINUTES),\n seconds: GetSlot(item, SECONDS),\n milliseconds: GetSlot(item, MILLISECONDS),\n microseconds: GetSlot(item, MICROSECONDS),\n nanoseconds: GetSlot(item, NANOSECONDS)\n };\n }\n const result = {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n let partial = ToTemporalPartialDurationRecord(item);\n for (const property of DURATION_FIELDS) {\n const value = partial[property];\n if (value !== undefined) {\n result[property] = value;\n }\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction ToTemporalPartialDurationRecord(temporalDurationLike) {\n if (!IsObject(temporalDurationLike)) {\n throw new TypeError('invalid duration-like');\n }\n const result = {\n years: undefined,\n months: undefined,\n weeks: undefined,\n days: undefined,\n hours: undefined,\n minutes: undefined,\n seconds: undefined,\n milliseconds: undefined,\n microseconds: undefined,\n nanoseconds: undefined\n };\n let any = false;\n for (const property of DURATION_FIELDS) {\n const value = temporalDurationLike[property];\n if (value !== undefined) {\n any = true;\n result[property] = ToIntegerWithoutRounding(value);\n }\n }\n if (!any) {\n throw new TypeError('invalid duration-like');\n }\n return result;\n}\nfunction ToLimitedTemporalDuration(item, disallowedProperties) {\n let record = ToTemporalDurationRecord(item);\n for (const property of disallowedProperties) {\n if (record[property] !== 0) {\n throw new RangeError(`Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`);\n }\n }\n return record;\n}\nexport function ToTemporalOverflow(options) {\n if (options === undefined)\n return 'constrain';\n return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\nexport function ToTemporalDisambiguation(options) {\n if (options === undefined)\n return 'compatible';\n return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\nexport function ToTemporalRoundingMode(options, fallback) {\n return GetOption(options, 'roundingMode', ['ceil', 'floor', 'trunc', 'halfExpand'], fallback);\n}\nfunction NegateTemporalRoundingMode(roundingMode) {\n switch (roundingMode) {\n case 'ceil':\n return 'floor';\n case 'floor':\n return 'ceil';\n default:\n return roundingMode;\n }\n}\nexport function ToTemporalOffset(options, fallback) {\n if (options === undefined)\n return fallback;\n return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\nexport function ToShowCalendarOption(options) {\n return GetOption(options, 'calendarName', ['auto', 'always', 'never'], 'auto');\n}\nexport function ToShowTimeZoneNameOption(options) {\n return GetOption(options, 'timeZoneName', ['auto', 'never'], 'auto');\n}\nexport function ToShowOffsetOption(options) {\n return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\nexport function ToTemporalRoundingIncrement(options, dividend, inclusive) {\n let maximum = Infinity;\n if (dividend !== undefined)\n maximum = dividend;\n if (!inclusive && dividend !== undefined)\n maximum = dividend > 1 ? dividend - 1 : 1;\n const increment = GetNumberOption(options, 'roundingIncrement', 1, maximum, 1);\n if (dividend !== undefined && dividend % increment !== 0) {\n throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n }\n return increment;\n}\nexport function ToTemporalDateTimeRoundingIncrement(options, smallestUnit) {\n const maximumIncrements = {\n year: undefined,\n month: undefined,\n week: undefined,\n day: undefined,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n return ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n}\nexport function ToSecondsStringPrecision(options) {\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n if (smallestUnit === 'hour') {\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n // Weirdly, local type inference seems to understand the types of s and p, but tsc still complains.\n // Maybe this is fixed in later TS versions?\n if (c === 'time' && s !== 'hour') {\n allowed.push(s, p);\n }\n return allowed;\n }, []);\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n switch (smallestUnit) {\n case 'minute':\n return { precision: 'minute', unit: 'minute', increment: 1 };\n case 'second':\n return { precision: 0, unit: 'second', increment: 1 };\n case 'millisecond':\n return { precision: 3, unit: 'millisecond', increment: 1 };\n case 'microsecond':\n return { precision: 6, unit: 'microsecond', increment: 1 };\n case 'nanosecond':\n return { precision: 9, unit: 'nanosecond', increment: 1 };\n default: // fall through if option not given\n }\n let digits = options.fractionalSecondDigits;\n if (digits === undefined)\n digits = 'auto';\n if (typeof digits !== 'number') {\n const stringDigits = ToString(digits);\n if (stringDigits === 'auto')\n return { precision: 'auto', unit: 'nanosecond', increment: 1 };\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${stringDigits}`);\n }\n if (NumberIsNaN(digits) || digits < 0 || digits > 9) {\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n const precision = MathFloor(digits);\n switch (precision) {\n case 0:\n return { precision, unit: 'second', increment: 1 };\n case 1:\n case 2:\n case 3:\n return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n case 4:\n case 5:\n case 6:\n return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n case 7:\n case 8:\n case 9:\n return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n default:\n throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digits}`);\n }\n}\nexport const REQUIRED = Symbol('~required~');\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit(options, key, unitGroup, requiredOrDefault, extraValues = []) {\n const allowedSingular = [];\n for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n if (unitGroup === 'datetime' || unitGroup === category) {\n allowedSingular.push(singular);\n }\n }\n allowedSingular.push(...extraValues);\n let defaultVal = requiredOrDefault;\n if (defaultVal === REQUIRED) {\n defaultVal = undefined;\n }\n else if (defaultVal !== undefined) {\n allowedSingular.push(defaultVal);\n }\n const allowedValues = [\n ...allowedSingular\n ];\n for (const singular of allowedSingular) {\n const plural = PLURAL_FOR.get(singular);\n if (plural !== undefined)\n allowedValues.push(plural);\n }\n let retval = GetOption(options, key, allowedValues, defaultVal);\n if (retval === undefined && requiredOrDefault === REQUIRED) {\n throw new RangeError(`${key} is required`);\n }\n // Coerce any plural units into their singular form\n if (SINGULAR_FOR.has(retval)) {\n // We just has-checked this, but tsc doesn't understand that.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(retval);\n }\n return retval;\n}\nexport function ToRelativeTemporalObject(options) {\n const relativeTo = options.relativeTo;\n if (relativeTo === undefined)\n return relativeTo;\n let offsetBehaviour = 'option';\n let matchMinutes = false;\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n if (IsObject(relativeTo)) {\n if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo))\n return relativeTo;\n if (IsTemporalDateTime(relativeTo))\n return TemporalDateTimeToDate(relativeTo);\n calendar = GetTemporalCalendarWithISODefault(relativeTo);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n const dateOptions = ObjectCreate(null);\n dateOptions.overflow = 'constrain';\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, dateOptions));\n // The `offset` and `timeZone` properties only exist on ZonedDateTime (or\n // ZonedDateTimeLike-property bags). The assertions below are used to avoid\n // TS errors while not diverging runtime code from proposal-temporal.\n offset = relativeTo.offset;\n if (offset === undefined)\n offsetBehaviour = 'wall';\n timeZone = relativeTo.timeZone;\n }\n else {\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n ParseISODateTime(ToString(relativeTo)));\n if (ianaName)\n timeZone = ianaName;\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinutes = true;\n }\n if (timeZone !== undefined) {\n timeZone = ToTemporalTimeZone(timeZone);\n let offsetNs = 0;\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(ToString(offset));\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, 'compatible', 'reject', matchMinutes);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n }\n return CreateTemporalDate(year, month, day, calendar);\n}\nexport function DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n for (const [prop, v] of [\n ['years', years],\n ['months', months],\n ['weeks', weeks],\n ['days', days],\n ['hours', hours],\n ['minutes', minutes],\n ['seconds', seconds],\n ['milliseconds', milliseconds],\n ['microseconds', microseconds],\n ['nanoseconds', nanoseconds]\n ]) {\n if (v !== 0) {\n // All the above keys are definitely in SINGULAR_FOR\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return SINGULAR_FOR.get(prop);\n }\n }\n return 'nanosecond';\n}\nexport function LargerOfTwoTemporalUnits(unit1, unit2) {\n if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2))\n return unit2;\n return unit1;\n}\nfunction MergeLargestUnitOption(optionsParam, largestUnit) {\n let options = optionsParam;\n if (options === undefined)\n options = ObjectCreate(null);\n return ObjectAssign(ObjectCreate(null), options, { largestUnit });\n}\nexport function PrepareTemporalFields(bag, fields, requiredFields, { emptySourceErrorMessage } = { emptySourceErrorMessage: 'no supported properties found' }) {\n const result = ObjectCreate(null);\n let any = false;\n for (const property of fields) {\n let value = bag[property];\n if (value !== undefined) {\n any = true;\n if (BUILTIN_CASTS.has(property)) {\n // We just has-checked this map access, so there will definitely be a\n // value.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n value = BUILTIN_CASTS.get(property)(value);\n }\n result[property] = value;\n }\n else if (requiredFields !== 'partial') {\n // TODO: using .call in this way is not correctly type-checked by tsc.\n // We might need a type-safe Call wrapper?\n if (ArrayIncludes.call(requiredFields, property)) {\n throw new TypeError(`required property '${property}' missing or undefined`);\n }\n value = BUILTIN_DEFAULTS.get(property);\n result[property] = value;\n }\n }\n if (requiredFields === 'partial' && !any) {\n throw new TypeError(emptySourceErrorMessage);\n }\n if ((result.era === undefined) !== (result.eraYear === undefined)) {\n throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n }\n return result;\n}\nexport function ToTemporalTimeRecord(bag, completeness = 'complete') {\n // NOTE: Field order here is important.\n const fields = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n const result = {};\n for (const field of fields) {\n const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n if (valueDesc !== undefined) {\n result[field] = valueDesc.value;\n }\n else if (completeness === 'complete') {\n result[field] = 0;\n }\n }\n return result;\n}\nexport function ToTemporalDate(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalDate(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarDateFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n const { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n if (z)\n throw new RangeError('Z designator not supported for PlainDate');\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n return new TemporalPlainDate(year, month, day, calendar); // include validation\n}\nexport function InterpretTemporalDateTimeFields(calendar, fields, options) {\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n const overflow = ToTemporalOverflow(options);\n const date = CalendarDateFromFields(calendar, fields, options);\n const year = GetSlot(date, ISO_YEAR);\n const month = GetSlot(date, ISO_MONTH);\n const day = GetSlot(date, ISO_DAY);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function ToTemporalDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalDateTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDate(item)) {\n ToTemporalOverflow(options); // validate and ignore\n return CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), 0, 0, 0, 0, 0, 0, GetSlot(item, CALENDAR));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n ParseTemporalDateTimeString(ToString(item)));\n if (z)\n throw new RangeError('Z designator not supported for PlainDateTime');\n RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n }\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function ToTemporalDuration(item) {\n if (IsTemporalDuration(item))\n return item;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(item);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function ToTemporalInstant(item) {\n if (IsTemporalInstant(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n }\n const ns = ParseTemporalInstant(ToString(item));\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(ns);\n}\nexport function ToTemporalMonthDay(itemParam, options) {\n let item = itemParam;\n if (IsObject(item)) {\n if (IsTemporalMonthDay(item))\n return item;\n let calendar, calendarAbsent;\n if (HasSlot(item, CALENDAR)) {\n calendar = GetSlot(item, CALENDAR);\n calendarAbsent = false;\n }\n else {\n let maybeStringCalendar = item.calendar;\n calendarAbsent = maybeStringCalendar === undefined;\n if (maybeStringCalendar === undefined)\n maybeStringCalendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(maybeStringCalendar);\n }\n // HasSlot above adjusts the type of 'item' to include\n // TypesWithCalendarUnits, which causes type-inference failures below.\n // This is probably indicative of problems with HasSlot's typing.\n item = item;\n const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n // Callers who omit the calendar are not writing calendar-independent\n // code. In that case, `monthCode`/`year` can be omitted; `month` and\n // `day` are sufficient. Add a `year` to satisfy calendar validation.\n if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n fields.year = 1972;\n }\n return CalendarMonthDayFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { month, day, referenceISOYear, calendar: maybeStringCalendar } = ParseTemporalMonthDayString(ToString(item));\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISOYear === undefined) {\n RejectISODate(1972, month, day);\n return CreateTemporalMonthDay(month, day, calendar);\n }\n const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n return CalendarMonthDayFromFields(calendar, result);\n}\nexport function ToTemporalTime(itemParam, overflow = 'constrain') {\n let item = itemParam;\n let hour, minute, second, millisecond, microsecond, nanosecond, calendar;\n if (IsObject(item)) {\n if (IsTemporalTime(item))\n return item;\n if (IsTemporalZonedDateTime(item)) {\n item = BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n }\n if (IsTemporalDateTime(item)) {\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n calendar = GetTemporalCalendarWithISODefault(item);\n if (ToString(calendar) !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n }\n else {\n ({ hour, minute, second, millisecond, microsecond, nanosecond, calendar } = ParseTemporalTimeString(ToString(item)));\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n if (calendar !== undefined && calendar !== 'iso8601') {\n throw new RangeError('PlainTime can only have iso8601 calendar');\n }\n }\n const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function ToTemporalYearMonth(item, options) {\n if (IsObject(item)) {\n if (IsTemporalYearMonth(item))\n return item;\n const calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const fields = PrepareTemporalFields(item, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, fields, options);\n }\n ToTemporalOverflow(options); // validate and ignore\n let { year, month, referenceISODay, calendar: maybeStringCalendar } = ParseTemporalYearMonthString(ToString(item));\n // TODO: replace with ternary?\n let calendar = maybeStringCalendar;\n if (calendar === undefined)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n if (referenceISODay === undefined) {\n RejectISODate(year, month, 1);\n return CreateTemporalYearMonth(year, month, calendar);\n }\n const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n return CalendarYearMonthFromFields(calendar, result);\n}\nexport function InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n // Simple case: ISO string without a TZ offset (or caller wants to ignore\n // the offset), so just convert DateTime to Instant in the given time zone\n const instant = BuiltinTimeZoneGetInstantFor(timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n }\n // The caller wants the offset to always win ('use') OR the caller is OK\n // with the offset winning ('prefer' or 'reject') as long as it's valid\n // for this timezone and date/time.\n if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n // Calculate the instant for the input's date/time and offset\n const epochNs = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (epochNs === null)\n throw new RangeError('ZonedDateTime outside of supported range');\n return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n }\n // \"prefer\" or \"reject\"\n const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n for (const candidate of possibleInstants) {\n const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n const roundedCandidateOffset = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(candidateOffset), 60e9, 'halfExpand'));\n if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n return GetSlot(candidate, EPOCHNANOSECONDS);\n }\n }\n // the user-provided offset doesn't match any instants for this time\n // zone and date/time.\n if (offsetOpt === 'reject') {\n const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n // toString (which is invoked by Node when using template literals directly).\n // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n }\n // fall through: offsetOpt === 'prefer', but the offset doesn't match\n // so fall back to use the time zone instead.\n const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n return GetSlot(instant, EPOCHNANOSECONDS);\n}\nexport function ToTemporalZonedDateTime(item, options) {\n let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, timeZone, offset, calendar;\n let matchMinute = false;\n let offsetBehaviour = 'option';\n if (IsObject(item)) {\n if (IsTemporalZonedDateTime(item))\n return item;\n calendar = GetTemporalCalendarWithISODefault(item);\n const fieldNames = CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldNamesWithTzAndOffset = ArrayPush(fieldNames, 'timeZone', 'offset');\n const fields = PrepareTemporalFields(item, fieldNamesWithTzAndOffset, ['timeZone']);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(calendar, fields, options));\n timeZone = ToTemporalTimeZone(fields.timeZone);\n offset = fields.offset;\n if (offset === undefined) {\n offsetBehaviour = 'wall';\n }\n else {\n offset = ToString(offset);\n }\n }\n else {\n ToTemporalOverflow(options); // validate and ignore\n let ianaName, z;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n ParseTemporalZonedDateTimeString(ToString(item)));\n if (!ianaName)\n throw new RangeError('time zone ID required in brackets');\n if (z) {\n offsetBehaviour = 'exact';\n }\n else if (!offset) {\n offsetBehaviour = 'wall';\n }\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n timeZone = new TemporalTimeZone(ianaName);\n if (!calendar)\n calendar = GetISO8601Calendar();\n calendar = ToTemporalCalendar(calendar);\n matchMinute = true; // ISO strings may specify offset with less precision\n }\n let offsetNs = 0;\n // The code above guarantees that if offsetBehaviour === 'option', then\n // `offset` is not undefined.\n if (offsetBehaviour === 'option')\n offsetNs = ParseTimeZoneOffsetString(offset);\n const disambiguation = ToTemporalDisambiguation(options);\n const offsetOpt = ToTemporalOffset(options, 'reject');\n const epochNanoseconds = InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offsetBehaviour, offsetNs, timeZone, disambiguation, offsetOpt, matchMinute);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nexport function CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar) {\n RejectISODate(isoYear, isoMonth, isoDay);\n RejectDateRange(isoYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, DATE_BRAND, true);\n if (DEBUG) {\n ObjectDefineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDate(isoYear, isoMonth, isoDay, calendar = GetISO8601Calendar()) {\n const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n const result = ObjectCreate(TemporalPlainDate.prototype);\n CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n return result;\n}\nexport function CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar) {\n RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_HOUR, h);\n SetSlot(result, ISO_MINUTE, min);\n SetSlot(result, ISO_SECOND, s);\n SetSlot(result, ISO_MILLISECOND, ms);\n SetSlot(result, ISO_MICROSECOND, µs);\n SetSlot(result, ISO_NANOSECOND, ns);\n SetSlot(result, CALENDAR, calendar);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar = GetISO8601Calendar()) {\n const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const result = ObjectCreate(TemporalPlainDateTime.prototype);\n CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n return result;\n}\nexport function CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear) {\n RejectISODate(referenceISOYear, isoMonth, isoDay);\n RejectDateRange(referenceISOYear, isoMonth, isoDay);\n CreateSlots(result);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, isoDay);\n SetSlot(result, ISO_YEAR, referenceISOYear);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, MONTH_DAY_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalMonthDay(isoMonth, isoDay, calendar = GetISO8601Calendar(), referenceISOYear = 1972) {\n const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n return result;\n}\nexport function CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay) {\n RejectISODate(isoYear, isoMonth, referenceISODay);\n RejectYearMonthRange(isoYear, isoMonth);\n CreateSlots(result);\n SetSlot(result, ISO_YEAR, isoYear);\n SetSlot(result, ISO_MONTH, isoMonth);\n SetSlot(result, ISO_DAY, referenceISODay);\n SetSlot(result, CALENDAR, calendar);\n SetSlot(result, YEAR_MONTH_BRAND, true);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalYearMonth(isoYear, isoMonth, calendar = GetISO8601Calendar(), referenceISODay = 1) {\n const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n return result;\n}\nexport function CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar) {\n ValidateEpochNanoseconds(epochNanoseconds);\n CreateSlots(result);\n SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n SetSlot(result, TIME_ZONE, timeZone);\n SetSlot(result, CALENDAR, calendar);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n SetSlot(result, INSTANT, instant);\n if (DEBUG) {\n Object.defineProperty(result, '_repr_', {\n value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n}\nexport function CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar = GetISO8601Calendar()) {\n const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n const result = ObjectCreate(TemporalZonedDateTime.prototype);\n CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n return result;\n}\nexport function GetISO8601Calendar() {\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n return new TemporalCalendar('iso8601');\n}\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields(calendar, fieldNamesParam) {\n let fieldNames = fieldNamesParam;\n if (calendar.fields) {\n fieldNames = calendar.fields(fieldNames);\n }\n const result = [];\n for (const name of fieldNames) {\n if (typeof name !== 'string')\n throw new TypeError('bad return from calendar.fields()');\n ArrayPrototypePush.call(result, name);\n }\n return result;\n}\nexport function CalendarMergeFields(calendar, fields, additionalFields) {\n const calMergeFields = calendar.mergeFields;\n if (!calMergeFields) {\n return { ...fields, ...additionalFields };\n }\n const result = Reflect.apply(calMergeFields, calendar, [fields, additionalFields]);\n if (!IsObject(result))\n throw new TypeError('bad return from calendar.mergeFields()');\n return result;\n}\nexport function CalendarDateAdd(calendar, date, duration, options, dateAddParam) {\n let dateAdd = dateAddParam;\n if (dateAdd === undefined) {\n dateAdd = calendar.dateAdd;\n }\n const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nfunction CalendarDateUntil(calendar, date, otherDate, options, dateUntilParam) {\n let dateUntil = dateUntilParam;\n if (dateUntil === undefined) {\n dateUntil = calendar.dateUntil;\n }\n const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n if (!IsTemporalDuration(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYear(calendar, dateLike) {\n const result = calendar.year(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar year result must be an integer');\n }\n return ToIntegerThrowOnInfinity(result);\n}\nexport function CalendarMonth(calendar, dateLike) {\n const result = calendar.month(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar month result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarMonthCode(calendar, dateLike) {\n const result = calendar.monthCode(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar monthCode result must be a string');\n }\n return ToString(result);\n}\nexport function CalendarDay(calendar, dateLike) {\n const result = calendar.day(dateLike);\n if (result === undefined) {\n throw new RangeError('calendar day result must be a positive integer');\n }\n return ToPositiveInteger(result);\n}\nexport function CalendarEra(calendar, dateLike) {\n let result = calendar.era(dateLike);\n if (result !== undefined) {\n result = ToString(result);\n }\n return result;\n}\nexport function CalendarEraYear(calendar, dateLike) {\n let result = calendar.eraYear(dateLike);\n if (result !== undefined) {\n result = ToIntegerThrowOnInfinity(result);\n }\n return result;\n}\nexport function CalendarDayOfWeek(calendar, dateLike) {\n return calendar.dayOfWeek(dateLike);\n}\nexport function CalendarDayOfYear(calendar, dateLike) {\n return calendar.dayOfYear(dateLike);\n}\nexport function CalendarWeekOfYear(calendar, dateLike) {\n return calendar.weekOfYear(dateLike);\n}\nexport function CalendarDaysInWeek(calendar, dateLike) {\n return calendar.daysInWeek(dateLike);\n}\nexport function CalendarDaysInMonth(calendar, dateLike) {\n return calendar.daysInMonth(dateLike);\n}\nexport function CalendarDaysInYear(calendar, dateLike) {\n return calendar.daysInYear(dateLike);\n}\nexport function CalendarMonthsInYear(calendar, dateLike) {\n return calendar.monthsInYear(dateLike);\n}\nexport function CalendarInLeapYear(calendar, dateLike) {\n return calendar.inLeapYear(dateLike);\n}\nexport function ToTemporalCalendar(calendarLikeParam) {\n let calendarLike = calendarLikeParam;\n if (IsObject(calendarLike)) {\n if (HasSlot(calendarLike, CALENDAR))\n return GetSlot(calendarLike, CALENDAR);\n if (!('calendar' in calendarLike))\n return calendarLike;\n calendarLike = calendarLike.calendar;\n if (IsObject(calendarLike) && !('calendar' in calendarLike))\n return calendarLike;\n }\n const identifier = ToString(calendarLike);\n const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n if (IsBuiltinCalendar(identifier))\n return new TemporalCalendar(identifier);\n let calendar;\n try {\n ({ calendar } = ParseISODateTime(identifier));\n }\n catch {\n throw new RangeError(`Invalid calendar: ${identifier}`);\n }\n if (!calendar)\n calendar = 'iso8601';\n return new TemporalCalendar(calendar);\n}\nfunction GetTemporalCalendarWithISODefault(item) {\n if (HasSlot(item, CALENDAR))\n return GetSlot(item, CALENDAR);\n const { calendar } = item;\n if (calendar === undefined)\n return GetISO8601Calendar();\n return ToTemporalCalendar(calendar);\n}\nexport function CalendarEquals(one, two) {\n if (one === two)\n return true;\n const cal1 = ToString(one);\n const cal2 = ToString(two);\n return cal1 === cal2;\n}\nexport function ConsolidateCalendars(one, two) {\n if (one === two)\n return two;\n const sOne = ToString(one);\n const sTwo = ToString(two);\n if (sOne === sTwo || sOne === 'iso8601') {\n return two;\n }\n else if (sTwo === 'iso8601') {\n return one;\n }\n else {\n throw new RangeError('irreconcilable calendars');\n }\n}\nexport function CalendarDateFromFields(calendar, fields, options) {\n const result = calendar.dateFromFields(fields, options);\n if (!IsTemporalDate(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarYearMonthFromFields(calendar, fields, options) {\n const result = calendar.yearMonthFromFields(fields, options);\n if (!IsTemporalYearMonth(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function CalendarMonthDayFromFields(calendar, fields, options) {\n const result = calendar.monthDayFromFields(fields, options);\n if (!IsTemporalMonthDay(result))\n throw new TypeError('invalid result');\n return result;\n}\nexport function ToTemporalTimeZone(temporalTimeZoneLikeParam) {\n let temporalTimeZoneLike = temporalTimeZoneLikeParam;\n if (IsObject(temporalTimeZoneLike)) {\n if (IsTemporalZonedDateTime(temporalTimeZoneLike))\n return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n if (!('timeZone' in temporalTimeZoneLike))\n return temporalTimeZoneLike;\n temporalTimeZoneLike = temporalTimeZoneLike.timeZone;\n if (IsObject(temporalTimeZoneLike) && !('timeZone' in temporalTimeZoneLike)) {\n return temporalTimeZoneLike;\n }\n }\n const identifier = ToString(temporalTimeZoneLike);\n const timeZone = ParseTemporalTimeZone(identifier);\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(timeZone);\n}\nexport function TimeZoneEquals(one, two) {\n if (one === two)\n return true;\n const tz1 = ToString(one);\n const tz2 = ToString(two);\n return tz1 === tz2;\n}\nexport function TemporalDateTimeToDate(dateTime) {\n return CreateTemporalDate(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, CALENDAR));\n}\nexport function TemporalDateTimeToTime(dateTime) {\n const Time = GetIntrinsic('%Temporal.PlainTime%');\n return new Time(GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n}\nexport function GetOffsetNanosecondsFor(timeZone, instant) {\n let getOffsetNanosecondsFor = timeZone.getOffsetNanosecondsFor;\n if (typeof getOffsetNanosecondsFor !== 'function') {\n throw new TypeError('getOffsetNanosecondsFor not callable');\n }\n const offsetNs = Reflect.apply(getOffsetNanosecondsFor, timeZone, [instant]);\n if (typeof offsetNs !== 'number') {\n throw new TypeError('bad return from getOffsetNanosecondsFor');\n }\n if (!IsInteger(offsetNs) || MathAbs(offsetNs) > 86400e9) {\n throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n }\n return offsetNs;\n}\nexport function BuiltinTimeZoneGetOffsetStringFor(timeZone, instant) {\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n return FormatTimeZoneOffsetString(offsetNs);\n}\nexport function BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar) {\n const ns = GetSlot(instant, EPOCHNANOSECONDS);\n const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond + offsetNs));\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation) {\n const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\nfunction DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation) {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const numInstants = possibleInstants.length;\n if (numInstants === 1)\n return possibleInstants[0];\n if (numInstants) {\n switch (disambiguation) {\n case 'compatible':\n // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n case 'earlier':\n return possibleInstants[0];\n case 'later':\n return possibleInstants[numInstants - 1];\n case 'reject': {\n throw new RangeError('multiple instants found');\n }\n }\n }\n const year = GetSlot(dateTime, ISO_YEAR);\n const month = GetSlot(dateTime, ISO_MONTH);\n const day = GetSlot(dateTime, ISO_DAY);\n const hour = GetSlot(dateTime, ISO_HOUR);\n const minute = GetSlot(dateTime, ISO_MINUTE);\n const second = GetSlot(dateTime, ISO_SECOND);\n const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n const utcns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utcns === null)\n throw new RangeError('DateTime outside of supported range');\n const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n const nanoseconds = offsetAfter - offsetBefore;\n switch (disambiguation) {\n case 'earlier': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const earlier = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, -nanoseconds, undefined);\n const earlierPlainDateTime = new PlainDateTime(earlier.year, earlier.month, earlier.day, earlier.hour, earlier.minute, earlier.second, earlier.millisecond, earlier.microsecond, earlier.nanosecond, calendar);\n return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n }\n case 'compatible':\n // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n case 'later': {\n const calendar = GetSlot(dateTime, CALENDAR);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const later = AddDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, 0, 0, 0, 0, 0, 0, 0, 0, 0, nanoseconds, undefined);\n const laterPlainDateTime = new PlainDateTime(later.year, later.month, later.day, later.hour, later.minute, later.second, later.millisecond, later.microsecond, later.nanosecond, calendar);\n const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n return possible[possible.length - 1];\n }\n case 'reject': {\n throw new RangeError('no such instant found');\n }\n }\n}\nfunction GetPossibleInstantsFor(timeZone, dateTime) {\n const possibleInstants = timeZone.getPossibleInstantsFor(dateTime);\n const result = [];\n for (const instant of possibleInstants) {\n if (!IsTemporalInstant(instant)) {\n throw new TypeError('bad return from getPossibleInstantsFor');\n }\n ArrayPrototypePush.call(result, instant);\n }\n return result;\n}\nexport function ISOYearString(year) {\n let yearString;\n if (year < 0 || year > 9999) {\n const sign = year < 0 ? '-' : '+';\n const yearNumber = MathAbs(year);\n yearString = sign + `000000${yearNumber}`.slice(-6);\n }\n else {\n yearString = `0000${year}`.slice(-4);\n }\n return yearString;\n}\nexport function ISODateTimePartString(part) {\n return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision) {\n if (precision === 'minute')\n return '';\n const secs = `:${ISODateTimePartString(second)}`;\n let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n let fraction;\n if (precision === 'auto') {\n if (fractionNumber === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n }\n else {\n if (precision === 0)\n return secs;\n fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n }\n return `${secs}.${fraction}`;\n}\nexport function TemporalInstantToString(instant, timeZone, precision) {\n let outputTimeZone = timeZone;\n if (outputTimeZone === undefined) {\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n outputTimeZone = new TemporalTimeZone('UTC');\n }\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(outputTimeZone, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let timeZoneString = 'Z';\n if (timeZone !== undefined) {\n const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n }\n return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\nexport function TemporalDurationToString(duration, precision = 'auto', options = undefined) {\n function formatNumber(num) {\n if (num <= NumberMaxSafeInteger)\n return num.toString(10);\n return JSBI.BigInt(num).toString(10);\n }\n const years = GetSlot(duration, YEARS);\n const months = GetSlot(duration, MONTHS);\n const weeks = GetSlot(duration, WEEKS);\n const days = GetSlot(duration, DAYS);\n const hours = GetSlot(duration, HOURS);\n const minutes = GetSlot(duration, MINUTES);\n let seconds = GetSlot(duration, SECONDS);\n let ms = GetSlot(duration, MILLISECONDS);\n let µs = GetSlot(duration, MICROSECONDS);\n let ns = GetSlot(duration, NANOSECONDS);\n const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({\n seconds,\n milliseconds: ms,\n microseconds: µs,\n nanoseconds: ns\n } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n }\n const dateParts = [];\n if (years)\n dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n if (months)\n dateParts.push(`${formatNumber(MathAbs(months))}M`);\n if (weeks)\n dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n if (days)\n dateParts.push(`${formatNumber(MathAbs(days))}D`);\n const timeParts = [];\n if (hours)\n timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n if (minutes)\n timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n const secondParts = [];\n let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n let nsBigInt, µsBigInt, msBigInt, secondsBigInt;\n ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n const fraction = MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n let decimalPart;\n if (precision === 'auto') {\n if (fraction !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0');\n while (decimalPart[decimalPart.length - 1] === '0') {\n decimalPart = decimalPart.slice(0, -1);\n }\n }\n }\n else if (precision !== 0) {\n decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n }\n if (decimalPart)\n secondParts.unshift('.', decimalPart);\n if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n secondParts.unshift(abs(secondsBigInt).toString());\n }\n if (secondParts.length)\n timeParts.push(`${secondParts.join('')}S`);\n if (timeParts.length)\n timeParts.unshift('T');\n if (!dateParts.length && !timeParts.length)\n return 'PT0S';\n return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\nexport function TemporalDateToString(date, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(date, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n const calendarID = ToString(GetSlot(date, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${year}-${month}-${day}${calendar}`;\n}\nexport function TemporalDateTimeToString(dateTime, precision, showCalendar = 'auto', options = undefined) {\n let year = GetSlot(dateTime, ISO_YEAR);\n let month = GetSlot(dateTime, ISO_MONTH);\n let day = GetSlot(dateTime, ISO_DAY);\n let hour = GetSlot(dateTime, ISO_HOUR);\n let minute = GetSlot(dateTime, ISO_MINUTE);\n let second = GetSlot(dateTime, ISO_SECOND);\n let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const yearString = ISOYearString(year);\n const monthString = ISODateTimePartString(month);\n const dayString = ISODateTimePartString(day);\n const hourString = ISODateTimePartString(hour);\n const minuteString = ISODateTimePartString(minute);\n const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n const calendarID = ToString(GetSlot(dateTime, CALENDAR));\n const calendar = FormatCalendarAnnotation(calendarID, showCalendar);\n return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\nexport function TemporalMonthDayToString(monthDay, showCalendar = 'auto') {\n const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n let resultString = `${month}-${day}`;\n const calendar = GetSlot(monthDay, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n resultString = `${year}-${resultString}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalYearMonthToString(yearMonth, showCalendar = 'auto') {\n const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n let resultString = `${year}-${month}`;\n const calendar = GetSlot(yearMonth, CALENDAR);\n const calendarID = ToString(calendar);\n if (showCalendar === 'always' || calendarID !== 'iso8601') {\n const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n resultString += `-${day}`;\n }\n const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n if (calendarString)\n resultString += calendarString;\n return resultString;\n}\nexport function TemporalZonedDateTimeToString(zdt, precision, showCalendar = 'auto', showTimeZone = 'auto', showOffset = 'auto', options = undefined) {\n let instant = GetSlot(zdt, INSTANT);\n if (options) {\n const { unit, increment, roundingMode } = options;\n const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n instant = new TemporalInstant(ns);\n }\n const tz = GetSlot(zdt, TIME_ZONE);\n const iso = GetISO8601Calendar();\n const dateTime = BuiltinTimeZoneGetPlainDateTimeFor(tz, instant, iso);\n const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n const seconds = FormatSecondsStringPart(GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), precision);\n let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n if (showOffset !== 'never') {\n const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n result += FormatISOTimeZoneOffsetString(offsetNs);\n }\n if (showTimeZone !== 'never')\n result += `[${tz}]`;\n const calendarID = ToString(GetSlot(zdt, CALENDAR));\n result += FormatCalendarAnnotation(calendarID, showCalendar);\n return result;\n}\nexport function TestTimeZoneOffsetString(string) {\n return OFFSET.test(StringCtor(string));\n}\nexport function ParseTimeZoneOffsetString(string) {\n const match = OFFSET.exec(StringCtor(string));\n if (!match) {\n throw new RangeError(`invalid time zone offset: ${string}`);\n }\n const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n const hours = +match[2];\n const minutes = +(match[3] || 0);\n const seconds = +(match[4] || 0);\n const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier) {\n if (TestTimeZoneOffsetString(timeZoneIdentifier)) {\n const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n return FormatTimeZoneOffsetString(offsetNs);\n }\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n return formatter.resolvedOptions().timeZone;\n}\nexport function GetIANATimeZoneOffsetNanoseconds(epochNanoseconds, id) {\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n const utc = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (utc === null)\n throw new RangeError('Date outside of supported range');\n return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam) {\n const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n const nanoseconds = offsetNanoseconds % 1e9;\n const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n const secondString = ISODateTimePartString(seconds);\n let post = '';\n if (nanoseconds) {\n let fraction = `${nanoseconds}`.padStart(9, '0');\n while (fraction[fraction.length - 1] === '0')\n fraction = fraction.slice(0, -1);\n post = `:${secondString}.${fraction}`;\n }\n else if (seconds) {\n post = `:${secondString}`;\n }\n return `${sign}${hourString}:${minuteString}${post}`;\n}\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam) {\n let offsetNanoseconds = JSBI.toNumber(RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), 60e9, 'halfExpand'));\n const sign = offsetNanoseconds < 0 ? '-' : '+';\n offsetNanoseconds = MathAbs(offsetNanoseconds);\n const minutes = (offsetNanoseconds / 60e9) % 60;\n const hours = MathFloor(offsetNanoseconds / 3600e9);\n const hourString = ISODateTimePartString(hours);\n const minuteString = ISODateTimePartString(minutes);\n return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n // Note: Date.UTC() interprets one and two-digit years as being in the\n // 20th century, so don't use it\n const legacyDate = new Date();\n legacyDate.setUTCHours(hour, minute, second, millisecond);\n legacyDate.setUTCFullYear(year, month - 1, day);\n const ms = legacyDate.getTime();\n if (NumberIsNaN(ms))\n return null;\n let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX))\n return null;\n return ns;\n}\nfunction GetISOPartsFromEpoch(epochNanoseconds) {\n const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n let epochMilliseconds = JSBI.toNumber(quotient);\n let nanos = JSBI.toNumber(remainder);\n if (nanos < 0) {\n nanos += 1e6;\n epochMilliseconds -= 1;\n }\n const microsecond = MathFloor(nanos / 1e3) % 1e3;\n const nanosecond = nanos % 1e3;\n const item = new Date(epochMilliseconds);\n const year = item.getUTCFullYear();\n const month = item.getUTCMonth() + 1;\n const day = item.getUTCDate();\n const hour = item.getUTCHours();\n const minute = item.getUTCMinutes();\n const second = item.getUTCSeconds();\n const millisecond = item.getUTCMilliseconds();\n return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetIANATimeZoneDateTimeParts(epochNanoseconds, id) {\n const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction maxJSBI(one, two) {\n return JSBI.lessThan(one, two) ? two : one;\n}\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\nexport function GetIANATimeZoneNextTransition(epochNanoseconds, id) {\n // Decide how far in the future after `epochNanoseconds` we'll look for an\n // offset change. There are two cases:\n // 1. If it's a past date (or a date in the near future) then it's possible\n // that the time zone may have newly added DST in the next few years. So\n // we'll have to look from the provided time until a few years after the\n // current system time. (Changes to DST policy are usually announced a few\n // years in the future.) Note that the first DST anywhere started in 1847,\n // so we'll start checks in 1847 instead of wasting cycles on years where\n // there will never be transitions.\n // 2. If it's a future date beyond the next few years, then we'll just assume\n // that the latest DST policy in TZDB will still be in effect. In this\n // case, we only need to look one year in the future to see if there are\n // any DST transitions. We actually only need to look 9-10 months because\n // DST has two transitions per year, but we'll use a year just to be safe.\n const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n // start there if an earlier date is supplied.\n let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n const leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n let rightNanos = leftNanos;\n let rightOffsetNs = leftOffsetNs;\n while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n if (leftOffsetNs === rightOffsetNs) {\n leftNanos = rightNanos;\n }\n }\n if (leftOffsetNs === rightOffsetNs)\n return null;\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\nexport function GetIANATimeZonePreviousTransition(epochNanoseconds, id) {\n // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n // have to look back one year to find a transition. But if it doesn't use DST,\n // then we need to look all the way back to 1847 (the earliest rule in the\n // TZDB) to see if it had other offset transitions in the past. Looping back\n // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n // also unnecessary because DST rules aren't put into the TZDB more than a few\n // years in the future because the political changes in time zones happen with\n // only a few years' warning. Therefore, if a far-future date is provided,\n // then we'll run the check in two parts:\n // 1. First, we'll look back for up to one year to see if the latest TZDB\n // rules have DST.\n // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n // current system time, and then look back to 1847. This reduces the\n // worst-case loop from 273K years to 175 years, for a ~1500x improvement\n // in worst-case perf.\n const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n const rightOffsetNs = GetIANATimeZoneOffsetNanoseconds(rightNanos, id);\n let leftNanos = rightNanos;\n let leftOffsetNs = rightOffsetNs;\n while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n leftOffsetNs = GetIANATimeZoneOffsetNanoseconds(leftNanos, id);\n if (rightOffsetNs === leftOffsetNs) {\n rightNanos = leftNanos;\n }\n }\n if (rightOffsetNs === leftOffsetNs) {\n if (isFarFuture) {\n // There was no DST after looking back one year, which means that the most\n // recent TZDB rules don't have any recurring transitions. To check for\n // transitions in older rules, back up to a few years after the current\n // date and then look all the way back to 1847. Note that we move back one\n // day from the latest possible rule so that when the recursion runs it\n // won't consider the new time to be \"far future\" because the system clock\n // has advanced in the meantime.\n const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n return GetIANATimeZonePreviousTransition(newTimeToCheck, id);\n }\n return null;\n }\n const result = bisect((epochNs) => GetIANATimeZoneOffsetNanoseconds(epochNs, id), leftNanos, rightNanos, leftOffsetNs, rightOffsetNs);\n return result;\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime) {\n const parts = datetime.split(/[^\\w]+/);\n if (parts.length !== 7) {\n throw new RangeError(`expected 7 parts in \"${datetime}`);\n }\n const month = +parts[0];\n const day = +parts[1];\n let year = +parts[2];\n const era = parts[3].toUpperCase();\n if (era === 'B' || era === 'BC') {\n year = -year + 1;\n }\n else if (era !== 'A' && era !== 'AD') {\n throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n }\n let hour = +parts[4];\n if (hour === 24) {\n // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n hour = 0;\n }\n const minute = +parts[5];\n const second = +parts[6];\n if (!NumberIsFinite(year) ||\n !NumberIsFinite(month) ||\n !NumberIsFinite(day) ||\n !NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second)) {\n throw new RangeError(`Invalid number in \"${datetime}`);\n }\n return { year, month, day, hour, minute, second };\n}\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone, epochMilliseconds) {\n const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n // Using `format` instead of `formatToParts` for compatibility with older clients\n const datetime = formatter.format(new Date(epochMilliseconds));\n return parseFromEnUsFormat(datetime);\n}\nexport function GetIANATimeZoneEpochValue(id, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n const ns = GetEpochFromISOParts(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n if (ns === null)\n throw new RangeError('DateTime outside of supported range');\n let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n if (JSBI.lessThan(nsEarlier, NS_MIN))\n nsEarlier = ns;\n let nsLater = JSBI.add(ns, DAY_NANOS);\n if (JSBI.greaterThan(nsLater, NS_MAX))\n nsLater = ns;\n const earliest = GetIANATimeZoneOffsetNanoseconds(nsEarlier, id);\n const latest = GetIANATimeZoneOffsetNanoseconds(nsLater, id);\n const found = earliest === latest ? [earliest] : [earliest, latest];\n return found\n .map((offsetNanoseconds) => {\n const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n const parts = GetIANATimeZoneDateTimeParts(epochNanoseconds, id);\n if (year !== parts.year ||\n month !== parts.month ||\n day !== parts.day ||\n hour !== parts.hour ||\n minute !== parts.minute ||\n second !== parts.second ||\n millisecond !== parts.millisecond ||\n microsecond !== parts.microsecond ||\n nanosecond !== parts.nanosecond) {\n return undefined;\n }\n return epochNanoseconds;\n })\n .filter((x) => x !== undefined);\n}\nexport function LeapYear(year) {\n if (undefined === year)\n return false;\n const isDiv4 = year % 4 === 0;\n const isDiv100 = year % 100 === 0;\n const isDiv400 = year % 400 === 0;\n return isDiv4 && (!isDiv100 || isDiv400);\n}\nexport function ISODaysInMonth(year, month) {\n const DoM = {\n standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n };\n return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\nexport function DayOfWeek(year, month, day) {\n const m = month + (month < 3 ? 10 : -2);\n const Y = year - (month < 3 ? 1 : 0);\n const c = MathFloor(Y / 100);\n const y = Y - c * 100;\n const d = day;\n const pD = d;\n const pM = MathFloor(2.6 * m - 0.2);\n const pY = y + MathFloor(y / 4);\n const pC = MathFloor(c / 4) - 2 * c;\n const dow = (pD + pM + pY + pC) % 7;\n return dow + (dow <= 0 ? 7 : 0);\n}\nexport function DayOfYear(year, month, day) {\n let days = day;\n for (let m = month - 1; m > 0; m--) {\n days += ISODaysInMonth(year, m);\n }\n return days;\n}\nexport function WeekOfYear(year, month, day) {\n const doy = DayOfYear(year, month, day);\n const dow = DayOfWeek(year, month, day) || 7;\n const doj = DayOfWeek(year, 1, 1);\n const week = MathFloor((doy - dow + 10) / 7);\n if (week < 1) {\n if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n return 53;\n }\n else {\n return 52;\n }\n }\n if (week === 53) {\n if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n return 1;\n }\n }\n return week;\n}\nexport function DurationSign(y, mon, w, d, h, min, s, ms, µs, ns) {\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (prop !== 0)\n return prop < 0 ? -1 : 1;\n }\n return 0;\n}\nfunction BalanceISOYearMonth(yearParam, monthParam) {\n let year = yearParam;\n let month = monthParam;\n if (!NumberIsFinite(year) || !NumberIsFinite(month))\n throw new RangeError('infinity is out of range');\n month -= 1;\n year += MathFloor(month / 12);\n month %= 12;\n if (month < 0)\n month += 12;\n month += 1;\n return { year, month };\n}\nfunction BalanceISODate(yearParam, monthParam, dayParam) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n if (!NumberIsFinite(day))\n throw new RangeError('infinity is out of range');\n ({ year, month } = BalanceISOYearMonth(year, month));\n let daysInYear = 0;\n let testYear = month > 2 ? year : year - 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n year -= 1;\n testYear -= 1;\n day += daysInYear;\n }\n testYear += 1;\n while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n year += 1;\n testYear += 1;\n day -= daysInYear;\n }\n while (day < 1) {\n ({ year, month } = BalanceISOYearMonth(year, month - 1));\n day += ISODaysInMonth(year, month);\n }\n while (day > ISODaysInMonth(year, month)) {\n day -= ISODaysInMonth(year, month);\n ({ year, month } = BalanceISOYearMonth(year, month + 1));\n }\n return { year, month, day };\n}\nfunction BalanceISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction BalanceTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n if (!NumberIsFinite(hour) ||\n !NumberIsFinite(minute) ||\n !NumberIsFinite(second) ||\n !NumberIsFinite(millisecond) ||\n !NumberIsFinite(microsecond) ||\n !NumberIsFinite(nanosecond)) {\n throw new RangeError('infinity is out of range');\n }\n microsecond += MathFloor(nanosecond / 1000);\n nanosecond = NonNegativeModulo(nanosecond, 1000);\n millisecond += MathFloor(microsecond / 1000);\n microsecond = NonNegativeModulo(microsecond, 1000);\n second += MathFloor(millisecond / 1000);\n millisecond = NonNegativeModulo(millisecond, 1000);\n minute += MathFloor(second / 60);\n second = NonNegativeModulo(second, 60);\n hour += MathFloor(minute / 60);\n minute = NonNegativeModulo(minute, 60);\n const deltaDays = MathFloor(hour / 24);\n hour = NonNegativeModulo(hour, 24);\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function TotalDurationNanoseconds(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, offsetShift) {\n const days = JSBI.BigInt(daysParam);\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n if (daysParam !== 0)\n nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\nfunction NanosecondsToDays(nanosecondsParam, relativeTo) {\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n let dayLengthNs = 86400e9;\n if (sign === 0)\n return { days: 0, nanoseconds: ZERO, dayLengthNs };\n if (!IsTemporalZonedDateTime(relativeTo)) {\n let days;\n ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n }\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n const start = GetSlot(relativeTo, INSTANT);\n const endNs = JSBI.add(startNs, nanoseconds);\n const end = new TemporalInstant(endNs);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n // Find the difference in days only.\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, 'day', ObjectCreate(null));\n let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n // If clock time after addition was in the middle of a skipped period, the\n // endpoint was disambiguated to a later clock time. So it's possible that\n // the resulting disambiguated result is later than endNs. If so, then back\n // up one day and try again. Repeat if necessary (some transitions are\n // > 24 hours) until either there's zero days left or the date duration is\n // back inside the period where it belongs. Note that this case only can\n // happen for positive durations because the only direction that\n // `disambiguation: 'compatible'` can change clock time is forwards.\n if (sign === 1) {\n while (days > 0 && JSBI.greaterThan(intermediateNs, endNs)) {\n --days;\n intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, days, 0, 0, 0, 0, 0, 0);\n // may do disambiguation\n }\n }\n nanoseconds = JSBI.subtract(endNs, intermediateNs);\n let isOverflow = false;\n let relativeInstant = new TemporalInstant(intermediateNs);\n do {\n // calculate length of the next day (day that contains the time remainder)\n const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n isOverflow = JSBI.greaterThan(JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)), ZERO);\n if (isOverflow) {\n nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n relativeInstant = new TemporalInstant(oneDayFartherNs);\n days += sign;\n }\n } while (isOverflow);\n return { days, nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\nexport function BalanceDuration(daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, largestUnit, relativeTo = undefined) {\n let days = daysParam;\n let nanosecondsBigInt, microsecondsBigInt, millisecondsBigInt, secondsBigInt, minutesBigInt, hoursBigInt;\n if (IsTemporalZonedDateTime(relativeTo)) {\n const endNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), GetSlot(relativeTo, TIME_ZONE), GetSlot(relativeTo, CALENDAR), 0, 0, 0, days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam);\n const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n }\n else {\n nanosecondsBigInt = TotalDurationNanoseconds(days, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, 0);\n }\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n }\n else {\n days = 0;\n }\n const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n nanosecondsBigInt = abs(nanosecondsBigInt);\n microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n switch (largestUnit) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n break;\n case 'minute':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n break;\n case 'second':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n break;\n case 'millisecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n break;\n case 'microsecond':\n ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n break;\n case 'nanosecond':\n break;\n default:\n throw new Error('assert not reached');\n }\n const hours = JSBI.toNumber(hoursBigInt) * sign;\n const minutes = JSBI.toNumber(minutesBigInt) * sign;\n const seconds = JSBI.toNumber(secondsBigInt) * sign;\n const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function UnbalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year':\n // no-op\n break;\n case 'month':\n {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance years down to months\n const dateAdd = calendar.dateAdd;\n const dateUntil = calendar.dateUntil;\n let relativeToDateOnly = relativeTo;\n while (MathAbs(years) > 0) {\n const newRelativeTo = CalendarDateAdd(calendar, relativeToDateOnly, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n const untilResult = CalendarDateUntil(calendar, relativeToDateOnly, newRelativeTo, untilOptions, dateUntil);\n const oneYearMonths = GetSlot(untilResult, MONTHS);\n relativeToDateOnly = newRelativeTo;\n months += oneYearMonths;\n years -= sign;\n }\n }\n break;\n case 'week':\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance years down to days\n while (MathAbs(years) > 0) {\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n break;\n default:\n // balance years down to days\n while (MathAbs(years) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneYearDays;\n ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n days += oneYearDays;\n years -= sign;\n }\n // balance months down to days\n while (MathAbs(months) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n days += oneMonthDays;\n months -= sign;\n }\n // balance weeks down to days\n while (MathAbs(weeks) > 0) {\n if (!calendar)\n throw new RangeError('a starting point is required for balancing calendar units');\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n days += oneWeekDays;\n weeks -= sign;\n }\n break;\n }\n return { years, months, weeks, days };\n}\nexport function BalanceDurationRelative(yearsParam, monthsParam, weeksParam, daysParam, largestUnit, relativeToParam) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n if (sign === 0)\n return { years, months, weeks, days };\n let calendar;\n let relativeTo;\n if (relativeToParam) {\n relativeTo = ToTemporalDate(relativeToParam);\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n const oneYear = new TemporalDuration(sign);\n const oneMonth = new TemporalDuration(0, sign);\n const oneWeek = new TemporalDuration(0, 0, sign);\n switch (largestUnit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('a starting point is required for years balancing');\n // balance days up to years\n let newRelativeTo, oneYearDays;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n while (MathAbs(days) >= MathAbs(oneYearDays)) {\n days -= oneYearDays;\n years += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));\n }\n // balance days up to months\n let oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n // balance months up to years\n const dateAdd = calendar.dateAdd;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const dateUntil = calendar.dateUntil;\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n let oneYearMonths = GetSlot(untilResult, MONTHS);\n while (MathAbs(months) >= MathAbs(oneYearMonths)) {\n months -= oneYearMonths;\n years += sign;\n relativeTo = newRelativeTo;\n newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'month';\n untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n oneYearMonths = GetSlot(untilResult, MONTHS);\n }\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('a starting point is required for months balancing');\n // balance days up to months\n let newRelativeTo, oneMonthDays;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n days -= oneMonthDays;\n months += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('a starting point is required for weeks balancing');\n // balance days up to weeks\n let newRelativeTo, oneWeekDays;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n days -= oneWeekDays;\n weeks += sign;\n relativeTo = newRelativeTo;\n ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n break;\n }\n default:\n // no-op\n break;\n }\n return { years, months, weeks, days };\n}\nexport function CalculateOffsetShift(relativeTo, y, mon, w, d) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n const instant = GetSlot(relativeTo, INSTANT);\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const instantAfter = new TemporalInstant(after);\n const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n return offsetAfter - offsetBefore;\n }\n return 0;\n}\nexport function CreateNegatedTemporalDuration(duration) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n return new TemporalDuration(-GetSlot(duration, YEARS), -GetSlot(duration, MONTHS), -GetSlot(duration, WEEKS), -GetSlot(duration, DAYS), -GetSlot(duration, HOURS), -GetSlot(duration, MINUTES), -GetSlot(duration, SECONDS), -GetSlot(duration, MILLISECONDS), -GetSlot(duration, MICROSECONDS), -GetSlot(duration, NANOSECONDS));\n}\nexport function ConstrainToRange(value, min, max) {\n // Math.Max accepts undefined values and returns NaN. Undefined values are\n // used for optional params in the method below.\n return MathMin(max, MathMax(min, value));\n}\nfunction ConstrainISODate(year, monthParam, dayParam) {\n const month = ConstrainToRange(monthParam, 1, 12);\n const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n return { year, month, day };\n}\nfunction ConstrainTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam) {\n const hour = ConstrainToRange(hourParam, 0, 23);\n const minute = ConstrainToRange(minuteParam, 0, 59);\n const second = ConstrainToRange(secondParam, 0, 59);\n const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RejectToRange(value, min, max) {\n if (value < min || value > max)\n throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\nfunction RejectISODate(year, month, day) {\n RejectToRange(month, 1, 12);\n RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\nfunction RejectDateRange(year, month, day) {\n // Noon avoids trouble at edges of DateTime range (excludes midnight)\n RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\nexport function RejectTime(hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(hour, 0, 23);\n RejectToRange(minute, 0, 59);\n RejectToRange(second, 0, 59);\n RejectToRange(millisecond, 0, 999);\n RejectToRange(microsecond, 0, 999);\n RejectToRange(nanosecond, 0, 999);\n}\nfunction RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectISODate(year, month, day);\n RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nfunction RejectDateTimeRange(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n // Reject any DateTime 24 hours or more outside the Instant range\n if ((year === YEAR_MIN &&\n null ==\n GetEpochFromISOParts(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n (year === YEAR_MAX &&\n null ==\n GetEpochFromISOParts(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))) {\n throw new RangeError('DateTime outside of supported range');\n }\n}\nexport function ValidateEpochNanoseconds(epochNanoseconds) {\n if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n throw new RangeError('Instant outside of supported range');\n }\n}\nfunction RejectYearMonthRange(year, month) {\n RejectToRange(year, YEAR_MIN, YEAR_MAX);\n if (year === YEAR_MIN) {\n RejectToRange(month, 4, 12);\n }\n else if (year === YEAR_MAX) {\n RejectToRange(month, 1, 9);\n }\n}\nexport function RejectDuration(y, mon, w, d, h, min, s, ms, µs, ns) {\n const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n if (!NumberIsFinite(prop))\n throw new RangeError('infinite values not allowed as duration fields');\n const propSign = MathSign(prop);\n if (propSign !== 0 && propSign !== sign)\n throw new RangeError('mixed-sign values not allowed as duration fields');\n }\n}\nexport function DifferenceISODate(y1, m1, d1, y2, m2, d2, largestUnit) {\n switch (largestUnit) {\n case 'year':\n case 'month': {\n const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n if (sign === 0)\n return { years: 0, months: 0, weeks: 0, days: 0 };\n const start = { year: y1, month: m1, day: d1 };\n const end = { year: y2, month: m2, day: d2 };\n let years = end.year - start.year;\n let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months: 0, weeks: 0, days: 0 }\n : { years: 0, months: years * 12, weeks: 0, days: 0 };\n }\n let months = end.month - start.month;\n if (midSign !== sign) {\n years -= sign;\n months += sign * 12;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n if (midSign === 0) {\n return largestUnit === 'year'\n ? { years, months, weeks: 0, days: 0 }\n : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n }\n if (midSign !== sign) {\n // The end date is later in the month than mid date (or earlier for\n // negative durations). Back up one month.\n months -= sign;\n if (months === -sign) {\n years -= sign;\n months = 11 * sign;\n }\n mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n }\n let days = 0;\n // If we get here, months and years are correct (no overflow), and `mid`\n // is within the range from `start` to `end`. To count the days between\n // `mid` and `end`, there are 3 cases:\n // 1) same month: use simple subtraction\n // 2) end is previous month from intermediate (negative duration)\n // 3) end is next month from intermediate (positive duration)\n if (mid.month === end.month) {\n // 1) same month: use simple subtraction\n days = end.day - mid.day;\n }\n else if (sign < 0) {\n // 2) end is previous month from intermediate (negative duration)\n // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n }\n else {\n // 3) end is next month from intermediate (positive duration)\n // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n }\n if (largestUnit === 'month') {\n months += years * 12;\n years = 0;\n }\n return { years, months, weeks: 0, days };\n }\n case 'week':\n case 'day': {\n let larger, smaller, sign;\n if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n smaller = { year: y1, month: m1, day: d1 };\n larger = { year: y2, month: m2, day: d2 };\n sign = 1;\n }\n else {\n smaller = { year: y2, month: m2, day: d2 };\n larger = { year: y1, month: m1, day: d1 };\n sign = -1;\n }\n let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n for (let year = smaller.year; year < larger.year; ++year) {\n days += LeapYear(year) ? 366 : 365;\n }\n let weeks = 0;\n if (largestUnit === 'week') {\n weeks = MathFloor(days / 7);\n days %= 7;\n }\n weeks *= sign;\n days *= sign;\n return { years: 0, months: 0, weeks, days };\n }\n default:\n throw new Error('assert not reached');\n }\n}\nfunction DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2) {\n let hours = h2 - h1;\n let minutes = min2 - min1;\n let seconds = s2 - s1;\n let milliseconds = ms2 - ms1;\n let microseconds = µs2 - µs1;\n let nanoseconds = ns2 - ns1;\n const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n let deltaDays = 0;\n ({\n deltaDays,\n hour: hours,\n minute: minutes,\n second: seconds,\n millisecond: milliseconds,\n microsecond: microseconds,\n nanosecond: nanoseconds\n } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n if (deltaDays != 0)\n throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n hours *= sign;\n minutes *= sign;\n seconds *= sign;\n milliseconds *= sign;\n microseconds *= sign;\n nanoseconds *= sign;\n return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceInstant(ns1, ns2, increment, unit, roundingMode) {\n const diff = JSBI.subtract(ns2, ns1);\n const remainder = JSBI.remainder(diff, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(diff, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n const roundedDiff = JSBI.add(wholeDays, roundedRemainder);\n const nanoseconds = JSBI.toNumber(JSBI.remainder(roundedDiff, THOUSAND));\n const microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, THOUSAND), THOUSAND));\n const milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(roundedDiff, MILLION), THOUSAND));\n const seconds = JSBI.toNumber(JSBI.divide(roundedDiff, BILLION));\n return { seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceISODateTime(y1Param, mon1Param, d1Param, h1, min1, s1, ms1, µs1, ns1, y2, mon2, d2, h2, min2, s2, ms2, µs2, ns2, calendar, largestUnit, options) {\n let y1 = y1Param;\n let mon1 = mon1Param;\n let d1 = d1Param;\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(h1, min1, s1, ms1, µs1, ns1, h2, min2, s2, ms2, µs2, ns2);\n const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n if (dateSign === -timeSign) {\n ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(-timeSign, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const untilOptions = MergeLargestUnitOption(options, dateLargestUnit);\n // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n // Type 'SmallestUnit | undefined' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n // Type '\"hour\"' is not assignable to type\n // 'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions);\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, options) {\n const nsDiff = JSBI.subtract(ns2, ns1);\n if (JSBI.equal(nsDiff, ZERO)) {\n return {\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n microseconds: 0,\n nanoseconds: 0\n };\n }\n // Find the difference in dates only.\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const start = new TemporalInstant(ns1);\n const end = new TemporalInstant(ns2);\n const dtStart = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, start, calendar);\n const dtEnd = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, end, calendar);\n let { years, months, weeks, days } = DifferenceISODateTime(GetSlot(dtStart, ISO_YEAR), GetSlot(dtStart, ISO_MONTH), GetSlot(dtStart, ISO_DAY), GetSlot(dtStart, ISO_HOUR), GetSlot(dtStart, ISO_MINUTE), GetSlot(dtStart, ISO_SECOND), GetSlot(dtStart, ISO_MILLISECOND), GetSlot(dtStart, ISO_MICROSECOND), GetSlot(dtStart, ISO_NANOSECOND), GetSlot(dtEnd, ISO_YEAR), GetSlot(dtEnd, ISO_MONTH), GetSlot(dtEnd, ISO_DAY), GetSlot(dtEnd, ISO_HOUR), GetSlot(dtEnd, ISO_MINUTE), GetSlot(dtEnd, ISO_SECOND), GetSlot(dtEnd, ISO_MILLISECOND), GetSlot(dtEnd, ISO_MICROSECOND), GetSlot(dtEnd, ISO_NANOSECOND), calendar, largestUnit, options);\n const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n // may disambiguate\n let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n // Finally, merge the date and time durations and return the merged result.\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour');\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n// TODO: does it make sense to explicitly union the other and options types for each operation?\nexport function DifferenceTemporalInstant(operation, instant, otherParam, optionsParam) {\n const other = ToTemporalInstant(otherParam);\n let first, second;\n if (operation === 'until') {\n [first, second] = [instant, other];\n }\n else {\n [first, second] = [other, instant];\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('second', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ToTemporalRoundingMode(options, 'trunc');\n const MAX_DIFFERENCE_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_DIFFERENCE_INCREMENTS[smallestUnit], false);\n const onens = GetSlot(first, EPOCHNANOSECONDS);\n const twons = GetSlot(second, EPOCHNANOSECONDS);\n let { seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(onens, twons, roundingIncrement, smallestUnit, roundingMode);\n let hours, minutes;\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function DifferenceTemporalPlainDate(operation, plainDate, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDate(otherParam);\n const calendar = GetSlot(plainDate, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'day');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, untilOptions);\n if (smallestUnit !== 'day' || roundingIncrement !== 1) {\n ({ years, months, weeks, days } = RoundDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, plainDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalPlainDateTime(operation, plainDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalDateTime(otherParam);\n const calendar = GetSlot(plainDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('day', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceISODateTime(GetSlot(plainDateTime, ISO_YEAR), GetSlot(plainDateTime, ISO_MONTH), GetSlot(plainDateTime, ISO_DAY), GetSlot(plainDateTime, ISO_HOUR), GetSlot(plainDateTime, ISO_MINUTE), GetSlot(plainDateTime, ISO_SECOND), GetSlot(plainDateTime, ISO_MILLISECOND), GetSlot(plainDateTime, ISO_MICROSECOND), GetSlot(plainDateTime, ISO_NANOSECOND), GetSlot(other, ISO_YEAR), GetSlot(other, ISO_MONTH), GetSlot(other, ISO_DAY), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND), calendar, largestUnit, options);\n const relativeTo = TemporalDateTimeToDate(plainDateTime);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainTime(operation, plainTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalTime(otherParam);\n const options = GetOptionsObject(optionsParam);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'time', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'hour';\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'time', 'nanosecond');\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(GetSlot(plainTime, ISO_HOUR), GetSlot(plainTime, ISO_MINUTE), GetSlot(plainTime, ISO_SECOND), GetSlot(plainTime, ISO_MILLISECOND), GetSlot(plainTime, ISO_MICROSECOND), GetSlot(plainTime, ISO_NANOSECOND), GetSlot(other, ISO_HOUR), GetSlot(other, ISO_MINUTE), GetSlot(other, ISO_SECOND), GetSlot(other, ISO_MILLISECOND), GetSlot(other, ISO_MICROSECOND), GetSlot(other, ISO_NANOSECOND));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(0, 0, 0, 0, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function DifferenceTemporalPlainYearMonth(operation, yearMonth, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalYearMonth(otherParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarID = ToString(calendar);\n const otherCalendarID = ToString(otherCalendar);\n if (calendarID !== otherCalendarID) {\n throw new RangeError(`cannot compute difference between months of ${calendarID} and ${otherCalendarID} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, [p, s, c]) => {\n if (c === 'date' && s !== 'week' && s !== 'day')\n allowed.push(s, p);\n return allowed;\n }, []);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'date', 'month');\n if (smallestUnit === 'week' || smallestUnit === 'day') {\n throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n }\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'week' || largestUnit === 'day') {\n throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n }\n if (largestUnit === 'auto')\n largestUnit = 'year';\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalRoundingIncrement(options, undefined, false);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const otherFields = PrepareTemporalFields(other, fieldNames, []);\n otherFields.day = 1;\n const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n thisFields.day = 1;\n // The calls to PrepareTemporalFields don't mark day as a required property,\n // and TS doesn't automatically narrow the type of the object because of the\n // assignments above, so we must \"cast\" the inputs.\n const otherDate = CalendarDateFromFields(calendar, otherFields);\n const thisDate = CalendarDateFromFields(calendar, thisFields);\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, untilOptions);\n if (smallestUnit !== 'month' || roundingIncrement !== 1) {\n ({ years, months } = RoundDuration(years, months, 0, 0, 0, 0, 0, 0, 0, 0, roundingIncrement, smallestUnit, roundingMode, thisDate));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\nexport function DifferenceTemporalZonedDateTime(operation, zonedDateTime, otherParam, optionsParam) {\n const sign = operation === 'since' ? -1 : 1;\n const other = ToTemporalZonedDateTime(otherParam);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const otherCalendar = GetSlot(other, CALENDAR);\n const calendarId = ToString(calendar);\n const otherCalendarId = ToString(otherCalendar);\n if (calendarId !== otherCalendarId) {\n throw new RangeError(`cannot compute difference between dates of ${calendarId} and ${otherCalendarId} calendars`);\n }\n const options = GetOptionsObject(optionsParam);\n const smallestUnit = GetTemporalUnit(options, 'smallestUnit', 'datetime', 'nanosecond');\n const defaultLargestUnit = LargerOfTwoTemporalUnits('hour', smallestUnit);\n let largestUnit = GetTemporalUnit(options, 'largestUnit', 'datetime', 'auto');\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n if (operation === 'since')\n roundingMode = NegateTemporalRoundingMode(roundingMode);\n const roundingIncrement = ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(ns1, ns2, roundingIncrement, \n // TODO this doesn't type-check as it includes >= day-size units\n // This is probably safe as the typing for ToSmallestTemporalUnit isn't\n // very good.\n smallestUnit, roundingMode));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n throw new RangeError(\"When calculating difference between time zones, largestUnit must be 'hours' \" +\n 'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.');\n }\n const untilOptions = MergeLargestUnitOption(options, largestUnit);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, largestUnit, untilOptions));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, zonedDateTime));\n }\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n}\nexport function AddISODate(yearParam, monthParam, dayParam, yearsParam, monthsParam, weeksParam, daysParam, overflow) {\n let year = yearParam;\n let month = monthParam;\n let day = dayParam;\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n year += years;\n month += months;\n ({ year, month } = BalanceISOYearMonth(year, month));\n ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n days += 7 * weeks;\n day += days;\n ({ year, month, day } = BalanceISODate(year, month, day));\n return { year, month, day };\n}\nfunction AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) {\n let hour = hourParam;\n let minute = minuteParam;\n let second = secondParam;\n let millisecond = millisecondParam;\n let microsecond = microsecondParam;\n let nanosecond = nanosecondParam;\n hour += hours;\n minute += minutes;\n second += seconds;\n millisecond += milliseconds;\n microsecond += microseconds;\n nanosecond += nanoseconds;\n let deltaDays = 0;\n ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond));\n return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nfunction AddDuration(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2, relativeTo) {\n const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n if (!relativeTo) {\n if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n }\n years = months = weeks = 0;\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(d1 + d2, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else if (IsTemporalDate(relativeTo)) {\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n const dateAdd = calendar.dateAdd;\n const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n const differenceOptions = ObjectCreate(null);\n differenceOptions.largestUnit = dateLargestUnit;\n ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n // Signs of date part and time part may not agree; balance them together\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(days, h1 + h2, min1 + min2, s1 + s2, ms1 + ms2, µs1 + µs2, ns1 + ns2, largestUnit));\n }\n else {\n // relativeTo is a ZonedDateTime\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n const endNs = AddZonedDateTime(new TemporalInstant(intermediateNs), timeZone, calendar, y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n // The user is only asking for a time difference, so return difference of instants.\n years = 0;\n months = 0;\n weeks = 0;\n days = 0;\n ({ seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, 1, 'nanosecond', 'halfExpand'));\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, seconds, milliseconds, microseconds, nanoseconds, largestUnit));\n }\n else {\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n DifferenceZonedDateTime(GetSlot(relativeTo, EPOCHNANOSECONDS), endNs, timeZone, calendar, largestUnit, ObjectCreate(null)));\n }\n }\n RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nfunction AddInstant(epochNanoseconds, h, min, s, ms, µs, ns) {\n let sum = ZERO;\n sum = JSBI.add(sum, JSBI.BigInt(ns));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n const result = JSBI.add(epochNanoseconds, sum);\n ValidateEpochNanoseconds(result);\n return result;\n}\nfunction AddDateTime(year, month, day, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, calendar, years, months, weeks, daysParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, options) {\n let days = daysParam;\n // Add the time part\n let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n days += deltaDays;\n // Delegate the date part addition to the calendar\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n const datePart = CreateTemporalDate(year, month, day, calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n return {\n year: GetSlot(addedDate, ISO_YEAR),\n month: GetSlot(addedDate, ISO_MONTH),\n day: GetSlot(addedDate, ISO_DAY),\n hour,\n minute,\n second,\n millisecond,\n microsecond,\n nanosecond\n };\n}\nexport function AddZonedDateTime(instant, timeZone, calendar, years, months, weeks, days, h, min, s, ms, µs, ns, options) {\n // If only time is to be added, then use Instant math. It's not OK to fall\n // through to the date/time code below because compatible disambiguation in\n // the PlainDateTime=>Instant conversion will change the offset of any\n // ZonedDateTime in the repeated clock time after a backwards transition.\n // When adding/subtracting time units and not dates, this disambiguation is\n // not expected and so is avoided below via a fast path for time-only\n // arithmetic.\n // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n }\n // RFC 5545 requires the date portion to be added in calendar days and the\n // time portion to be added in exact time.\n const dt = BuiltinTimeZoneGetPlainDateTimeFor(timeZone, instant, calendar);\n const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n const dtIntermediate = CreateTemporalDateTime(GetSlot(addedDate, ISO_YEAR), GetSlot(addedDate, ISO_MONTH), GetSlot(addedDate, ISO_DAY), GetSlot(dt, ISO_HOUR), GetSlot(dt, ISO_MINUTE), GetSlot(dt, ISO_SECOND), GetSlot(dt, ISO_MILLISECOND), GetSlot(dt, ISO_MICROSECOND), GetSlot(dt, ISO_NANOSECOND), calendar);\n // Note that 'compatible' is used below because this disambiguation behavior\n // is required by RFC 5545.\n const instantIntermediate = BuiltinTimeZoneGetInstantFor(timeZone, dtIntermediate, 'compatible');\n return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\nexport function AddDurationToOrSubtractDurationFromDuration(operation, duration, other, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(other);\n const options = GetOptionsObject(optionsParam);\n const relativeTo = ToRelativeTemporalObject(options);\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, relativeTo));\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\nexport function AddDurationToOrSubtractDurationFromInstant(operation, instant, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n 'years',\n 'months',\n 'weeks',\n 'days'\n ]);\n const ns = AddInstant(GetSlot(instant, EPOCHNANOSECONDS), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ns);\n}\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(operation, dateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(dateTime, CALENDAR);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND), calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\nexport function AddDurationToOrSubtractDurationFromPlainTime(operation, temporalTime, durationLike) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(GetSlot(temporalTime, ISO_HOUR), GetSlot(temporalTime, ISO_MINUTE), GetSlot(temporalTime, ISO_SECOND), GetSlot(temporalTime, ISO_MILLISECOND), GetSlot(temporalTime, ISO_MICROSECOND), GetSlot(temporalTime, ISO_NANOSECOND), sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, 'reject'));\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(operation, yearMonth, durationLike, optionsParam) {\n let duration = ToTemporalDurationRecord(durationLike);\n if (operation === 'subtract') {\n duration = {\n years: -duration.years,\n months: -duration.months,\n weeks: -duration.weeks,\n days: -duration.days,\n hours: -duration.hours,\n minutes: -duration.minutes,\n seconds: -duration.seconds,\n milliseconds: -duration.milliseconds,\n microseconds: -duration.microseconds,\n nanoseconds: -duration.nanoseconds\n };\n }\n let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n const options = GetOptionsObject(optionsParam);\n const calendar = GetSlot(yearMonth, CALENDAR);\n const fieldNames = CalendarFields(calendar, ['monthCode', 'year']);\n const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n fields.day = sign < 0 ? ToPositiveInteger(CalendarDaysInMonth(calendar, yearMonth)) : 1;\n // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n // and TS doesn't narrow the type as a result of the assignment above, so we\n // cast the fields input to the new type.\n const startDate = CalendarDateFromFields(calendar, fields);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const optionsCopy = ObjectAssign(ObjectCreate(null), options);\n const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options);\n const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(operation, zonedDateTime, durationLike, optionsParam) {\n const sign = operation === 'subtract' ? -1 : 1;\n const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n const options = GetOptionsObject(optionsParam);\n const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n const calendar = GetSlot(zonedDateTime, CALENDAR);\n const epochNanoseconds = AddZonedDateTime(GetSlot(zonedDateTime, INSTANT), timeZone, calendar, sign * years, sign * months, sign * weeks, sign * days, sign * hours, sign * minutes, sign * seconds, sign * milliseconds, sign * microseconds, sign * nanoseconds, options);\n return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\nfunction RoundNumberToIncrement(quantity, increment, mode) {\n if (increment === 1)\n return quantity;\n let { quotient, remainder } = divmod(quantity, JSBI.BigInt(increment));\n if (JSBI.equal(remainder, ZERO))\n return quantity;\n const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n switch (mode) {\n case 'ceil':\n if (sign > 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'floor':\n if (sign < 0)\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n break;\n case 'trunc':\n // no change needed, because divmod is a truncation\n break;\n case 'halfExpand':\n // \"half up away from zero\"\n if (JSBI.toNumber(abs(JSBI.multiply(remainder, JSBI.BigInt(2)))) >= increment) {\n quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n }\n break;\n }\n return JSBI.multiply(quotient, JSBI.BigInt(increment));\n}\nexport function RoundInstant(epochNs, increment, unit, roundingMode) {\n // Note: NonNegativeModulo, but with BigInt\n let remainder = JSBI.remainder(epochNs, JSBI.BigInt(86400e9));\n if (JSBI.lessThan(remainder, ZERO))\n remainder = JSBI.add(remainder, JSBI.BigInt(86400e9));\n const wholeDays = JSBI.subtract(epochNs, remainder);\n const roundedRemainder = RoundNumberToIncrement(remainder, nsPerTimeUnit[unit] * increment, roundingMode);\n return JSBI.add(wholeDays, roundedRemainder);\n}\nexport function RoundISODateTime(yearParam, monthParam, dayParam, hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(hourParam, minuteParam, secondParam, millisecondParam, microsecondParam, nanosecondParam, increment, unit, roundingMode, dayLengthNs);\n const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\nexport function RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode, dayLengthNs = 86400e9) {\n let quantity = ZERO;\n switch (unit) {\n case 'day':\n case 'hour':\n quantity = JSBI.BigInt(hour);\n // fall through\n case 'minute':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n // fall through\n case 'second':\n quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n // fall through\n case 'millisecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n // fall through\n case 'microsecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n // fall through\n case 'nanosecond':\n quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n }\n const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n const rounded = RoundNumberToIncrement(quantity, nsPerUnit * increment, roundingMode);\n const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n switch (unit) {\n case 'day':\n return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n case 'hour':\n return BalanceTime(result, 0, 0, 0, 0, 0);\n case 'minute':\n return BalanceTime(hour, result, 0, 0, 0, 0);\n case 'second':\n return BalanceTime(hour, minute, result, 0, 0, 0);\n case 'millisecond':\n return BalanceTime(hour, minute, second, result, 0, 0);\n case 'microsecond':\n return BalanceTime(hour, minute, second, millisecond, result, 0);\n case 'nanosecond':\n return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n default:\n throw new Error(`Invalid unit ${unit}`);\n }\n}\nfunction DaysUntil(earlier, later) {\n return DifferenceISODate(GetSlot(earlier, ISO_YEAR), GetSlot(earlier, ISO_MONTH), GetSlot(earlier, ISO_DAY), GetSlot(later, ISO_YEAR), GetSlot(later, ISO_MONTH), GetSlot(later, ISO_DAY), 'day').days;\n}\nfunction MoveRelativeDate(calendar, relativeToParam, duration) {\n const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined);\n const days = DaysUntil(relativeToParam, later);\n return { relativeTo: later, days };\n}\nexport function MoveRelativeZonedDateTime(relativeTo, years, months, weeks, days) {\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const intermediateNs = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\nexport function AdjustRoundedDurationDays(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeTo) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = nanosecondsParam;\n if (!IsTemporalZonedDateTime(relativeTo) ||\n unit === 'year' ||\n unit === 'month' ||\n unit === 'week' ||\n unit === 'day' ||\n (unit === 'nanosecond' && increment === 1)) {\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n }\n // There's one more round of rounding possible: if relativeTo is a\n // ZonedDateTime, the time units could have rounded up into enough hours\n // to exceed the day length. If this happens, grow the date part by a\n // single day and re-run exact time rounding on the smaller remainder. DO\n // NOT RECURSE, because once the extra hours are sucked up into the date\n // duration, there's no way for another full day to come from the next\n // round of rounding. And if it were possible (e.g. contrived calendar\n // with 30-minute-long \"days\") then it'd risk an infinite loop.\n let timeRemainderNs = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 0);\n const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n const timeZone = GetSlot(relativeTo, TIME_ZONE);\n const calendar = GetSlot(relativeTo, CALENDAR);\n const dayStart = AddZonedDateTime(GetSlot(relativeTo, INSTANT), timeZone, calendar, years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n const dayEnd = AddZonedDateTime(new TemporalInstant(dayStart), timeZone, calendar, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n if (JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)) {\n ({ years, months, weeks, days } = AddDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0, 0, 0, 0, direction, 0, 0, 0, 0, 0, 0, relativeTo));\n timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(0, 0, 0, 0, 0, 0, JSBI.toNumber(timeRemainderNs), 'hour'));\n }\n return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\nexport function RoundDuration(yearsParam, monthsParam, weeksParam, daysParam, hoursParam, minutesParam, secondsParam, millisecondsParam, microsecondsParam, nanosecondsParam, increment, unit, roundingMode, relativeToParam = undefined) {\n let years = yearsParam;\n let months = monthsParam;\n let weeks = weeksParam;\n let days = daysParam;\n let hours = hoursParam;\n let minutes = minutesParam;\n let seconds = secondsParam;\n let milliseconds = millisecondsParam;\n let microseconds = microsecondsParam;\n let nanoseconds = JSBI.BigInt(nanosecondsParam);\n const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n let calendar, zdtRelative;\n // A cast is used below because relativeTo will be either PlainDate or\n // undefined for the rest of this long method (after any ZDT=>PlainDate\n // conversion below), and TS isn't smart enough to know that the type has\n // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n let relativeTo = relativeToParam;\n if (relativeTo) {\n if (IsTemporalZonedDateTime(relativeTo)) {\n zdtRelative = relativeTo;\n relativeTo = ToTemporalDate(relativeTo);\n }\n else if (!IsTemporalDate(relativeTo)) {\n throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n }\n calendar = GetSlot(relativeTo, CALENDAR);\n }\n // First convert time units up to days, if rounding to days or higher units.\n // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n // larger. We'll cast away `undefined` when it's used lower down below.\n let dayLengthNs;\n if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n let intermediate;\n if (zdtRelative) {\n intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n }\n let deltaDays;\n let dayLength;\n ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n dayLengthNs = JSBI.BigInt(dayLength);\n days += deltaDays;\n hours = minutes = seconds = milliseconds = microseconds = 0;\n }\n let total;\n switch (unit) {\n case 'year': {\n if (!calendar)\n throw new RangeError('A starting point is required for years rounding');\n // convert months and weeks to days by calculating difference(\n // relativeTo + years, relativeTo + { years, months, weeks })\n const yearsDuration = new TemporalDuration(years);\n const dateAdd = calendar.dateAdd;\n const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n relativeTo = yearsLater;\n days += monthsWeeksInDays;\n const daysLater = CalendarDateAdd(calendar, relativeTo, { days }, undefined, dateAdd);\n const untilOptions = ObjectCreate(null);\n untilOptions.largestUnit = 'year';\n const yearsPassed = CalendarDateUntil(calendar, relativeTo, daysLater, untilOptions).years;\n years += yearsPassed;\n const oldRelativeTo = relativeTo;\n relativeTo = CalendarDateAdd(calendar, relativeTo, { years: yearsPassed }, undefined, dateAdd);\n const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n days -= daysPassed;\n const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear);\n // Note that `nanoseconds` below (here and in similar code for months,\n // weeks, and days further below) isn't actually nanoseconds for the\n // full date range. Instead, it's a BigInt representation of total\n // days multiplied by the number of nanoseconds in the last day of\n // the duration. This lets us do days-or-larger rounding using BigInt\n // math which reduces precision loss.\n oneYearDays = MathAbs(oneYearDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n months = weeks = days = 0;\n break;\n }\n case 'month': {\n if (!calendar)\n throw new RangeError('A starting point is required for months rounding');\n // convert weeks to days by calculating difference(relativeTo +\n // { years, months }, relativeTo + { years, months, weeks })\n const yearsMonths = new TemporalDuration(years, months);\n const dateAdd = calendar.dateAdd;\n const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n relativeTo = yearsMonthsLater;\n days += weeksInDays;\n // Months may be different lengths of days depending on the calendar,\n // convert days to months in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n let oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n months += sign;\n days -= oneMonthDays;\n ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));\n }\n oneMonthDays = MathAbs(oneMonthDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n weeks = days = 0;\n break;\n }\n case 'week': {\n if (!calendar)\n throw new RangeError('A starting point is required for weeks rounding');\n // Weeks may be different lengths of days depending on the calendar,\n // convert days to weeks in a loop as described above under 'years'.\n const sign = MathSign(days);\n const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n let oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n weeks += sign;\n days -= oneWeekDays;\n ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));\n }\n oneWeekDays = MathAbs(oneWeekDays);\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n nanoseconds = JSBI.add(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n days = 0;\n break;\n }\n case 'day': {\n // dayLengthNs is never undefined if unit is `day` or larger.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const divisor = dayLengthNs;\n nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n const rounded = RoundNumberToIncrement(nanoseconds, JSBI.toNumber(JSBI.multiply(divisor, JSBI.BigInt(increment))), roundingMode);\n total = JSBI.toNumber(nanoseconds) / JSBI.toNumber(divisor);\n days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n nanoseconds = ZERO;\n break;\n }\n case 'hour': {\n const divisor = 3600e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n minutes = seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'minute': {\n const divisor = 60e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n seconds = milliseconds = microseconds = 0;\n break;\n }\n case 'second': {\n const divisor = 1e9;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n milliseconds = microseconds = 0;\n break;\n }\n case 'millisecond': {\n const divisor = 1e6;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n microseconds = 0;\n break;\n }\n case 'microsecond': {\n const divisor = 1e3;\n let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n total = JSBI.toNumber(allNanoseconds) / divisor;\n const rounded = RoundNumberToIncrement(allNanoseconds, divisor * increment, roundingMode);\n microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n nanoseconds = ZERO;\n break;\n }\n case 'nanosecond': {\n total = JSBI.toNumber(nanoseconds);\n nanoseconds = RoundNumberToIncrement(nanoseconds, increment, roundingMode);\n break;\n }\n }\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n microseconds,\n nanoseconds: JSBI.toNumber(nanoseconds),\n total\n };\n}\nexport function CompareISODate(y1, m1, d1, y2, m2, d2) {\n for (const [x, y] of [\n [y1, y2],\n [m1, m2],\n [d1, d2]\n ]) {\n if (x !== y)\n return ComparisonResult(x - y);\n }\n return 0;\n}\nfunction NonNegativeModulo(x, y) {\n let result = x % y;\n if (ObjectIs(result, -0))\n return 0;\n if (result < 0)\n result += y;\n return result;\n}\nexport function ToBigIntExternal(arg) {\n const jsbiBI = ToBigInt(arg);\n if (typeof globalThis.BigInt !== 'undefined')\n return globalThis.BigInt(jsbiBI.toString(10));\n return jsbiBI;\n}\nexport function ToBigInt(arg) {\n if (arg instanceof JSBI) {\n return arg;\n }\n let prim = arg;\n if (typeof arg === 'object') {\n const toPrimFn = arg[Symbol.toPrimitive];\n if (toPrimFn && typeof toPrimFn === 'function') {\n prim = ReflectApply(toPrimFn, arg, ['number']);\n }\n }\n switch (typeof prim) {\n case 'undefined':\n case 'object':\n case 'number':\n case 'symbol':\n default:\n throw new TypeError(`cannot convert ${typeof arg} to bigint`);\n case 'string':\n if (!prim.match(/^\\s*(?:[+-]?\\d+\\s*)?$/)) {\n throw new SyntaxError('invalid BigInt syntax');\n }\n // eslint: no-fallthrough: false\n case 'bigint':\n try {\n return JSBI.BigInt(prim.toString());\n }\n catch (e) {\n if (e instanceof Error && e.message.startsWith('Invalid integer'))\n throw new SyntaxError(e.message);\n throw e;\n }\n case 'boolean':\n if (prim) {\n return ONE;\n }\n else {\n return ZERO;\n }\n }\n}\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds = (() => {\n let ns = JSBI.BigInt(Date.now() % 1e6);\n return () => {\n const ms = JSBI.BigInt(Date.now());\n const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n ns = JSBI.remainder(ms, MILLION);\n if (JSBI.greaterThan(result, NS_MAX))\n return NS_MAX;\n if (JSBI.lessThan(result, NS_MIN))\n return NS_MIN;\n return result;\n };\n})();\nexport function SystemTimeZone() {\n const fmt = new IntlDateTimeFormat('en-us');\n const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n return new TemporalTimeZone(ParseTemporalTimeZone(fmt.resolvedOptions().timeZone));\n}\nexport function ComparisonResult(value) {\n return value < 0 ? -1 : value > 0 ? 1 : value;\n}\nexport function GetOptionsObject(options) {\n if (options === undefined)\n return ObjectCreate(null);\n if (IsObject(options) && options !== null)\n return options;\n throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\nexport function CreateOnePropObject(propName, propValue) {\n const o = ObjectCreate(null);\n o[propName] = propValue;\n return o;\n}\nfunction GetOption(options, property, allowedValues, fallback) {\n let value = options[property];\n if (value !== undefined) {\n value = ToString(value);\n if (!allowedValues.includes(value)) {\n throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n }\n return value;\n }\n return fallback;\n}\nfunction GetNumberOption(options, property, minimum, maximum, fallback) {\n let valueRaw = options[property];\n if (valueRaw === undefined)\n return fallback;\n const value = ToNumber(valueRaw);\n if (NumberIsNaN(value) || value < minimum || value > maximum) {\n throw new RangeError(`${String(property)} must be between ${minimum} and ${maximum}, not ${value}`);\n }\n return MathFloor(value);\n}\nexport function IsBuiltinCalendar(id) {\n return ArrayIncludes.call(BUILTIN_CALENDAR_IDS, id);\n}\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\nfunction bisect(getState, leftParam, rightParam, lstateParam = getState(leftParam), rstateParam = getState(rightParam)) {\n // This doesn't make much sense - why do these get converted unnecessarily?\n let left = JSBI.BigInt(leftParam);\n let right = JSBI.BigInt(rightParam);\n let lstate = lstateParam;\n let rstate = rstateParam;\n while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n const mstate = getState(middle);\n if (mstate === lstate) {\n left = middle;\n lstate = mstate;\n }\n else if (mstate === rstate) {\n right = middle;\n rstate = mstate;\n }\n else {\n throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n }\n }\n return right;\n}\nconst nsPerTimeUnit = {\n hour: 3600e9,\n minute: 60e9,\n second: 1e9,\n millisecond: 1e6,\n microsecond: 1e3,\n nanosecond: 1\n};\n//# sourceMappingURL=ecmascript.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport { GetSlot, INSTANT, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, TIME_ZONE } from './slots';\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst ZONED = Symbol('zoneddatetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst TZ_GIVEN = Symbol('timezone-id-given');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\nconst descriptor = (value) => {\n return {\n value,\n enumerable: true,\n writable: false,\n configurable: true\n };\n};\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy(obj, prop) {\n let val = obj[prop];\n if (typeof val === 'function') {\n // If we get here, `val` is an \"amender function\". It will take the user's\n // options and transform them into suitable options to be passed into the\n // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n // will vary depending on the Temporal type, so that's why we store separate\n // formatters in separate props on the polyfill's DateTimeFormat instances.\n // The efficiency happens because we don't create an (expensive) formatter\n // until the user calls toLocaleString for that Temporal type.\n val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n // TODO: can this be typed more cleanly?\n obj[prop] = val;\n }\n return val;\n}\n// Similarly, lazy-init TimeZone instances.\nfunction getResolvedTimeZoneLazy(obj) {\n let val = obj[TZ_RESOLVED];\n if (typeof val === 'string') {\n val = ES.ToTemporalTimeZone(val);\n obj[TZ_RESOLVED] = val;\n }\n return val;\n}\nfunction DateTimeFormatImpl(locale = undefined, optionsParam = {}) {\n if (!(this instanceof DateTimeFormatImpl)) {\n return new DateTimeFormatImpl(locale, optionsParam);\n }\n const hasOptions = typeof optionsParam !== 'undefined';\n const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n // TODO: remove type assertion after Temporal types land in TS lib types\n const original = new IntlDateTimeFormat(locale, options);\n const ro = original.resolvedOptions();\n // DateTimeFormat instances are very expensive to create. Therefore, they will\n // be lazily created only when needed, using the locale and options provided.\n // But it's possible for callers to mutate those inputs before lazy creation\n // happens. For this reason, we clone the inputs instead of caching the\n // original objects. To avoid the complexity of deep cloning any inputs that\n // are themselves objects (e.g. the locales array, or options property values\n // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n // coercion and cloning for us. Unfortunately, we can't just use the resolved\n // options as-is because our options-amending logic adds additional fields if\n // the user doesn't supply any unit fields like year, month, day, hour, etc.\n // Therefore, we limit the properties in the clone to properties that were\n // present in the original input.\n if (hasOptions) {\n const clonedResolved = ObjectAssign({}, ro);\n for (const prop in clonedResolved) {\n if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n delete clonedResolved[prop];\n }\n }\n this[OPTIONS] = clonedResolved;\n }\n else {\n this[OPTIONS] = options;\n }\n this[TZ_GIVEN] = options.timeZone ? options.timeZone : null;\n this[LOCALE] = ro.locale;\n this[ORIGINAL] = original;\n this[TZ_RESOLVED] = ro.timeZone;\n this[CAL_ID] = ro.calendar;\n this[DATE] = dateAmend;\n this[YM] = yearMonthAmend;\n this[MD] = monthDayAmend;\n this[TIME] = timeAmend;\n this[DATETIME] = datetimeAmend;\n this[ZONED] = zonedDateTimeAmend;\n this[INST] = instantAmend;\n return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n writable: true,\n value: 'DateTimeFormat'\n});\nDateTimeFormatImpl.supportedLocalesOf = function (locales, options) {\n return IntlDateTimeFormat.supportedLocalesOf(locales, options);\n};\nconst propertyDescriptors = {\n resolvedOptions: descriptor(resolvedOptions),\n format: descriptor(format),\n formatRange: descriptor(formatRange)\n};\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n writable: false,\n enumerable: false,\n configurable: false\n});\nexport const DateTimeFormat = DateTimeFormatImpl;\nfunction resolvedOptions() {\n return this[ORIGINAL].resolvedOptions();\n}\nfunction adjustFormatterTimeZone(formatter, timeZone) {\n if (!timeZone)\n return formatter;\n const options = formatter.resolvedOptions();\n if (options.timeZone === timeZone)\n return formatter;\n // Existing Intl isn't typed to accept Temporal-specific options and the lib\n // types for resolved options are less restrictive than the types for options.\n // For example, `weekday` is\n // `'long' | 'short' | 'narrow'` in options but `string` in resolved options.\n // TODO: investigate why, and file an issue against TS if it's a bug.\n if (options['dateStyle'] || options['timeStyle']) {\n // Unfortunately, Safari's resolvedOptions include parameters that will\n // cause errors at runtime if passed along with\n // dateStyle or timeStyle options as per\n // https://tc39.es/proposal-intl-datetime-style/#table-datetimeformat-components.\n // This has been fixed in newer versions of Safari:\n // https://bugs.webkit.org/show_bug.cgi?id=231041\n delete options['weekday'];\n delete options['era'];\n delete options['year'];\n delete options['month'];\n delete options['day'];\n delete options['hour'];\n delete options['minute'];\n delete options['second'];\n delete options['timeZoneName'];\n delete options['hourCycle'];\n delete options['hour12'];\n delete options['dayPeriod'];\n }\n return new IntlDateTimeFormat(options.locale, { ...options, timeZone });\n}\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.format(instant.epochMilliseconds);\n }\n return this[ORIGINAL].format(datetime, ...rest);\n}\nfunction formatToParts(datetime, ...rest) {\n let { instant, formatter, timeZone } = extractOverrides(datetime, this);\n if (instant && formatter) {\n formatter = adjustFormatterTimeZone(formatter, timeZone);\n return formatter.formatToParts(instant.epochMilliseconds);\n }\n return this[ORIGINAL].formatToParts(datetime, ...rest);\n}\nfunction formatRange(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRange(a, b);\n}\nfunction formatRangeToParts(a, b) {\n if (isTemporalObject(a) || isTemporalObject(b)) {\n if (!sameTemporalType(a, b)) {\n throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n }\n const { instant: aa, formatter: aformatter, timeZone: atz } = extractOverrides(a, this);\n const { instant: bb, formatter: bformatter, timeZone: btz } = extractOverrides(b, this);\n if (atz && btz && atz !== btz) {\n throw new RangeError('cannot format range between different time zones');\n }\n if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n const formatter = adjustFormatterTimeZone(aformatter, atz);\n // TODO: Remove type assertion after this method lands in TS lib types\n return formatter.formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n }\n }\n // TODO: Remove type assertion after this method lands in TS lib types\n return this[ORIGINAL].formatRangeToParts(a, b);\n}\nfunction amend(optionsParam = {}, amended = {}) {\n const options = ObjectAssign({}, optionsParam);\n for (const opt of [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'weekday',\n 'dayPeriod',\n 'timeZoneName',\n 'dateStyle',\n 'timeStyle'\n ]) {\n options[opt] = opt in amended ? amended[opt] : options[opt];\n if (options[opt] === false || options[opt] === undefined)\n delete options[opt];\n }\n return options;\n}\nfunction timeAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n month: false,\n day: false,\n weekday: false,\n timeZoneName: false,\n dateStyle: false\n });\n if (!hasTimeOptions(options)) {\n options = ObjectAssign({}, options, {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction yearMonthAmend(optionsParam) {\n let options = amend(optionsParam, {\n day: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('year' in options || 'month' in options)) {\n options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n }\n return options;\n}\nfunction monthDayAmend(optionsParam) {\n let options = amend(optionsParam, {\n year: false,\n hour: false,\n minute: false,\n second: false,\n weekday: false,\n dayPeriod: false,\n timeZoneName: false,\n dateStyle: false,\n timeStyle: false\n });\n if (!('month' in options || 'day' in options)) {\n options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n }\n return options;\n}\nfunction dateAmend(optionsParam) {\n let options = amend(optionsParam, {\n hour: false,\n minute: false,\n second: false,\n dayPeriod: false,\n timeZoneName: false,\n timeStyle: false\n });\n if (!hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n });\n }\n return options;\n}\nfunction datetimeAmend(optionsParam) {\n let options = amend(optionsParam, { timeZoneName: false });\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction zonedDateTimeAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n if (options.timeZoneName === undefined)\n options.timeZoneName = 'short';\n }\n return options;\n}\nfunction instantAmend(optionsParam) {\n let options = optionsParam;\n if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n options = ObjectAssign({}, options, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n });\n }\n return options;\n}\nfunction hasDateOptions(options) {\n return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\nfunction hasTimeOptions(options) {\n return ('hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options);\n}\nfunction isTemporalObject(obj) {\n return (ES.IsTemporalDate(obj) ||\n ES.IsTemporalTime(obj) ||\n ES.IsTemporalDateTime(obj) ||\n ES.IsTemporalZonedDateTime(obj) ||\n ES.IsTemporalYearMonth(obj) ||\n ES.IsTemporalMonthDay(obj) ||\n ES.IsTemporalInstant(obj));\n}\nfunction sameTemporalType(x, y) {\n if (!isTemporalObject(x) || !isTemporalObject(y))\n return false;\n if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y))\n return false;\n if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y))\n return false;\n if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y))\n return false;\n if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y))\n return false;\n if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y))\n return false;\n if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y))\n return false;\n if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y))\n return false;\n return true;\n}\nfunction extractOverrides(temporalObj, main) {\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n if (ES.IsTemporalTime(temporalObj)) {\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, TIME)\n };\n }\n if (ES.IsTemporalYearMonth(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, YM)\n };\n }\n if (ES.IsTemporalMonthDay(temporalObj)) {\n const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, MD)\n };\n }\n if (ES.IsTemporalDate(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATE)\n };\n }\n if (ES.IsTemporalDateTime(temporalObj)) {\n const isoYear = GetSlot(temporalObj, ISO_YEAR);\n const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n const isoDay = GetSlot(temporalObj, ISO_DAY);\n const hour = GetSlot(temporalObj, ISO_HOUR);\n const minute = GetSlot(temporalObj, ISO_MINUTE);\n const second = GetSlot(temporalObj, ISO_SECOND);\n const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n let datetime = temporalObj;\n if (calendar === 'iso8601') {\n datetime = new DateTime(isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n }\n return {\n instant: ES.BuiltinTimeZoneGetInstantFor(getResolvedTimeZoneLazy(main), datetime, 'compatible'),\n formatter: getPropLazy(main, DATETIME)\n };\n }\n if (ES.IsTemporalZonedDateTime(temporalObj)) {\n const calendar = ES.ToString(GetSlot(temporalObj, CALENDAR));\n if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n throw new RangeError(`cannot format ZonedDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n }\n const timeZone = GetSlot(temporalObj, TIME_ZONE);\n const objTimeZone = ES.ToString(timeZone);\n if (main[TZ_GIVEN] && main[TZ_GIVEN] !== objTimeZone) {\n throw new RangeError(`timeZone option ${main[TZ_GIVEN]} doesn't match actual time zone ${objTimeZone}`);\n }\n return {\n instant: GetSlot(temporalObj, INSTANT),\n formatter: getPropLazy(main, ZONED),\n timeZone: objTimeZone\n };\n }\n if (ES.IsTemporalInstant(temporalObj)) {\n return {\n instant: temporalObj,\n formatter: getPropLazy(main, INST)\n };\n }\n return {};\n}\n//# sourceMappingURL=intl.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\nexport class Instant {\n constructor(epochNanoseconds) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const ns = ES.ToBigInt(epochNanoseconds);\n ES.ValidateEpochNanoseconds(ns);\n CreateSlots(this);\n SetSlot(this, EPOCHNANOSECONDS, ns);\n if (DEBUG) {\n const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${repr}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get epochSeconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalInstant('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n hour: 24,\n minute: 1440,\n second: 86400,\n millisecond: 86400e3,\n microsecond: 86400e6,\n nanosecond: 86400e9\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], true);\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n return new Instant(roundedNs);\n }\n equals(otherParam) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalInstant(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n let timeZone = options.timeZone;\n if (timeZone !== undefined)\n timeZone = ES.ToTemporalTimeZone(timeZone);\n // Although TS doesn't acknowledge it, below here `timeZone` is a Temporal.TimeZoneProtocol\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const ns = GetSlot(this, EPOCHNANOSECONDS);\n const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n const roundedInstant = new Instant(roundedNs);\n return ES.TemporalInstantToString(roundedInstant, timeZone, precision);\n }\n toJSON() {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalInstantToString(this, undefined, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument in toZonedDateTime');\n }\n const calendarLike = item.calendar;\n if (calendarLike === undefined) {\n throw new TypeError('missing calendar property in toZonedDateTime');\n }\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const temporalTimeZoneLike = item.timeZone;\n if (temporalTimeZoneLike === undefined) {\n throw new TypeError('missing timeZone property in toZonedDateTime');\n }\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toZonedDateTimeISO(itemParam) {\n let item = itemParam;\n if (!ES.IsTemporalInstant(this))\n throw new TypeError('invalid receiver');\n if (ES.IsObject(item)) {\n const timeZoneProperty = item.timeZone;\n if (timeZoneProperty !== undefined) {\n item = timeZoneProperty;\n }\n }\n const timeZone = ES.ToTemporalTimeZone(item);\n const calendar = ES.GetISO8601Calendar();\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n }\n static fromEpochSeconds(epochSecondsParam) {\n const epochSeconds = ES.ToNumber(epochSecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMilliseconds(epochMillisecondsParam) {\n const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochMicroseconds(epochMicrosecondsParam) {\n const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static fromEpochNanoseconds(epochNanosecondsParam) {\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n ES.ValidateEpochNanoseconds(epochNanoseconds);\n return new Instant(epochNanoseconds);\n }\n static from(item) {\n if (ES.IsTemporalInstant(item)) {\n return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n }\n return ES.ToTemporalInstant(item);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalInstant(oneParam);\n const two = ES.ToTemporalInstant(twoParam);\n const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(oneNs, twoNs))\n return -1;\n if (JSBI.greaterThan(oneNs, twoNs))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n//# sourceMappingURL=instant.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport { CALENDAR_ID, ISO_YEAR, ISO_MONTH, ISO_DAY, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, HasSlot, SetSlot } from './slots';\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectEntries = Object.entries;\nconst ObjectKeys = Object.keys;\n/**\n * Implementations for each calendar. Non-ISO calendars have an extra `helper`\n * property that provides additional per-calendar logic.\n */\nconst impl = {};\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n * PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n * PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar {\n constructor(idParam) {\n // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n // exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: id is required');\n }\n const id = ES.ToString(idParam);\n if (!ES.IsBuiltinCalendar(id))\n throw new RangeError(`invalid calendar identifier ${id}`);\n CreateSlots(this);\n SetSlot(this, CALENDAR_ID, id);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${id}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n dateFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].dateFromFields(fields, options, this);\n }\n yearMonthFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].yearMonthFromFields(fields, options, this);\n }\n monthDayFromFields(fields, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(fields))\n throw new TypeError('invalid fields');\n const options = ES.GetOptionsObject(optionsParam);\n return impl[GetSlot(this, CALENDAR_ID)].monthDayFromFields(fields, options, this);\n }\n fields(fields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const fieldsArray = [];\n const allowed = new Set([\n 'year',\n 'month',\n 'monthCode',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n 'microsecond',\n 'nanosecond'\n ]);\n for (const name of fields) {\n if (typeof name !== 'string')\n throw new TypeError('invalid fields');\n if (!allowed.has(name))\n throw new RangeError(`invalid field name ${name}`);\n allowed.delete(name);\n ArrayPrototypePush.call(fieldsArray, name);\n }\n return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n }\n mergeFields(fields, additionalFields) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return impl[GetSlot(this, CALENDAR_ID)].mergeFields(fields, additionalFields);\n }\n dateAdd(dateParam, durationParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n const duration = ES.ToTemporalDuration(durationParam);\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const { days } = ES.BalanceDuration(GetSlot(duration, DAYS), GetSlot(duration, HOURS), GetSlot(duration, MINUTES), GetSlot(duration, SECONDS), GetSlot(duration, MILLISECONDS), GetSlot(duration, MICROSECONDS), GetSlot(duration, NANOSECONDS), 'day');\n return impl[GetSlot(this, CALENDAR_ID)].dateAdd(date, GetSlot(duration, YEARS), GetSlot(duration, MONTHS), GetSlot(duration, WEEKS), days, overflow, this);\n }\n dateUntil(oneParam, twoParam, optionsParam = undefined) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n if (largestUnit === 'auto')\n largestUnit = 'day';\n const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n const Duration = GetIntrinsic('%Temporal.Duration%');\n return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n }\n year(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].year(date);\n }\n month(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (ES.IsTemporalMonthDay(date))\n throw new TypeError('use monthCode on PlainMonthDay instead');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].month(date);\n }\n monthCode(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthCode(date);\n }\n day(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalMonthDay(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].day(date);\n }\n era(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].era(date);\n }\n eraYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].eraYear(date);\n }\n dayOfWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n }\n dayOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n }\n weekOfYear(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n }\n daysInWeek(dateParam) {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n const date = ES.ToTemporalDate(dateParam);\n return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n }\n daysInMonth(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date);\n }\n daysInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date);\n }\n monthsInYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date);\n }\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsTemporalYearMonth(date))\n date = ES.ToTemporalDate(date);\n return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date);\n }\n toString() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR_ID);\n }\n toJSON() {\n if (!ES.IsTemporalCalendar(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalCalendar(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month, day } = fields;\n ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n fields = resolveNonLunisolarMonth(fields);\n let { year, month } = fields;\n ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n return ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ 1);\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n throw new TypeError('either year or monthCode required with month');\n }\n const useYear = fields.monthCode === undefined;\n const referenceISOYear = 1972;\n fields = resolveNonLunisolarMonth(fields);\n let { month, day, year } = fields;\n ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n return ES.CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n },\n fields(fields) {\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const merged = {};\n for (const nextKey of ObjectKeys(fields)) {\n if (nextKey === 'month' || nextKey === 'monthCode')\n continue;\n merged[nextKey] = fields[nextKey];\n }\n const newKeys = ObjectKeys(additionalFields);\n for (const nextKey of newKeys) {\n merged[nextKey] = additionalFields[nextKey];\n }\n if (!ArrayIncludes.call(newKeys, 'month') && !ArrayIncludes.call(newKeys, 'monthCode')) {\n const { month, monthCode } = fields;\n if (month !== undefined)\n merged.month = month;\n if (monthCode !== undefined)\n merged.monthCode = monthCode;\n }\n return merged;\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n let year = GetSlot(date, ISO_YEAR);\n let month = GetSlot(date, ISO_MONTH);\n let day = GetSlot(date, ISO_DAY);\n ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n return ES.CreateTemporalDate(year, month, day, calendar);\n },\n dateUntil(one, two, largestUnit) {\n return ES.DifferenceISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY), largestUnit);\n },\n year(date) {\n return GetSlot(date, ISO_YEAR);\n },\n era() {\n return undefined;\n },\n eraYear() {\n return undefined;\n },\n month(date) {\n return GetSlot(date, ISO_MONTH);\n },\n monthCode(date) {\n return buildMonthCode(GetSlot(date, ISO_MONTH));\n },\n day(date) {\n return GetSlot(date, ISO_DAY);\n },\n dayOfWeek(date) {\n return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n dayOfYear(date) {\n return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n weekOfYear(date) {\n return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n },\n daysInWeek() {\n return 7;\n },\n daysInMonth(date) {\n return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n },\n monthsInYear() {\n return 12;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n return ES.LeapYear(GetSlot(date, ISO_YEAR));\n }\n};\nfunction monthCodeNumberPart(monthCode) {\n if (!monthCode.startsWith('M')) {\n throw new RangeError(`Invalid month code: ${monthCode}. Month codes must start with M.`);\n }\n const month = +monthCode.slice(1);\n if (isNaN(month))\n throw new RangeError(`Invalid month code: ${monthCode}`);\n return month;\n}\nfunction buildMonthCode(month, leap = false) {\n return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth(calendarDate, overflow = undefined, monthsPerYear = 12) {\n let { month, monthCode } = calendarDate;\n if (monthCode === undefined) {\n if (month === undefined)\n throw new TypeError('Either month or monthCode are required');\n // The ISO calendar uses the default (undefined) value because it does\n // constrain/reject after this method returns. Non-ISO calendars, however,\n // rely on this function to constrain/reject out-of-range `month` values.\n if (overflow === 'reject')\n ES.RejectToRange(month, 1, monthsPerYear);\n if (overflow === 'constrain')\n month = ES.ConstrainToRange(month, 1, monthsPerYear);\n monthCode = buildMonthCode(month);\n }\n else {\n const numberPart = monthCodeNumberPart(monthCode);\n if (month !== undefined && month !== numberPart) {\n throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n }\n if (monthCode !== buildMonthCode(numberPart)) {\n throw new RangeError(`Invalid month code: ${monthCode}`);\n }\n month = numberPart;\n if (month < 1 || month > monthsPerYear)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n return { ...calendarDate, month, monthCode };\n}\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance. No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n constructor(cacheToClone) {\n this.map = new Map();\n this.calls = 0;\n this.hits = 0;\n this.misses = 0;\n this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n if (cacheToClone !== undefined) {\n let i = 0;\n for (const entry of cacheToClone.map.entries()) {\n if (++i > OneObjectCache.MAX_CACHE_ENTRIES)\n break;\n this.map.set(...entry);\n }\n }\n }\n get(key) {\n const result = this.map.get(key);\n if (result) {\n this.hits++;\n this.report();\n }\n this.calls++;\n return result;\n }\n set(key, value) {\n this.map.set(key, value);\n this.misses++;\n this.report();\n }\n report() {\n /*\n if (this.calls === 0) return;\n const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n */\n }\n setObject(obj) {\n if (OneObjectCache.objectMap.get(obj))\n throw new RangeError('object already cached');\n OneObjectCache.objectMap.set(obj, this);\n this.report();\n }\n /**\n * Returns a WeakMap-backed cache that's used to store expensive results\n * that are associated with a particular Temporal object instance.\n *\n * @param obj - object to associate with the cache\n */\n static getCacheForObject(obj) {\n let cache = OneObjectCache.objectMap.get(obj);\n if (!cache) {\n cache = new OneObjectCache();\n OneObjectCache.objectMap.set(obj, cache);\n }\n return cache;\n }\n}\nOneObjectCache.objectMap = new WeakMap();\nOneObjectCache.MAX_CACHE_ENTRIES = 1000;\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }) {\n const yearString = ES.ISOYearString(isoYear);\n const monthString = ES.ISODateTimePartString(isoMonth);\n const dayString = ES.ISODateTimePartString(isoDay);\n return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\nfunction simpleDateDiff(one, two) {\n return {\n years: one.year - two.year,\n months: one.month - two.month,\n days: one.day - two.day\n };\n}\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nclass HelperBase {\n constructor() {\n // The short era format works for all calendars except Japanese, which will\n // override.\n this.eraLength = 'short';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = true;\n }\n getFormatter() {\n // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n // calendars that are used. Note that the nonIsoHelperBase object is spread\n // into each each calendar's implementation before any cache is created, so\n // each calendar gets its own separate cached formatter.\n if (typeof this.formatter === 'undefined') {\n this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n era: this.eraLength,\n timeZone: 'UTC'\n });\n }\n return this.formatter;\n }\n isoToCalendarDate(isoDate, cache) {\n const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n let parts, isoString;\n try {\n isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n parts = dateTimeFormat.formatToParts(new Date(isoString));\n }\n catch (e) {\n throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n }\n const result = {};\n for (let { type, value } of parts) {\n if (type === 'year')\n result.eraYear = +value;\n // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n if (type === 'relatedYear')\n result.eraYear = +value;\n if (type === 'month') {\n const matches = /^([0-9]*)(.*?)$/.exec(value);\n if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n throw new RangeError(`Unexpected month: ${value}`);\n }\n // If the month has no numeric part (should only see this for the Hebrew\n // calendar with newer FF / Chromium versions; see\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n // placeholder month index of `1` and rely on the derived class to\n // calculate the correct month index from the month name stored in\n // `monthExtra`.\n result.month = matches[1] ? +matches[1] : 1;\n if (result.month < 1) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)');\n }\n if (result.month > 13) {\n throw new RangeError(`Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n // The ICU formats for the Hebrew calendar no longer support a numeric\n // month format. So we'll rely on the derived class to interpret it.\n // `monthExtra` is also used on the Chinese calendar to handle a suffix\n // \"bis\" indicating a leap month.\n if (matches[2])\n result.monthExtra = matches[2];\n }\n if (type === 'day')\n result.day = +value;\n if (this.hasEra && type === 'era' && value != null && value !== '') {\n // The convention for Temporal era values is lowercase, so following\n // that convention in this prototype. Punctuation is removed, accented\n // letters are normalized, and spaces are replaced with dashes.\n // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n // The call to normalize() and the replacement regex deals with era\n // names that contain non-ASCII characters like Japanese eras. Also\n // ignore extra content in parentheses like JPN era date ranges.\n value = value.split(' (')[0];\n result.era = value\n .normalize('NFD')\n .replace(/[^-0-9 \\p{L}]/gu, '')\n .replace(' ', '-')\n .toLowerCase();\n }\n }\n if (result.eraYear === undefined) {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n // Translate eras that may be handled differently by Temporal vs. by Intl\n // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n if (this.reviseIntlEra) {\n const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n result.era = era;\n result.eraYear = eraYear;\n }\n if (this.checkIcuBugs)\n this.checkIcuBugs(isoDate);\n const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n if (calendarDate.year === undefined)\n throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.month === undefined)\n throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n if (calendarDate.day === undefined)\n throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n cache.set(key, calendarDate);\n // Also cache the reverse mapping\n ['constrain', 'reject'].forEach((overflow) => {\n const keyReverse = JSON.stringify({\n func: 'calendarToIsoDate',\n year: calendarDate.year,\n month: calendarDate.month,\n day: calendarDate.day,\n overflow,\n id: this.id\n });\n cache.set(keyReverse, isoDate);\n });\n return calendarDate;\n }\n validateCalendarDate(calendarDate) {\n const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n // the derived class must deal with it.\n if (monthExtra !== undefined)\n throw new RangeError('Unexpected `monthExtra` value');\n if (year === undefined && eraYear === undefined)\n throw new TypeError('year or eraYear is required');\n if (month === undefined && monthCode === undefined)\n throw new TypeError('month or monthCode is required');\n if (day === undefined)\n throw new RangeError('Missing day');\n if (monthCode !== undefined) {\n if (typeof monthCode !== 'string') {\n throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n }\n if (!/^M([01]?\\d)(L?)$/.test(monthCode))\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n if (this.constantEra) {\n if (era !== undefined && era !== this.constantEra) {\n throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n }\n if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n }\n }\n }\n /**\n * Allows derived calendars to add additional fields and/or to make\n * adjustments e.g. to set the era based on the date or to revise the month\n * number in lunisolar calendars per\n * https://github.com/tc39/proposal-temporal/issues/1203.\n *\n * The base implementation fills in missing values by assuming the simplest\n * possible calendar:\n * - no eras or a constant era defined in `.constantEra`\n * - non-lunisolar calendar (no leap months)\n * */\n adjustCalendarDate(calendarDateParam, cache = undefined, overflow = 'constrain', \n // This param is only used by derived classes\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromLegacyDate = false) {\n if (this.calendarType === 'lunisolar')\n throw new RangeError('Override required for lunisolar calendars');\n let calendarDate = calendarDateParam;\n this.validateCalendarDate(calendarDate);\n // For calendars that always use the same era, set it here so that derived\n // calendars won't need to implement this method simply to set the era.\n if (this.constantEra) {\n // year and eraYear always match when there's only one possible era\n const { year, eraYear } = calendarDate;\n calendarDate = {\n ...calendarDate,\n era: this.constantEra,\n year: year !== undefined ? year : eraYear,\n eraYear: eraYear !== undefined ? eraYear : year\n };\n }\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, monthCode } = calendarDate;\n ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n return { ...calendarDate, month, monthCode };\n }\n regulateMonthDayNaive(calendarDate, overflow, cache) {\n const largestMonth = this.monthsInYear(calendarDate, cache);\n let { month, day } = calendarDate;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n }\n return { ...calendarDate, month, day };\n }\n calendarToIsoDate(dateParam, overflow = 'constrain', cache) {\n const originalDate = dateParam;\n // First, normalize the calendar date to ensure that (year, month, day)\n // are all present, converting monthCode and eraYear if needed.\n let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n // Fix obviously out-of-bounds values. Values that are valid generally, but\n // not in this particular year, may not be caught here for some calendars.\n // If so, these will be handled lower below.\n date = this.regulateMonthDayNaive(date, overflow, cache);\n const { year, month, day } = date;\n const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n let cached = cache.get(key);\n if (cached)\n return cached;\n // If YMD are present in the input but the input has been constrained\n // already, then cache both the original value and the constrained value.\n let keyOriginal;\n if (originalDate.year !== undefined &&\n originalDate.month !== undefined &&\n originalDate.day !== undefined &&\n (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)) {\n keyOriginal = JSON.stringify({\n func: 'calendarToIsoDate',\n year: originalDate.year,\n month: originalDate.month,\n day: originalDate.day,\n overflow,\n id: this.id\n });\n cached = cache.get(keyOriginal);\n if (cached)\n return cached;\n }\n // First, try to roughly guess the result\n let isoEstimate = this.estimateIsoDate({ year, month, day });\n const calculateSameMonthResult = (diffDays) => {\n // If the estimate is in the same year & month as the target, then we can\n // calculate the result exactly and short-circuit any additional logic.\n // This optimization assumes that months are continuous. It would break if\n // a calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So\n // this optimization should be safe for all ICU calendars.\n let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n if (date.day > this.minimumMonthLength(date)) {\n // There's a chance that the calendar date is out of range. Throw or\n // constrain if so.\n let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n if (overflow === 'reject') {\n throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n }\n // Back up a day at a time until we're not hanging over the month end\n testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n }\n }\n return testIsoEstimate;\n };\n let sign = 0;\n let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n let diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n }\n else {\n sign = this.compareCalendarDates(date, roundtripEstimate);\n }\n }\n // If the initial guess is not in the same month, then then bisect the\n // distance to the target, starting with 8 days per step.\n let increment = 8;\n let maybeConstrained = false;\n while (sign) {\n isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n const oldRoundtripEstimate = roundtripEstimate;\n roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n const oldSign = sign;\n sign = this.compareCalendarDates(date, roundtripEstimate);\n if (sign) {\n diff = simpleDateDiff(date, roundtripEstimate);\n if (diff.years === 0 && diff.months === 0) {\n isoEstimate = calculateSameMonthResult(diff.days);\n // Signal the loop condition that there's a match.\n sign = 0;\n // If the calendar day is larger than the minimal length for this\n // month, then it might be larger than the actual length of the month.\n // So we won't cache it as the correct calendar date for this ISO\n // date.\n maybeConstrained = date.day > this.minimumMonthLength(date);\n }\n else if (oldSign && sign !== oldSign) {\n if (increment > 1) {\n // If the estimate overshot the target, try again with a smaller increment\n // in the reverse direction.\n increment /= 2;\n }\n else {\n // Increment is 1, and neither the previous estimate nor the new\n // estimate is correct. The only way that can happen is if the\n // original date was an invalid value that will be constrained or\n // rejected here.\n if (overflow === 'reject') {\n throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n }\n else {\n // To constrain, pick the earliest value\n const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n // If current value is larger, then back up to the previous value.\n if (order > 0)\n isoEstimate = this.addDaysIso(isoEstimate, -1);\n maybeConstrained = true;\n sign = 0;\n }\n }\n }\n }\n }\n cache.set(key, isoEstimate);\n if (keyOriginal)\n cache.set(keyOriginal, isoEstimate);\n if (date.year === undefined ||\n date.month === undefined ||\n date.day === undefined ||\n date.monthCode === undefined ||\n (this.hasEra && (date.era === undefined || date.eraYear === undefined))) {\n throw new RangeError('Unexpected missing property');\n }\n if (!maybeConstrained) {\n // Also cache the reverse mapping\n const keyReverse = JSON.stringify({\n func: 'isoToCalendarDate',\n isoYear: isoEstimate.year,\n isoMonth: isoEstimate.month,\n isoDay: isoEstimate.day,\n id: this.id\n });\n cache.set(keyReverse, date);\n }\n return isoEstimate;\n }\n temporalToCalendarDate(date, cache) {\n const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n const result = this.isoToCalendarDate(isoDate, cache);\n return result;\n }\n compareCalendarDates(date1Param, date2Param) {\n // `date1` and `date2` are already records. The calls below simply validate\n // that all three required fields are present.\n const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n if (date1.year !== date2.year)\n return ES.ComparisonResult(date1.year - date2.year);\n if (date1.month !== date2.month)\n return ES.ComparisonResult(date1.month - date2.month);\n if (date1.day !== date2.day)\n return ES.ComparisonResult(date1.day - date2.day);\n return 0;\n }\n /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n regulateDate(calendarDate, overflow = 'constrain', cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n return this.isoToCalendarDate(isoDate, cache);\n }\n addDaysIso(isoDate, days) {\n const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n return added;\n }\n addDaysCalendar(calendarDate, days, cache) {\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIso = this.addDaysIso(isoDate, days);\n const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n return addedCalendar;\n }\n addMonthsCalendar(calendarDateParam, months, overflow, cache) {\n let calendarDate = calendarDateParam;\n const { day } = calendarDate;\n for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n const { month } = calendarDate;\n const oldCalendarDate = calendarDate;\n const days = months < 0\n ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n : this.daysInMonth(calendarDate, cache);\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n let addedIso = this.addDaysIso(isoDate, days);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n // Normally, we can advance one month by adding the number of days in the\n // current month. However, if we're at the end of the current month and\n // the next month has fewer days, then we rolled over to the after-next\n // month. Below we detect this condition and back up until we're back in\n // the desired month.\n if (months > 0) {\n const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n while (calendarDate.month - 1 !== month % monthsInOldYear) {\n addedIso = this.addDaysIso(addedIso, -1);\n calendarDate = this.isoToCalendarDate(addedIso, cache);\n }\n }\n if (calendarDate.day !== day) {\n // try to retain the original day-of-month, if possible\n calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n }\n }\n if (overflow === 'reject' && calendarDate.day !== day) {\n throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n }\n return calendarDate;\n }\n addCalendar(calendarDate, { years = 0, months = 0, weeks = 0, days = 0 }, overflow, cache) {\n const { year, day, monthCode } = calendarDate;\n const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n const initialDays = days + weeks * 7;\n const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n return addedDays;\n }\n untilCalendar(calendarOne, calendarTwo, largestUnit, cache) {\n let days = 0;\n let weeks = 0;\n let months = 0;\n let years = 0;\n switch (largestUnit) {\n case 'day':\n days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n break;\n case 'week': {\n const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n days = totalDays % 7;\n weeks = (totalDays - days) / 7;\n break;\n }\n case 'month':\n case 'year': {\n const diffYears = calendarTwo.year - calendarOne.year;\n const diffMonths = calendarTwo.month - calendarOne.month;\n const diffDays = calendarTwo.day - calendarOne.day;\n const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n if (!sign) {\n return { years: 0, months: 0, weeks: 0, days: 0 };\n }\n if (largestUnit === 'year' && diffYears) {\n const isOneFurtherInYear = diffMonths * sign < 0 || (diffMonths === 0 && diffDays * sign < 0);\n years = isOneFurtherInYear ? diffYears - sign : diffYears;\n }\n const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n // Now we have less than one year remaining. Add one month at a time\n // until we go over the target, then back up one month and calculate\n // remaining days and weeks.\n let current;\n let next = yearsAdded;\n do {\n months += sign;\n current = next;\n next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n if (next.day !== calendarOne.day) {\n // In case the day was constrained down, try to un-constrain it\n next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n }\n } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n months -= sign; // correct for loop above which overshoots by 1\n const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n days = remainingDays;\n break;\n }\n }\n return { years, months, weeks, days };\n }\n daysInMonth(calendarDate, cache) {\n // Add enough days to roll over to the next month. One we're in the next\n // month, we can calculate the length of the current month. NOTE: This\n // algorithm assumes that months are continuous. It would break if a\n // calendar skipped days, like the Julian->Gregorian switchover. But the\n // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n // that's currently detected by `checkIcuBugs()` which will throw. So this\n // code should be safe for all ICU calendars.\n const { day } = calendarDate;\n const max = this.maximumMonthLength(calendarDate);\n const min = this.minimumMonthLength(calendarDate);\n // easiest case: we already know the month length if min and max are the same.\n if (min === max)\n return min;\n // Add enough days to get into the next month, without skipping it\n const increment = day <= max - min ? max : min;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const addedIsoDate = this.addDaysIso(isoDate, increment);\n const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n // Now back up to the last day of the original month\n const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n return endOfMonthCalendar.day;\n }\n daysInPreviousMonth(calendarDate, cache) {\n const { day, month, year } = calendarDate;\n // Check to see if we already know the month length, and return it if so\n const previousMonthYear = month > 1 ? year : year - 1;\n let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n previousMonthDate = { ...previousMonthDate, month: previousMonth };\n const min = this.minimumMonthLength(previousMonthDate);\n const max = this.maximumMonthLength(previousMonthDate);\n if (min === max)\n return max;\n const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n return lastDayOfPreviousMonthCalendar.day;\n }\n startOfCalendarYear(calendarDate) {\n return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n }\n startOfCalendarMonth(calendarDate) {\n return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n }\n calendarDaysUntil(calendarOne, calendarTwo, cache) {\n const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n return this.isoDaysUntil(oneIso, twoIso);\n }\n isoDaysUntil(oneIso, twoIso) {\n const duration = ES.DifferenceISODate(oneIso.year, oneIso.month, oneIso.day, twoIso.year, twoIso.month, twoIso.day, 'day');\n return duration.days;\n }\n monthDayFromFields(fields, overflow, cache) {\n let { year, month, monthCode, day, era, eraYear } = fields;\n if (monthCode === undefined) {\n if (year === undefined && (era === undefined || eraYear === undefined)) {\n throw new TypeError('`monthCode`, `year`, or `era` and `eraYear` is required');\n }\n ({ monthCode, year } = this.adjustCalendarDate({ year, month, monthCode, day, era, eraYear }, cache, overflow));\n }\n let isoYear, isoMonth, isoDay;\n let closestCalendar, closestIso;\n // Look backwards starting from the calendar year of 1972-01-01 up to 100\n // calendar years to find a year that has this month and day. Normal months\n // and days will match immediately, but for leap days and leap months we may\n // have to look for a while.\n const startDateIso = { year: 1972, month: 1, day: 1 };\n const { year: calendarYear } = this.isoToCalendarDate(startDateIso, cache);\n for (let i = 0; i < 100; i++) {\n const testCalendarDate = this.adjustCalendarDate({ day, monthCode, year: calendarYear - i }, cache);\n const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n return { month: isoMonth, day: isoDay, year: isoYear };\n }\n else if (overflow === 'constrain') {\n // non-ISO constrain algorithm tries to find the closest date in a matching month\n if (closestCalendar === undefined ||\n (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n roundTripCalendarDate.day > closestCalendar.day)) {\n closestCalendar = roundTripCalendarDate;\n closestIso = isoDate;\n }\n }\n }\n if (overflow === 'constrain' && closestIso !== undefined)\n return closestIso;\n throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n }\n}\nclass HebrewHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'hebrew';\n this.calendarType = 'lunisolar';\n this.months = {\n Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n 'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n 'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n };\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate) {\n const { year } = calendarDate;\n // FYI: In addition to adding a month in leap years, the Hebrew calendar\n // also has per-year changes to the number of days of Heshvan and Kislev.\n // Given that these can be calculated by counting the number of days in\n // those months, I assume that these DO NOT need to be exposed as\n // Hebrew-only prototype fields or methods.\n return (7 * year + 1) % 19 < 7;\n }\n monthsInYear(calendarDate) {\n return this.inLeapYear(calendarDate) ? 13 : 12;\n }\n minimumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'min');\n }\n maximumMonthLength(calendarDate) {\n return this.minMaxMonthLength(calendarDate, 'max');\n }\n minMaxMonthLength(calendarDate, minOrMax) {\n const { month, year } = calendarDate;\n const monthCode = this.getMonthCode(year, month);\n const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n if (monthInfo === undefined)\n throw new RangeError(`unmatched Hebrew month: ${month}`);\n const daysInMonth = monthInfo[1].days;\n return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n }\n /** Take a guess at what ISO date a particular calendar date corresponds to */\n estimateIsoDate(calendarDate) {\n const { year } = calendarDate;\n return { year: year - 3760, month: 1, day: 1 };\n }\n getMonthCode(year, month) {\n if (this.inLeapYear({ year })) {\n return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n }\n else {\n return buildMonthCode(month);\n }\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n // The incoming type is actually CalendarDate (same as args to\n // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n // reassignments below, so as an alternative to 10+ type casts, we'll lie\n // here and claim that the type has `day` and `year` filled in already.\n let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate;\n if (year === undefined && eraYear !== undefined)\n year = eraYear;\n if (eraYear === undefined && year !== undefined)\n eraYear = year;\n if (fromLegacyDate) {\n // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n // output returns the numeric equivalent of `month` as a string, meaning\n // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n // means Adar. In this case, `month` will already be correct and no action\n // is needed. However, in Node 14 and later formatToParts returns the name\n // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n // correct `month` using the string name as a key.\n if (monthExtra) {\n const monthInfo = this.months[monthExtra];\n if (!monthInfo)\n throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n }\n // Because we're getting data from legacy Date, then `month` will always be present\n monthCode = this.getMonthCode(year, month);\n const result = { year, month: month, day, era: undefined, eraYear, monthCode };\n return result;\n }\n else {\n // When called without input coming from legacy Date output, simply ensure\n // that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (month === undefined) {\n if (monthCode.endsWith('L')) {\n if (monthCode !== 'M05L') {\n throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n }\n month = 6;\n if (!this.inLeapYear({ year })) {\n if (overflow === 'reject') {\n throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n }\n else {\n // constrain to last day of previous month (Av)\n month = 5;\n day = 30;\n monthCode = 'M05';\n }\n }\n }\n else {\n month = monthCodeNumberPart(monthCode);\n // if leap month is before this one, the month index is one more than the month code\n if (this.inLeapYear({ year }) && month >= 6)\n month++;\n const largestMonth = this.monthsInYear({ year });\n if (month < 1 || month > largestMonth)\n throw new RangeError(`Invalid monthCode: ${monthCode}`);\n }\n }\n else {\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n else {\n month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n }\n if (monthCode === undefined) {\n monthCode = this.getMonthCode(year, month);\n }\n else {\n const calculatedMonthCode = this.getMonthCode(year, month);\n if (calculatedMonthCode !== monthCode) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n }\n }\n }\n return { ...calendarDate, day, month, monthCode: monthCode, year, eraYear };\n }\n }\n}\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nclass IslamicBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunar';\n this.DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n this.DAYS_PER_ISO_YEAR = 365.2425;\n this.constantEra = 'ah';\n }\n inLeapYear(calendarDate, cache) {\n // In leap years, the 12th month has 30 days. In non-leap years: 29.\n const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n return days === 30;\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n }\n}\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic';\n }\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-umalqura';\n }\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-tbla';\n }\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-civil';\n }\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamic-rgsa';\n }\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'islamicc';\n }\n}\nclass PersianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'persian';\n this.calendarType = 'solar';\n this.constantEra = 'ap';\n }\n inLeapYear(calendarDate, cache) {\n // Same logic (count days in the last month) for Persian as for Islamic,\n // even though Persian is solar and Islamic is lunar.\n return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 29;\n return month <= 6 ? 31 : 30;\n }\n maximumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 12)\n return 30;\n return month <= 6 ? 31 : 30;\n }\n estimateIsoDate(calendarDate) {\n const { year } = this.adjustCalendarDate(calendarDate);\n return { year: year + 621, month: 1, day: 1 };\n }\n}\nclass IndianHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.id = 'indian';\n this.calendarType = 'solar';\n this.constantEra = 'saka';\n // Indian months always start at the same well-known Gregorian month and\n // day. So this conversion is easy and fast. See\n // https://en.wikipedia.org/wiki/Indian_national_calendar\n this.months = {\n 1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n 2: { length: 31, month: 4, day: 21 },\n 3: { length: 31, month: 5, day: 22 },\n 4: { length: 31, month: 6, day: 22 },\n 5: { length: 31, month: 7, day: 23 },\n 6: { length: 31, month: 8, day: 23 },\n 7: { length: 30, month: 9, day: 23 },\n 8: { length: 30, month: 10, day: 23 },\n 9: { length: 30, month: 11, day: 22 },\n 10: { length: 30, month: 12, day: 22 },\n 11: { length: 30, month: 1, nextYear: true, day: 21 },\n 12: { length: 30, month: 2, nextYear: true, day: 20 }\n };\n // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n // calendar output to fail for all dates before 0001-01-01 ISO. For example,\n // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n // expected.\n this.vulnerableToBceBug = new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n }\n inLeapYear(calendarDate) {\n // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n // Years are counted in the Saka era, which starts its year 0 in the year 78\n // of the Common Era. To determine leap years, add 78 to the Saka year – if\n // the result is a leap year in the Gregorian calendar, then the Saka year\n // is a leap year as well.\n return isGregorianLeapYear(calendarDate.year + 78);\n }\n monthsInYear( /* calendarYear, cache */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n maximumMonthLength(calendarDate) {\n return this.getMonthInfo(calendarDate).length;\n }\n getMonthInfo(calendarDate) {\n const { month } = calendarDate;\n let monthInfo = this.months[month];\n if (monthInfo === undefined)\n throw new RangeError(`Invalid month: ${month}`);\n if (this.inLeapYear(calendarDate) && monthInfo.leap)\n monthInfo = monthInfo.leap;\n return monthInfo;\n }\n estimateIsoDate(calendarDateParam) {\n // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n // calendar fast!\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const monthInfo = this.getMonthInfo(calendarDate);\n const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n const isoMonth = monthInfo.month;\n const isoDay = monthInfo.day;\n const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n return isoDate;\n }\n checkIcuBugs(isoDate) {\n if (this.vulnerableToBceBug && isoDate.year < 1) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)');\n }\n }\n}\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam) {\n let eras = erasParam;\n if (eras.length === 0) {\n throw new RangeError('Invalid era data: eras are required');\n }\n if (eras.length === 1 && eras[0].reverseOf) {\n throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n }\n if (eras.length === 1 && !eras[0].name) {\n throw new RangeError('Invalid era data: at least one named era is required');\n }\n if (eras.filter((e) => e.reverseOf != null).length > 1) {\n throw new RangeError('Invalid era data: only one era can count years backwards');\n }\n // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n // eras can never be anchors. The era without an `anchorEpoch` property is the\n // anchor.\n let anchorEra;\n eras.forEach((e) => {\n if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n if (anchorEra)\n throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n anchorEra = e;\n e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n }\n else if (!e.name) {\n throw new RangeError('If era name is blank, it must be the anchor era');\n }\n });\n // If the era name is undefined, then it's an anchor that doesn't interact\n // with eras at all. For example, Japanese `year` is always the same as ISO\n // `year`. So this \"era\" is the anchor era but isn't used for era matching.\n // Strip it from the list that's returned.\n eras = eras.filter((e) => e.name);\n eras.forEach((e) => {\n // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n // Replace the string-valued \"reverseOf\" property with the actual era object\n // that's reversed.\n const { reverseOf } = e;\n if (reverseOf) {\n const reversedEra = eras.find((era) => era.name === reverseOf);\n if (reversedEra === undefined)\n throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n e.reverseOf = reversedEra;\n e.anchorEpoch = reversedEra.anchorEpoch;\n e.isoEpoch = reversedEra.isoEpoch;\n }\n if (e.anchorEpoch.month === undefined)\n e.anchorEpoch.month = 1;\n if (e.anchorEpoch.day === undefined)\n e.anchorEpoch.day = 1;\n });\n // Ensure that the latest epoch is first in the array. This lets us try to\n // match eras in index order, with the last era getting the remaining older\n // years. Any reverse-signed era must be at the end.\n ArraySort.call(eras, (e1, e2) => {\n if (e1.reverseOf)\n return 1;\n if (e2.reverseOf)\n return -1;\n if (!e1.isoEpoch || !e2.isoEpoch)\n throw new RangeError('Invalid era data: missing ISO epoch');\n return e2.isoEpoch.year - e1.isoEpoch.year;\n });\n // If there's a reversed era, then the one before it must be the era that's\n // being reversed.\n const lastEraReversed = eras[eras.length - 1].reverseOf;\n if (lastEraReversed) {\n if (lastEraReversed !== eras[eras.length - 2])\n throw new RangeError('Invalid era data: invalid reverse-sign era');\n }\n // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n // zero-based index, with the oldest era being zero. This format is used by\n // older versions of ICU data.\n eras.forEach((e, i) => {\n e.genericName = `era${eras.length - 1 - i}`;\n });\n return { eras: eras, anchorEra: (anchorEra || eras[0]) };\n}\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n/** Base for all Gregorian-like calendars. */\nclass GregorianBaseHelper extends HelperBase {\n constructor(id, originalEras) {\n super();\n this.calendarType = 'solar';\n // Several calendars based on the Gregorian calendar use Julian dates (not\n // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n this.v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n .startsWith('12');\n this.calendarIsVulnerableToJulianBug = false;\n this.id = id;\n const { eras, anchorEra } = adjustEras(originalEras);\n this.anchorEra = anchorEra;\n this.eras = eras;\n }\n inLeapYear(calendarDate) {\n // Calendars that don't override this method use the same months and leap\n // years as Gregorian. Once we know the ISO year corresponding to the\n // calendar year, we'll know if it's a leap year or not.\n const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n return isGregorianLeapYear(year);\n }\n monthsInYear( /* calendarDate */) {\n return 12;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n if (month === 2)\n return this.inLeapYear(calendarDate) ? 29 : 28;\n return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n /** Fill in missing parts of the (year, era, eraYear) tuple */\n completeEraYear(calendarDate) {\n const checkField = (name, value) => {\n const currentValue = calendarDate[name];\n if (currentValue != null && currentValue != value) {\n throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n }\n };\n const eraFromYear = (year) => {\n let eraYear;\n const adjustedCalendarDate = { ...calendarDate, year };\n const matchingEra = this.eras.find((e, i) => {\n if (i === this.eras.length - 1) {\n if (e.reverseOf) {\n // This is a reverse-sign era (like BCE) which must be the oldest\n // era. Count years backwards.\n if (year > 0)\n throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n eraYear = e.anchorEpoch.year - year;\n return true;\n }\n // last era always gets all \"leftover\" (older than epoch) years,\n // so no need for a comparison like below.\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n if (comparison >= 0) {\n eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n return true;\n }\n return false;\n });\n if (!matchingEra)\n throw new RangeError(`Year ${year} was not matched by any era`);\n return { eraYear: eraYear, era: matchingEra.name };\n };\n let { year, eraYear, era } = calendarDate;\n if (year != null) {\n ({ eraYear, era } = eraFromYear(year));\n checkField('era', era);\n checkField('eraYear', eraYear);\n }\n else if (eraYear != null) {\n const matchingEra = era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n if (!matchingEra)\n throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n if (eraYear < 1 && matchingEra.reverseOf) {\n throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n }\n if (matchingEra.reverseOf) {\n year = matchingEra.anchorEpoch.year - eraYear;\n }\n else {\n year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n }\n checkField('year', year);\n // We'll accept dates where the month/day is earlier than the start of\n // the era or after its end as long as it's in the same year. If that\n // happens, we'll adjust the era/eraYear pair to be the correct era for\n // the `year`.\n ({ eraYear, era } = eraFromYear(year));\n }\n else {\n throw new RangeError('Either `year` or `eraYear` and `era` are required');\n }\n return { ...calendarDate, year, eraYear, era };\n }\n adjustCalendarDate(calendarDateParam, cache, overflow = 'constrain') {\n let calendarDate = calendarDateParam;\n // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n const { month, monthCode } = calendarDate;\n if (month === undefined)\n calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode) };\n this.validateCalendarDate(calendarDate);\n calendarDate = this.completeEraYear(calendarDate);\n return super.adjustCalendarDate(calendarDate, cache, overflow);\n }\n estimateIsoDate(calendarDateParam) {\n const calendarDate = this.adjustCalendarDate(calendarDateParam);\n const { year, month, day } = calendarDate;\n const { anchorEra } = this;\n const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n }\n checkIcuBugs(isoDate) {\n if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n if (beforeJulianSwitch) {\n throw new RangeError(`calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)');\n }\n }\n }\n}\nclass OrthodoxBaseHelper extends GregorianBaseHelper {\n constructor(id, originalEras) {\n super(id, originalEras);\n }\n inLeapYear(calendarDate) {\n // Leap years happen one year before the Julian leap year. Note that this\n // calendar is based on the Julian calendar which has a leap year every 4\n // years, unlike the Gregorian calendar which doesn't have leap years on\n // years divisible by 100 except years divisible by 400.\n //\n // Note that we're assuming that leap years in before-epoch times match\n // how leap years are defined now. This is probably not accurate but I'm\n // not sure how better to do it.\n const { year } = calendarDate;\n return (year + 1) % 4 === 0;\n }\n monthsInYear( /* calendarDate */) {\n return 13;\n }\n minimumMonthLength(calendarDate) {\n const { month } = calendarDate;\n // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n if (month === 13)\n return this.inLeapYear(calendarDate) ? 6 : 5;\n return 30;\n }\n maximumMonthLength(calendarDate) {\n return this.minimumMonthLength(calendarDate);\n }\n}\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n// two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n// zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n constructor() {\n super('coptic', [\n { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n { name: 'era0', reverseOf: 'era1' }\n ]);\n }\n}\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n constructor() {\n super('ethiopic', [\n { name: 'aa', isoEpoch: { year: -5492, month: 7, day: 17 } },\n { name: 'am', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n ]);\n }\n}\nclass RocHelper extends GregorianBaseHelper {\n constructor() {\n super('roc', [\n { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n { name: 'before-roc', reverseOf: 'minguo' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass BuddhistHelper extends GregorianBaseHelper {\n constructor() {\n super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n this.calendarIsVulnerableToJulianBug = true;\n }\n}\nclass GregoryHelper extends GregorianBaseHelper {\n constructor() {\n super('gregory', [\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n }\n reviseIntlEra(calendarDate /*, isoDate: IsoDate*/) {\n let { era, eraYear } = calendarDate;\n // Firefox 96 introduced a bug where the `'short'` format of the era\n // option mistakenly returns the one-letter (narrow) format instead. The\n // code below handles either the correct or Firefox-buggy format. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n if (era === 'bc' || era === 'b')\n era = 'bce';\n if (era === 'ad' || era === 'a')\n era = 'ce';\n return { era, eraYear };\n }\n}\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n// challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n// dates are modified, leading to considerable churn which is not good for\n// Temporal use.\n// - The earliest era (in 645 CE) may not end up being the earliest depending\n// on future historical scholarship\n// - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n// that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n constructor() {\n super('japanese', [\n // The Japanese calendar `year` is just the ISO year, because (unlike other\n // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n { name: 'bce', reverseOf: 'ce' }\n ]);\n this.calendarIsVulnerableToJulianBug = true;\n // The last 3 Japanese eras confusingly return only one character in the\n // default \"short\" era, so need to use the long format.\n this.eraLength = 'long';\n }\n reviseIntlEra(calendarDate, isoDate) {\n const { era, eraYear } = calendarDate;\n const { year: isoYear } = isoDate;\n if (this.eras.find((e) => e.name === era))\n return { era, eraYear };\n return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear });\n }\n}\nclass ChineseBaseHelper extends HelperBase {\n constructor() {\n super(...arguments);\n this.calendarType = 'lunisolar';\n // All built-in calendars except Chinese/Dangi and Hebrew use an era\n this.hasEra = false;\n }\n inLeapYear(calendarDate, cache) {\n const months = this.getMonthList(calendarDate.year, cache);\n return ObjectEntries(months).length === 13;\n }\n monthsInYear(calendarDate, cache) {\n return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n }\n minimumMonthLength( /* calendarDate */) {\n return 29;\n }\n maximumMonthLength( /* calendarDate */) {\n return 30;\n }\n getMonthList(calendarYear, cache) {\n if (calendarYear === undefined) {\n throw new TypeError('Missing year');\n }\n const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n const cached = cache.get(key);\n if (cached)\n return cached;\n const dateTimeFormat = this.getFormatter();\n const getCalendarDate = (isoYear, daysPastFeb1) => {\n const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n const legacyDate = new Date(isoStringFeb1);\n // Now add the requested number of days, which may wrap to the next month.\n legacyDate.setUTCDate(daysPastFeb1 + 1);\n const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n const calendarMonthString = newYearGuess.find((tv) => tv.type === 'month').value;\n const calendarDay = +newYearGuess.find((tv) => tv.type === 'day').value;\n let calendarYearToVerify = newYearGuess.find((tv) => tv.type === 'relatedYear');\n if (calendarYearToVerify !== undefined) {\n calendarYearToVerify = +calendarYearToVerify.value;\n }\n else {\n // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n // output of Intl.DateTimeFormat.formatToParts.\n throw new RangeError(`Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`);\n }\n return { calendarMonthString, calendarDay, calendarYearToVerify };\n };\n // First, find a date close to Chinese New Year. Feb 17 will either be in\n // the first month or near the end of the last month of the previous year.\n let isoDaysDelta = 17;\n let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n // If we didn't guess the first month correctly, add (almost in some months)\n // a lunar month\n if (calendarMonthString !== '1') {\n isoDaysDelta += 29;\n ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n }\n // Now back up to near the start of the first month, but not too near that\n // off-by-one issues matter.\n isoDaysDelta -= calendarDay - 5;\n const result = {};\n let monthIndex = 1;\n let oldCalendarDay;\n let oldMonthString;\n let done = false;\n do {\n ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n if (oldCalendarDay) {\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n }\n if (calendarYearToVerify !== calendarYear) {\n done = true;\n }\n else {\n result[calendarMonthString] = { monthIndex: monthIndex++ };\n // Move to the next month. Because months are sometimes 29 days, the day of the\n // calendar month will move forward slowly but not enough to flip over to a new\n // month before the loop ends at 12-13 months.\n isoDaysDelta += 30;\n }\n oldCalendarDay = calendarDay;\n oldMonthString = calendarMonthString;\n } while (!done);\n result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n cache.set(key, result);\n return result;\n }\n estimateIsoDate(calendarDate) {\n const { year, month } = calendarDate;\n return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n }\n adjustCalendarDate(calendarDate, cache, overflow = 'constrain', fromLegacyDate = false) {\n let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n if (fromLegacyDate) {\n // Legacy Date output returns a string that's an integer with an optional\n // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n // month. Below we'll normalize the output.\n year = eraYear;\n if (monthExtra && monthExtra !== 'bis')\n throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n const monthCode = buildMonthCode(month, monthExtra !== undefined);\n const monthString = `${month}${monthExtra || ''}`;\n const months = this.getMonthList(year, cache);\n const monthInfo = months[monthString];\n if (monthInfo === undefined)\n throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n month = monthInfo.monthIndex;\n return { year: year, month, day: day, era: undefined, eraYear, monthCode };\n }\n else {\n // When called without input coming from legacy Date output,\n // simply ensure that all fields are present.\n this.validateCalendarDate(calendarDate);\n if (year === undefined)\n year = eraYear;\n if (eraYear === undefined)\n eraYear = year;\n if (month === undefined) {\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n let monthInfo = months[numberPart];\n month = monthInfo && monthInfo.monthIndex;\n // If this leap month isn't present in this year, constrain down to the last day of the previous month.\n if (month === undefined &&\n monthCode.endsWith('L') &&\n !ArrayIncludes.call(['M01L', 'M12L', 'M13L'], monthCode) &&\n overflow === 'constrain') {\n let withoutML = monthCode.slice(1, -1);\n if (withoutML[0] === '0')\n withoutML = withoutML.slice(1);\n monthInfo = months[withoutML];\n if (monthInfo) {\n ({ daysInMonth: day, monthIndex: month } = monthInfo);\n monthCode = buildMonthCode(withoutML);\n }\n }\n if (month === undefined) {\n throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n }\n }\n else if (monthCode === undefined) {\n const months = this.getMonthList(year, cache);\n const monthEntries = ObjectEntries(months);\n const largestMonth = monthEntries.length;\n if (overflow === 'reject') {\n ES.RejectToRange(month, 1, largestMonth);\n ES.RejectToRange(day, 1, this.maximumMonthLength());\n }\n else {\n month = ES.ConstrainToRange(month, 1, largestMonth);\n day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n }\n const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n if (matchingMonthEntry === undefined) {\n throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n }\n monthCode = buildMonthCode(matchingMonthEntry[0].replace('bis', ''), matchingMonthEntry[0].indexOf('bis') !== -1);\n }\n else {\n // Both month and monthCode are present. Make sure they don't conflict.\n const months = this.getMonthList(year, cache);\n let numberPart = monthCode.replace('L', 'bis').slice(1);\n if (numberPart[0] === '0')\n numberPart = numberPart.slice(1);\n const monthInfo = months[numberPart];\n if (!monthInfo)\n throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n if (month !== monthInfo.monthIndex) {\n throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n }\n }\n return {\n ...calendarDate,\n year: year,\n eraYear,\n month,\n monthCode: monthCode,\n day: day\n };\n }\n }\n}\nclass ChineseHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'chinese';\n }\n}\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n constructor() {\n super(...arguments);\n this.id = 'dangi';\n }\n}\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nconst nonIsoImpl = {\n // `helper` is added when this object is spread into each calendar's\n // implementation\n helper: undefined,\n dateFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n const result = ES.CreateTemporalDate(year, month, day, calendar);\n cache.setObject(result);\n return result;\n },\n yearMonthFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n const cache = new OneObjectCache();\n // Intentionally alphabetical\n const fields = ES.PrepareTemporalFields(fieldsParam, ['era', 'eraYear', 'month', 'monthCode', 'year'], []);\n const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n const result = ES.CreateTemporalYearMonth(year, month, calendar, /* referenceISODay = */ day);\n cache.setObject(result);\n return result;\n },\n monthDayFromFields(fieldsParam, options, calendar) {\n const overflow = ES.ToTemporalOverflow(options);\n // All built-in calendars require `day`, but some allow other fields to be\n // substituted for `month`. And for lunisolar calendars, either `monthCode`\n // or `year` must be provided because `month` is ambiguous without a year or\n // a code.\n const cache = new OneObjectCache();\n const fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'era', 'eraYear', 'month', 'monthCode', 'year'], ['day']);\n const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n // `year` is a reference year where this month/day exists in this calendar\n const result = ES.CreateTemporalMonthDay(month, day, calendar, /* referenceISOYear = */ year);\n cache.setObject(result);\n return result;\n },\n fields(fieldsParam) {\n let fields = fieldsParam;\n if (ArrayIncludes.call(fields, 'year'))\n fields = [...fields, 'era', 'eraYear'];\n return fields;\n },\n mergeFields(fields, additionalFields) {\n const fieldsCopy = { ...fields };\n const additionalFieldsCopy = { ...additionalFields };\n // era and eraYear are intentionally unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { month, monthCode, year, era, eraYear, ...original } = fieldsCopy;\n const { month: newMonth, monthCode: newMonthCode, year: newYear, era: newEra, eraYear: newEraYear } = additionalFieldsCopy;\n if (newMonth === undefined && newMonthCode === undefined) {\n original.month = month;\n original.monthCode = monthCode;\n }\n if (newYear === undefined && newEra === undefined && newEraYear === undefined) {\n // Only `year` is needed. We don't set era and eraYear because it's\n // possible to create a conflict for eras that start or end mid-year. See\n // https://github.com/tc39/proposal-temporal/issues/1784.\n original.year = year;\n }\n return { ...original, ...additionalFieldsCopy };\n },\n dateAdd(date, years, months, weeks, days, overflow, calendar) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n const { year, month, day } = isoAdded;\n const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendar);\n // The new object's cache starts with the cache of the old object\n const newCache = new OneObjectCache(cache);\n newCache.setObject(newTemporalObject);\n return newTemporalObject;\n },\n dateUntil(one, two, largestUnit) {\n const cacheOne = OneObjectCache.getCacheForObject(one);\n const cacheTwo = OneObjectCache.getCacheForObject(two);\n const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n return result;\n },\n year(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.year;\n },\n month(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.month;\n },\n day(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.day;\n },\n era(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.era;\n },\n eraYear(date) {\n if (!this.helper.hasEra)\n return undefined;\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.eraYear;\n },\n monthCode(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n return calendarDate.monthCode;\n },\n dayOfWeek(date) {\n return impl['iso8601'].dayOfWeek(date);\n },\n dayOfYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.isoToCalendarDate(date, cache);\n const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n return diffDays + 1;\n },\n weekOfYear(date) {\n return impl['iso8601'].weekOfYear(date);\n },\n daysInWeek(date) {\n return impl['iso8601'].daysInWeek(date);\n },\n daysInMonth(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n // Easy case: if the helper knows the length without any heavy calculation.\n const max = this.helper.maximumMonthLength(calendarDate);\n const min = this.helper.minimumMonthLength(calendarDate);\n if (max === min)\n return max;\n // The harder case is where months vary every year, e.g. islamic calendars.\n // Find the answer by calculating the difference in days between the first\n // day of the current month and the first day of the next month.\n const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n return result;\n },\n daysInYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n return result;\n },\n monthsInYear(date) {\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.monthsInYear(calendarDate, cache);\n return result;\n },\n inLeapYear(dateParam) {\n let date = dateParam;\n if (!HasSlot(date, ISO_YEAR))\n date = ES.ToTemporalDate(date);\n const cache = OneObjectCache.getCacheForObject(date);\n const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n const result = this.helper.inLeapYear(calendarDate, cache);\n return result;\n }\n};\nfor (const Helper of [\n HebrewHelper,\n PersianHelper,\n EthiopicHelper,\n EthioaaHelper,\n CopticHelper,\n ChineseHelper,\n DangiHelper,\n RocHelper,\n IndianHelper,\n BuddhistHelper,\n GregoryHelper,\n JapaneseHelper,\n IslamicHelper,\n IslamicUmalquraHelper,\n IslamicTblaHelper,\n IslamicCivilHelper,\n IslamicRgsaHelper,\n IslamicCcHelper\n]) {\n const helper = new Helper();\n // Clone the singleton non-ISO implementation that's the same for all\n // calendars. The `helper` property contains per-calendar logic.\n impl[helper.id] = { ...nonIsoImpl, helper };\n}\n//# sourceMappingURL=calendar.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDate {\n constructor(isoYearParam, isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalDateSlots. This check\n // exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get year() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateFromFields(calendar, fields, options);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n }\n add(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.ToTemporalDuration(temporalDurationLike);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n subtract(temporalDurationLike, optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDate('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDate(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalDateToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n }\n toPlainDateTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n let timeZone, temporalTime;\n if (ES.IsObject(item)) {\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n // The cast below is needed because it's possible here for\n // `timeZoneLike` here to be `{ plainTime: Temporal.PlainTimeLike }`,\n // not a TimeZoneProtocol.\n // TODO: should we check for that shape to improve on the (bad) error\n // message that the caller will get from ToTemporalTimeZone?\n timeZone = ES.ToTemporalTimeZone(item);\n }\n else {\n timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n temporalTime = item.plainTime;\n }\n }\n else {\n timeZone = ES.ToTemporalTimeZone(item);\n }\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n let hour = 0, minute = 0, second = 0, millisecond = 0, microsecond = 0, nanosecond = 0;\n if (temporalTime !== undefined) {\n temporalTime = ES.ToTemporalTime(temporalTime);\n hour = GetSlot(temporalTime, ISO_HOUR);\n minute = GetSlot(temporalTime, ISO_MINUTE);\n second = GetSlot(temporalTime, ISO_SECOND);\n millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n }\n const dt = ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalDate(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDate(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDate(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDate(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDate(oneParam);\n const two = ES.ToTemporalDate(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n//# sourceMappingURL=plaindate.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nexport class PlainDateTime {\n constructor(isoYearParam, isoMonthParam, isoDayParam, hourParam = 0, minuteParam = 0, secondParam = 0, millisecondParam = 0, microsecondParam = 0, nanosecondParam = 0, calendarParam = ES.GetISO8601Calendar()) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const hour = ES.ToIntegerThrowOnInfinity(hourParam);\n const minute = ES.ToIntegerThrowOnInfinity(minuteParam);\n const second = ES.ToIntegerThrowOnInfinity(secondParam);\n const millisecond = ES.ToIntegerThrowOnInfinity(millisecondParam);\n const microsecond = ES.ToIntegerThrowOnInfinity(microsecondParam);\n const nanosecond = ES.ToIntegerThrowOnInfinity(nanosecondParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectDateTime in CreateTemporalDateTimeSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 3) {\n throw new RangeError('missing argument: isoYear, isoMonth and isoDay are required');\n }\n ES.CreateTemporalDateTimeSlots(this, isoYear, isoMonth, isoDay, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get year() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get hour() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get dayOfWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n }\n get dayOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n }\n get weekOfYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n }\n get daysInWeek() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalDateTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalDateTimeLike);\n const options = ES.GetOptionsObject(optionsParam);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const props = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid date-time-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const year = GetSlot(this, ISO_YEAR);\n const month = GetSlot(this, ISO_MONTH);\n const day = GetSlot(this, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n if (temporalTimeParam === undefined)\n return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return new PlainDateTime(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), GetSlot(this, ISO_HOUR), GetSlot(this, ISO_MINUTE), GetSlot(this, ISO_SECOND), GetSlot(this, ISO_MILLISECOND), GetSlot(this, ISO_MICROSECOND), GetSlot(this, ISO_NANOSECOND), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n let year = GetSlot(this, ISO_YEAR);\n let month = GetSlot(this, ISO_MONTH);\n let day = GetSlot(this, ISO_DAY);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalDateTime(otherParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const showCalendar = ES.ToShowCalendarOption(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n }\n toZonedDateTime(temporalTimeZoneLike, optionsParam = undefined) {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, this, disambiguation);\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n toPlainDate() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n toPlainTime() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(this);\n }\n getISOFields() {\n if (!ES.IsTemporalDateTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalDateTime(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalDateTime(oneParam);\n const two = ES.ToTemporalDateTime(twoParam);\n for (const slot of [\n ISO_YEAR,\n ISO_MONTH,\n ISO_DAY,\n ISO_HOUR,\n ISO_MINUTE,\n ISO_SECOND,\n ISO_MILLISECOND,\n ISO_MICROSECOND,\n ISO_NANOSECOND\n ]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n//# sourceMappingURL=plaindatetime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class Duration {\n constructor(yearsParam = 0, monthsParam = 0, weeksParam = 0, daysParam = 0, hoursParam = 0, minutesParam = 0, secondsParam = 0, millisecondsParam = 0, microsecondsParam = 0, nanosecondsParam = 0) {\n const years = ES.ToIntegerWithoutRounding(yearsParam);\n const months = ES.ToIntegerWithoutRounding(monthsParam);\n const weeks = ES.ToIntegerWithoutRounding(weeksParam);\n const days = ES.ToIntegerWithoutRounding(daysParam);\n const hours = ES.ToIntegerWithoutRounding(hoursParam);\n const minutes = ES.ToIntegerWithoutRounding(minutesParam);\n const seconds = ES.ToIntegerWithoutRounding(secondsParam);\n const milliseconds = ES.ToIntegerWithoutRounding(millisecondsParam);\n const microseconds = ES.ToIntegerWithoutRounding(microsecondsParam);\n const nanoseconds = ES.ToIntegerWithoutRounding(nanosecondsParam);\n ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n CreateSlots(this);\n SetSlot(this, YEARS, years);\n SetSlot(this, MONTHS, months);\n SetSlot(this, WEEKS, weeks);\n SetSlot(this, DAYS, days);\n SetSlot(this, HOURS, hours);\n SetSlot(this, MINUTES, minutes);\n SetSlot(this, SECONDS, seconds);\n SetSlot(this, MILLISECONDS, milliseconds);\n SetSlot(this, MICROSECONDS, microseconds);\n SetSlot(this, NANOSECONDS, nanoseconds);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get years() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, YEARS);\n }\n get months() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MONTHS);\n }\n get weeks() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, WEEKS);\n }\n get days() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, DAYS);\n }\n get hours() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, HOURS);\n }\n get minutes() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MINUTES);\n }\n get seconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, SECONDS);\n }\n get milliseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MILLISECONDS);\n }\n get microseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, MICROSECONDS);\n }\n get nanoseconds() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, NANOSECONDS);\n }\n get sign() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS));\n }\n get blank() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return (ES.DurationSign(GetSlot(this, YEARS), GetSlot(this, MONTHS), GetSlot(this, WEEKS), GetSlot(this, DAYS), GetSlot(this, HOURS), GetSlot(this, MINUTES), GetSlot(this, SECONDS), GetSlot(this, MILLISECONDS), GetSlot(this, MICROSECONDS), GetSlot(this, NANOSECONDS)) === 0);\n }\n with(durationLike) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const props = ES.PrepareTemporalFields(durationLike, \n // NOTE: Field order here is important.\n [\n 'days',\n 'hours',\n 'microseconds',\n 'milliseconds',\n 'minutes',\n 'months',\n 'nanoseconds',\n 'seconds',\n 'weeks',\n 'years'\n ], 'partial');\n if (!props) {\n throw new TypeError('invalid duration-like');\n }\n const { years = GetSlot(this, YEARS), months = GetSlot(this, MONTHS), weeks = GetSlot(this, WEEKS), days = GetSlot(this, DAYS), hours = GetSlot(this, HOURS), minutes = GetSlot(this, MINUTES), seconds = GetSlot(this, SECONDS), milliseconds = GetSlot(this, MILLISECONDS), microseconds = GetSlot(this, MICROSECONDS), nanoseconds = GetSlot(this, NANOSECONDS) } = props;\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n negated() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.CreateNegatedTemporalDuration(this);\n }\n abs() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return new Duration(Math.abs(GetSlot(this, YEARS)), Math.abs(GetSlot(this, MONTHS)), Math.abs(GetSlot(this, WEEKS)), Math.abs(GetSlot(this, DAYS)), Math.abs(GetSlot(this, HOURS)), Math.abs(GetSlot(this, MINUTES)), Math.abs(GetSlot(this, SECONDS)), Math.abs(GetSlot(this, MILLISECONDS)), Math.abs(GetSlot(this, MICROSECONDS)), Math.abs(GetSlot(this, NANOSECONDS)));\n }\n add(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n }\n subtract(other, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n let defaultLargestUnit = ES.DefaultTemporalLargestUnit(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n let smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'datetime', undefined);\n let smallestUnitPresent = true;\n if (!smallestUnit) {\n smallestUnitPresent = false;\n smallestUnit = 'nanosecond';\n }\n defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'datetime', undefined, ['auto']);\n let largestUnitPresent = true;\n if (!largestUnit) {\n largestUnitPresent = false;\n largestUnit = defaultLargestUnit;\n }\n if (largestUnit === 'auto')\n largestUnit = defaultLargestUnit;\n if (!smallestUnitPresent && !largestUnitPresent) {\n throw new RangeError('at least one of smallestUnit or largestUnit is required');\n }\n if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n }\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const roundingIncrement = ES.ToTemporalDateTimeRoundingIncrement(options, smallestUnit);\n let relativeTo = ES.ToRelativeTemporalObject(options);\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n ES.AdjustRoundedDurationDays(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, roundingIncrement, smallestUnit, roundingMode, relativeTo));\n ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n relativeTo = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit, relativeTo));\n return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n }\n total(optionsParam) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n let years = GetSlot(this, YEARS);\n let months = GetSlot(this, MONTHS);\n let weeks = GetSlot(this, WEEKS);\n let days = GetSlot(this, DAYS);\n let hours = GetSlot(this, HOURS);\n let minutes = GetSlot(this, MINUTES);\n let seconds = GetSlot(this, SECONDS);\n let milliseconds = GetSlot(this, MILLISECONDS);\n let microseconds = GetSlot(this, MICROSECONDS);\n let nanoseconds = GetSlot(this, NANOSECONDS);\n if (optionsParam === undefined)\n throw new TypeError('options argument is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('unit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n // Convert larger units down to days\n ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n let intermediate;\n if (ES.IsTemporalZonedDateTime(relativeTo)) {\n intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n }\n ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, unit, intermediate));\n // Finally, truncate to the correct unit and calculate remainder\n const { total } = ES.RoundDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 1, unit, 'trunc', relativeTo);\n return total;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n if (precision === 'minute')\n throw new RangeError('smallestUnit must not be \"minute\"');\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDurationToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalDuration(this))\n throw new TypeError('invalid receiver');\n if (typeof Intl !== 'undefined' && typeof Intl.DurationFormat !== 'undefined') {\n return new Intl.DurationFormat(locales, options).format(this);\n }\n console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n return ES.TemporalDurationToString(this);\n }\n valueOf() {\n throw new TypeError('use compare() to compare Temporal.Duration');\n }\n static from(item) {\n if (ES.IsTemporalDuration(item)) {\n return new Duration(GetSlot(item, YEARS), GetSlot(item, MONTHS), GetSlot(item, WEEKS), GetSlot(item, DAYS), GetSlot(item, HOURS), GetSlot(item, MINUTES), GetSlot(item, SECONDS), GetSlot(item, MILLISECONDS), GetSlot(item, MICROSECONDS), GetSlot(item, NANOSECONDS));\n }\n return ES.ToTemporalDuration(item);\n }\n static compare(oneParam, twoParam, optionsParam = undefined) {\n const one = ES.ToTemporalDuration(oneParam);\n const two = ES.ToTemporalDuration(twoParam);\n const options = ES.GetOptionsObject(optionsParam);\n const relativeTo = ES.ToRelativeTemporalObject(options);\n const y1 = GetSlot(one, YEARS);\n const mon1 = GetSlot(one, MONTHS);\n const w1 = GetSlot(one, WEEKS);\n let d1 = GetSlot(one, DAYS);\n const h1 = GetSlot(one, HOURS);\n const min1 = GetSlot(one, MINUTES);\n const s1 = GetSlot(one, SECONDS);\n const ms1 = GetSlot(one, MILLISECONDS);\n const µs1 = GetSlot(one, MICROSECONDS);\n let ns1 = GetSlot(one, NANOSECONDS);\n const y2 = GetSlot(two, YEARS);\n const mon2 = GetSlot(two, MONTHS);\n const w2 = GetSlot(two, WEEKS);\n let d2 = GetSlot(two, DAYS);\n const h2 = GetSlot(two, HOURS);\n const min2 = GetSlot(two, MINUTES);\n const s2 = GetSlot(two, SECONDS);\n const ms2 = GetSlot(two, MILLISECONDS);\n const µs2 = GetSlot(two, MICROSECONDS);\n let ns2 = GetSlot(two, NANOSECONDS);\n const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n }\n const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n//# sourceMappingURL=duration.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainMonthDay {\n constructor(isoMonthParam, isoDayParam, calendarParam = ES.GetISO8601Calendar(), referenceISOYearParam = 1972) {\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const isoDay = ES.ToIntegerThrowOnInfinity(isoDayParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISOYear = ES.ToIntegerThrowOnInfinity(referenceISOYearParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalMonthDaySlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoMonth and isoDay are required');\n }\n ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n }\n get monthCode() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get day() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n with(temporalMonthDayLike, optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalMonthDayLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalMonthDayLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid month-day-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarMonthDayFromFields(calendar, fields, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalMonthDay(otherParam);\n for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalMonthDayToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalMonthDayToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['year']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalMonthDay(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalMonthDay(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalMonthDay(GetSlot(item, ISO_MONTH), GetSlot(item, ISO_DAY), GetSlot(item, CALENDAR), GetSlot(item, ISO_YEAR));\n }\n return ES.ToTemporalMonthDay(item, options);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n//# sourceMappingURL=plainmonthday.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nconst instant = () => {\n const Instant = GetIntrinsic('%Temporal.Instant%');\n return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.GetISO8601Calendar();\n const inst = instant();\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst zonedDateTime = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n const tZ = ES.ToTemporalTimeZone(temporalTimeZoneLike);\n const calendar = ES.ToTemporalCalendar(calendarLike);\n return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return zonedDateTime(ES.GetISO8601Calendar(), temporalTimeZoneLike);\n};\nconst plainDate = (calendarLike, temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO = (temporalTimeZoneLike = timeZone()) => {\n return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZone = () => {\n return ES.SystemTimeZone();\n};\nexport const Now = {\n instant,\n plainDateTime,\n plainDateTimeISO,\n plainDate,\n plainDateISO,\n plainTimeISO,\n timeZone,\n zonedDateTime,\n zonedDateTimeISO,\n [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n value: 'Temporal.Now',\n writable: false,\n enumerable: false,\n configurable: true\n});\n//# sourceMappingURL=now.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CALENDAR, EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectAssign = Object.assign;\nfunction TemporalTimeToString(time, precision, options = undefined) {\n let hour = GetSlot(time, ISO_HOUR);\n let minute = GetSlot(time, ISO_MINUTE);\n let second = GetSlot(time, ISO_SECOND);\n let millisecond = GetSlot(time, ISO_MILLISECOND);\n let microsecond = GetSlot(time, ISO_MICROSECOND);\n let nanosecond = GetSlot(time, ISO_NANOSECOND);\n if (options) {\n const { unit, increment, roundingMode } = options;\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, increment, unit, roundingMode));\n }\n const hourString = ES.ISODateTimePartString(hour);\n const minuteString = ES.ISODateTimePartString(minute);\n const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n return `${hourString}:${minuteString}${seconds}`;\n}\nexport class PlainTime {\n constructor(isoHourParam = 0, isoMinuteParam = 0, isoSecondParam = 0, isoMillisecondParam = 0, isoMicrosecondParam = 0, isoNanosecondParam = 0) {\n const isoHour = ES.ToIntegerThrowOnInfinity(isoHourParam);\n const isoMinute = ES.ToIntegerThrowOnInfinity(isoMinuteParam);\n const isoSecond = ES.ToIntegerThrowOnInfinity(isoSecondParam);\n const isoMillisecond = ES.ToIntegerThrowOnInfinity(isoMillisecondParam);\n const isoMicrosecond = ES.ToIntegerThrowOnInfinity(isoMicrosecondParam);\n const isoNanosecond = ES.ToIntegerThrowOnInfinity(isoNanosecondParam);\n ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n CreateSlots(this);\n SetSlot(this, ISO_HOUR, isoHour);\n SetSlot(this, ISO_MINUTE, isoMinute);\n SetSlot(this, ISO_SECOND, isoSecond);\n SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n SetSlot(this, CALENDAR, ES.GetISO8601Calendar());\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get calendar() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n // PlainTime's calendar isn't settable, so can't be a userland calendar\n return GetSlot(this, CALENDAR);\n }\n get hour() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, ISO_NANOSECOND);\n }\n with(temporalTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalTimeLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalTimeLike);\n const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n const fields = ES.ToTemporalTimeRecord(this);\n let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(hour, minute, second, millisecond, microsecond, nanosecond, overflow));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n add(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n }\n subtract(temporalDurationLike) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const MAX_INCREMENTS = {\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, MAX_INCREMENTS[smallestUnit], false);\n let hour = GetSlot(this, ISO_HOUR);\n let minute = GetSlot(this, ISO_MINUTE);\n let second = GetSlot(this, ISO_SECOND);\n let millisecond = GetSlot(this, ISO_MILLISECOND);\n let microsecond = GetSlot(this, ISO_MICROSECOND);\n let nanosecond = GetSlot(this, ISO_NANOSECOND);\n ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode));\n return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n }\n equals(otherParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalTime(otherParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return true;\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n }\n toJSON() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return TemporalTimeToString(this, 'auto');\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n }\n toPlainDateTime(temporalDateParam) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n return ES.CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n }\n toZonedDateTime(item) {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item)) {\n throw new TypeError('invalid argument');\n }\n const dateLike = item.plainDate;\n if (dateLike === undefined) {\n throw new TypeError('missing date property');\n }\n const temporalDate = ES.ToTemporalDate(dateLike);\n const timeZoneLike = item.timeZone;\n if (timeZoneLike === undefined) {\n throw new TypeError('missing timeZone property');\n }\n const timeZone = ES.ToTemporalTimeZone(timeZoneLike);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n const calendar = GetSlot(temporalDate, CALENDAR);\n const hour = GetSlot(this, ISO_HOUR);\n const minute = GetSlot(this, ISO_MINUTE);\n const second = GetSlot(this, ISO_SECOND);\n const millisecond = GetSlot(this, ISO_MILLISECOND);\n const microsecond = GetSlot(this, ISO_MICROSECOND);\n const nanosecond = GetSlot(this, ISO_NANOSECOND);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n getISOFields() {\n if (!ES.IsTemporalTime(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoHour: GetSlot(this, ISO_HOUR),\n isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n isoMinute: GetSlot(this, ISO_MINUTE),\n isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n isoSecond: GetSlot(this, ISO_SECOND)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n const overflow = ES.ToTemporalOverflow(options);\n if (ES.IsTemporalTime(item)) {\n return new PlainTime(GetSlot(item, ISO_HOUR), GetSlot(item, ISO_MINUTE), GetSlot(item, ISO_SECOND), GetSlot(item, ISO_MILLISECOND), GetSlot(item, ISO_MICROSECOND), GetSlot(item, ISO_NANOSECOND));\n }\n return ES.ToTemporalTime(item, overflow);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalTime(oneParam);\n const two = ES.ToTemporalTime(twoParam);\n for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n const val1 = GetSlot(one, slot);\n const val2 = GetSlot(two, slot);\n if (val1 !== val2)\n return ES.ComparisonResult(val1 - val2);\n }\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n//# sourceMappingURL=plaintime.js.map","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { TIMEZONE_ID, EPOCHNANOSECONDS, ISO_YEAR, ISO_MONTH, ISO_DAY, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND, CreateSlots, GetSlot, SetSlot } from './slots';\nimport JSBI from 'jsbi';\nexport class TimeZone {\n constructor(timeZoneIdentifierParam) {\n // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n // This check exists only to improve the error message.\n if (arguments.length < 1) {\n throw new RangeError('missing argument: identifier is required');\n }\n const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n CreateSlots(this);\n SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n if (DEBUG) {\n Object.defineProperty(this, '_repr_', {\n value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n writable: false,\n enumerable: false,\n configurable: false\n });\n }\n }\n get id() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n getOffsetNanosecondsFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n return ES.ParseTimeZoneOffsetString(id);\n }\n return ES.GetIANATimeZoneOffsetNanoseconds(GetSlot(instant, EPOCHNANOSECONDS), id);\n }\n getOffsetStringFor(instantParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const instant = ES.ToTemporalInstant(instantParam);\n return ES.BuiltinTimeZoneGetOffsetStringFor(this, instant);\n }\n getPlainDateTimeFor(instantParam, calendarParam = ES.GetISO8601Calendar()) {\n const instant = ES.ToTemporalInstant(instantParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(this, instant, calendar);\n }\n getInstantFor(dateTimeParam, optionsParam = undefined) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n return ES.BuiltinTimeZoneGetInstantFor(this, dateTime, disambiguation);\n }\n getPossibleInstantsFor(dateTimeParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n const id = GetSlot(this, TIMEZONE_ID);\n if (ES.TestTimeZoneOffsetString(id)) {\n const epochNs = ES.GetEpochFromISOParts(GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n if (epochNs === null)\n throw new RangeError('DateTime outside of supported range');\n const offsetNs = ES.ParseTimeZoneOffsetString(id);\n return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n }\n const possibleEpochNs = ES.GetIANATimeZoneEpochValue(id, GetSlot(dateTime, ISO_YEAR), GetSlot(dateTime, ISO_MONTH), GetSlot(dateTime, ISO_DAY), GetSlot(dateTime, ISO_HOUR), GetSlot(dateTime, ISO_MINUTE), GetSlot(dateTime, ISO_SECOND), GetSlot(dateTime, ISO_MILLISECOND), GetSlot(dateTime, ISO_MICROSECOND), GetSlot(dateTime, ISO_NANOSECOND));\n return possibleEpochNs.map((ns) => new Instant(ns));\n }\n getNextTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZoneNextTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n getPreviousTransition(startingPointParam) {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n const startingPoint = ES.ToTemporalInstant(startingPointParam);\n const id = GetSlot(this, TIMEZONE_ID);\n // Offset time zones or UTC have no transitions\n if (ES.TestTimeZoneOffsetString(id) || id === 'UTC') {\n return null;\n }\n let epochNanoseconds = GetSlot(startingPoint, EPOCHNANOSECONDS);\n const Instant = GetIntrinsic('%Temporal.Instant%');\n epochNanoseconds = ES.GetIANATimeZonePreviousTransition(epochNanoseconds, id);\n return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n }\n toString() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(GetSlot(this, TIMEZONE_ID));\n }\n toJSON() {\n if (!ES.IsTemporalTimeZone(this))\n throw new TypeError('invalid receiver');\n return ES.ToString(this);\n }\n static from(item) {\n return ES.ToTemporalTimeZone(item);\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\n//# sourceMappingURL=timezone.js.map","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nconst ObjectCreate = Object.create;\nexport class PlainYearMonth {\n constructor(isoYearParam, isoMonthParam, calendarParam = ES.GetISO8601Calendar(), referenceISODayParam = 1) {\n const isoYear = ES.ToIntegerThrowOnInfinity(isoYearParam);\n const isoMonth = ES.ToIntegerThrowOnInfinity(isoMonthParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n const referenceISODay = ES.ToIntegerThrowOnInfinity(referenceISODayParam);\n // Note: if the arguments are not passed,\n // ToIntegerThrowOnInfinity(undefined) will have returned 0, which will\n // be rejected by RejectISODate in CreateTemporalYearMonthSlots. This\n // check exists only to improve the error message.\n if (arguments.length < 2) {\n throw new RangeError('missing argument: isoYear and isoMonth are required');\n }\n ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n }\n get year() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n }\n get month() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n }\n get monthCode() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n }\n get calendar() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get era() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n }\n get eraYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n }\n get daysInMonth() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n }\n get daysInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n }\n get monthsInYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n }\n get inLeapYear() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n }\n with(temporalYearMonthLike, optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalYearMonthLike)) {\n throw new TypeError('invalid argument');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalYearMonthLike);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year']);\n const props = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n if (!props) {\n throw new TypeError('invalid year-month-like');\n }\n let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n const options = ES.GetOptionsObject(optionsParam);\n return ES.CalendarYearMonthFromFields(calendar, fields, options);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n }\n equals(otherParam) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalYearMonth(otherParam);\n for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n const val1 = GetSlot(this, slot);\n const val2 = GetSlot(other, slot);\n if (val1 !== val2)\n return false;\n }\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const showCalendar = ES.ToShowCalendarOption(options);\n return ES.TemporalYearMonthToString(this, showCalendar);\n }\n toJSON() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalYearMonthToString(this);\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n }\n toPlainDate(item) {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(item))\n throw new TypeError('argument should be an object');\n const calendar = GetSlot(this, CALENDAR);\n const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n const inputFieldNames = ES.CalendarFields(calendar, ['day']);\n const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n // TODO: Use MergeLists abstract operation.\n const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n const options = ObjectCreate(null);\n options.overflow = 'reject';\n return ES.CalendarDateFromFields(calendar, mergedFields, options);\n }\n getISOFields() {\n if (!ES.IsTemporalYearMonth(this))\n throw new TypeError('invalid receiver');\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(this, ISO_DAY),\n isoMonth: GetSlot(this, ISO_MONTH),\n isoYear: GetSlot(this, ISO_YEAR)\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalYearMonth(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n return ES.CreateTemporalYearMonth(GetSlot(item, ISO_YEAR), GetSlot(item, ISO_MONTH), GetSlot(item, CALENDAR), GetSlot(item, ISO_DAY));\n }\n return ES.ToTemporalYearMonth(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalYearMonth(oneParam);\n const two = ES.ToTemporalYearMonth(twoParam);\n return ES.CompareISODate(GetSlot(one, ISO_YEAR), GetSlot(one, ISO_MONTH), GetSlot(one, ISO_DAY), GetSlot(two, ISO_YEAR), GetSlot(two, ISO_MONTH), GetSlot(two, ISO_DAY));\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n//# sourceMappingURL=plainyearmonth.js.map","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport { CALENDAR, EPOCHNANOSECONDS, ISO_HOUR, INSTANT, ISO_DAY, ISO_MONTH, ISO_YEAR, ISO_MICROSECOND, ISO_MILLISECOND, ISO_MINUTE, ISO_NANOSECOND, ISO_SECOND, TIME_ZONE, GetSlot } from './slots';\nimport { DateTimeFormat } from './intl';\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO } from './ecmascript';\nexport class ZonedDateTime {\n constructor(epochNanosecondsParam, timeZoneParam, calendarParam = ES.GetISO8601Calendar()) {\n // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n // to improve the error message.\n // ToTemporalTimeZone(undefined) will end up calling TimeZone.from(\"undefined\"), which\n // could succeed.\n if (arguments.length < 1) {\n throw new TypeError('missing argument: epochNanoseconds is required');\n }\n const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n const calendar = ES.ToTemporalCalendar(calendarParam);\n ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n }\n get calendar() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, CALENDAR);\n }\n get timeZone() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(this, TIME_ZONE);\n }\n get year() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get month() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthCode() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n }\n get day() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hour() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_HOUR);\n }\n get minute() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MINUTE);\n }\n get second() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_SECOND);\n }\n get millisecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MILLISECOND);\n }\n get microsecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_MICROSECOND);\n }\n get nanosecond() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return GetSlot(dateTime(this), ISO_NANOSECOND);\n }\n get era() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n }\n get eraYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get epochSeconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, BILLION));\n }\n get epochMilliseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.divide(value, MILLION));\n }\n get epochMicroseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const value = GetSlot(this, EPOCHNANOSECONDS);\n return ES.ToBigIntExternal(JSBI.divide(value, THOUSAND));\n }\n get epochNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n }\n get dayOfWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get dayOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get weekOfYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get hoursInDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const year = GetSlot(dt, ISO_YEAR);\n const month = GetSlot(dt, ISO_MONTH);\n const day = GetSlot(dt, ISO_DAY);\n const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n const timeZone = GetSlot(this, TIME_ZONE);\n const todayNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n const tomorrowNs = GetSlot(ES.BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n return JSBI.toNumber(JSBI.subtract(tomorrowNs, todayNs)) / 3.6e12;\n }\n get daysInWeek() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n }\n get daysInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get monthsInYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get inLeapYear() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n }\n get offset() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.BuiltinTimeZoneGetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n get offsetNanoseconds() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n }\n with(temporalZonedDateTimeLike, optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (!ES.IsObject(temporalZonedDateTimeLike)) {\n throw new TypeError('invalid zoned-date-time-like');\n }\n ES.RejectObjectWithCalendarOrTimeZone(temporalZonedDateTimeLike);\n // TODO: Reorder according to spec.\n const options = ES.GetOptionsObject(optionsParam);\n const disambiguation = ES.ToTemporalDisambiguation(options);\n const offset = ES.ToTemporalOffset(options, 'prefer');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, [\n 'day',\n 'hour',\n 'microsecond',\n 'millisecond',\n 'minute',\n 'month',\n 'monthCode',\n 'nanosecond',\n 'second',\n 'year'\n ]);\n const fieldsWithOffset = ES.ArrayPush(fieldNames, 'offset');\n const props = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldsWithOffset, 'partial');\n const fieldsWithTimeZoneAndOffset = ES.ArrayPush(fieldsWithOffset, 'timeZone');\n let fields = ES.PrepareTemporalFields(this, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n fields = ES.CalendarMergeFields(calendar, fields, props);\n fields = ES.PrepareTemporalFields(fields, fieldsWithTimeZoneAndOffset, ['timeZone', 'offset']);\n let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, disambiguation, offset, \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, GetSlot(this, TIME_ZONE), calendar);\n }\n withPlainDate(temporalDateParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const temporalDate = ES.ToTemporalDate(temporalDateParam);\n const year = GetSlot(temporalDate, ISO_YEAR);\n const month = GetSlot(temporalDate, ISO_MONTH);\n const day = GetSlot(temporalDate, ISO_DAY);\n let calendar = GetSlot(temporalDate, CALENDAR);\n const thisDt = dateTime(this);\n const hour = GetSlot(thisDt, ISO_HOUR);\n const minute = GetSlot(thisDt, ISO_MINUTE);\n const second = GetSlot(thisDt, ISO_SECOND);\n const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withPlainTime(temporalTimeParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n const thisDt = dateTime(this);\n const year = GetSlot(thisDt, ISO_YEAR);\n const month = GetSlot(thisDt, ISO_MONTH);\n const day = GetSlot(thisDt, ISO_DAY);\n const calendar = GetSlot(this, CALENDAR);\n const hour = GetSlot(temporalTime, ISO_HOUR);\n const minute = GetSlot(temporalTime, ISO_MINUTE);\n const second = GetSlot(temporalTime, ISO_SECOND);\n const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n const timeZone = GetSlot(this, TIME_ZONE);\n const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const dt = new PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dt, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n withTimeZone(timeZoneParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const timeZone = ES.ToTemporalTimeZone(timeZoneParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n }\n withCalendar(calendarParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = ES.ToTemporalCalendar(calendarParam);\n return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n }\n add(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n }\n subtract(temporalDurationLike, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n }\n until(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n }\n since(other, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n }\n round(optionsParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n if (optionsParam === undefined)\n throw new TypeError('options parameter is required');\n const options = typeof optionsParam === 'string'\n ? ES.CreateOnePropObject('smallestUnit', optionsParam)\n : ES.GetOptionsObject(optionsParam);\n const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'halfExpand');\n const maximumIncrements = {\n day: 1,\n hour: 24,\n minute: 60,\n second: 60,\n millisecond: 1000,\n microsecond: 1000,\n nanosecond: 1000\n };\n const roundingIncrement = ES.ToTemporalRoundingIncrement(options, maximumIncrements[smallestUnit], false);\n // first, round the underlying DateTime fields\n const dt = dateTime(this);\n let year = GetSlot(dt, ISO_YEAR);\n let month = GetSlot(dt, ISO_MONTH);\n let day = GetSlot(dt, ISO_DAY);\n let hour = GetSlot(dt, ISO_HOUR);\n let minute = GetSlot(dt, ISO_MINUTE);\n let second = GetSlot(dt, ISO_SECOND);\n let millisecond = GetSlot(dt, ISO_MILLISECOND);\n let microsecond = GetSlot(dt, ISO_MICROSECOND);\n let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const timeZone = GetSlot(this, TIME_ZONE);\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n const instantStart = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n if (JSBI.equal(dayLengthNs, ZERO)) {\n throw new RangeError('cannot round a ZonedDateTime in a calendar with zero-length days');\n }\n ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, roundingIncrement, smallestUnit, roundingMode, \n // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n // (which can hold up to 104 days in nanoseconds)\n JSBI.toNumber(dayLengthNs)));\n // Now reset all DateTime fields but leave the TimeZone. The offset will\n // also be retained if the new date/time values are still OK with the old\n // offset. Otherwise the offset will be changed to be compatible with the\n // new date/time values. If DST disambiguation is required, the `compatible`\n // disambiguation algorithm will be used.\n const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n const epochNanoseconds = ES.InterpretISODateTimeOffset(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, 'option', offsetNs, timeZone, 'compatible', 'prefer', \n /* matchMinute = */ false);\n return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n }\n equals(otherParam) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const other = ES.ToTemporalZonedDateTime(otherParam);\n const one = GetSlot(this, EPOCHNANOSECONDS);\n const two = GetSlot(other, EPOCHNANOSECONDS);\n if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two)))\n return false;\n if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE)))\n return false;\n return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n }\n toString(optionsParam = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const options = ES.GetOptionsObject(optionsParam);\n const { precision, unit, increment } = ES.ToSecondsStringPrecision(options);\n const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n const showCalendar = ES.ToShowCalendarOption(options);\n const showTimeZone = ES.ToShowTimeZoneNameOption(options);\n const showOffset = ES.ToShowOffsetOption(options);\n return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n unit,\n increment,\n roundingMode\n });\n }\n toLocaleString(locales = undefined, options = undefined) {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return new DateTimeFormat(locales, options).format(this);\n }\n toJSON() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalZonedDateTimeToString(this, 'auto');\n }\n valueOf() {\n throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n }\n startOfDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n const calendar = GetSlot(this, CALENDAR);\n const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0, calendar);\n const timeZone = GetSlot(this, TIME_ZONE);\n const instant = ES.BuiltinTimeZoneGetInstantFor(timeZone, dtStart, 'compatible');\n return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n }\n toInstant() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n }\n toPlainDate() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToDate(dateTime(this));\n }\n toPlainTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return ES.TemporalDateTimeToTime(dateTime(this));\n }\n toPlainDateTime() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n return dateTime(this);\n }\n toPlainYearMonth() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarYearMonthFromFields(calendar, fields);\n }\n toPlainMonthDay() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const calendar = GetSlot(this, CALENDAR);\n const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode']);\n const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n return ES.CalendarMonthDayFromFields(calendar, fields);\n }\n getISOFields() {\n if (!ES.IsTemporalZonedDateTime(this))\n throw new TypeError('invalid receiver');\n const dt = dateTime(this);\n const tz = GetSlot(this, TIME_ZONE);\n return {\n calendar: GetSlot(this, CALENDAR),\n isoDay: GetSlot(dt, ISO_DAY),\n isoHour: GetSlot(dt, ISO_HOUR),\n isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n isoMinute: GetSlot(dt, ISO_MINUTE),\n isoMonth: GetSlot(dt, ISO_MONTH),\n isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n isoSecond: GetSlot(dt, ISO_SECOND),\n isoYear: GetSlot(dt, ISO_YEAR),\n offset: ES.BuiltinTimeZoneGetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n timeZone: tz\n };\n }\n static from(item, optionsParam = undefined) {\n const options = ES.GetOptionsObject(optionsParam);\n if (ES.IsTemporalZonedDateTime(item)) {\n ES.ToTemporalOverflow(options); // validate and ignore\n ES.ToTemporalDisambiguation(options);\n ES.ToTemporalOffset(options, 'reject');\n return ES.CreateTemporalZonedDateTime(GetSlot(item, EPOCHNANOSECONDS), GetSlot(item, TIME_ZONE), GetSlot(item, CALENDAR));\n }\n return ES.ToTemporalZonedDateTime(item, options);\n }\n static compare(oneParam, twoParam) {\n const one = ES.ToTemporalZonedDateTime(oneParam);\n const two = ES.ToTemporalZonedDateTime(twoParam);\n const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return -1;\n if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2)))\n return 1;\n return 0;\n }\n}\nSymbol.toStringTag;\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\nfunction dateTime(zdt) {\n return ES.BuiltinTimeZoneGetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n//# sourceMappingURL=zoneddatetime.js.map","import { Instant } from './instant';\nimport JSBI from 'jsbi';\nimport * as ES from './ecmascript';\nimport { MILLION } from './ecmascript';\nexport function toTemporalInstant() {\n // Observable access to valueOf is not correct here, but unavoidable\n const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n return new Instant(ES.ToBigInt(epochNanoseconds));\n}\n//# sourceMappingURL=legacydate.js.map","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n Temporal.Instant,\n Temporal.Calendar,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.Duration,\n Temporal.PlainMonthDay,\n // Temporal.Now, // plain object (not a constructor), so no `prototype`\n Temporal.PlainTime,\n Temporal.TimeZone,\n Temporal.PlainYearMonth,\n Temporal.ZonedDateTime\n];\nfor (const type of types) {\n const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype');\n if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n descriptor.configurable = false;\n descriptor.enumerable = false;\n descriptor.writable = false;\n Object.defineProperty(type, 'prototype', descriptor);\n }\n}\nexport { Temporal, Intl, toTemporalInstant };\n//# sourceMappingURL=index.js.map"],"names":["constructor","sign","Object","JSBI","length","BigInt","toDebugString","result","digit","toString","radix","valueOf","toNumber","__copy","i","__trim","newLength","last","__initializeDigits","__decideRounding","__clzmsd","__absoluteAdd","__inplaceMultiplyAdd","mLow","mHigh","multiplier","carry","high","d","dLow","dHigh","pLow","pMid1","pMid2","pHigh","__absoluteDivSmall","__inplaceAdd","sum","startIndex","summand","__inplaceSub","borrow","current","r0","halfDigits","sub","subtrahend","r15","__inplaceRightShift","shift","__specialLeftShift","__digit","__unsignedDigit","__setDigit","__setDigitGrow","__halfDigitLength","len","__halfDigit","__setHalfDigit","digitIndex","previous","updated","value","__digitPow","Math","Number","arg","primitive","xLength","x","xMsd","msdLeadingZeros","xBitLength","exponent","currentDigit","mantissaHigh","mantissaHighBitsUnset","mantissaLow","mantissaLowBitsUnset","rounding","signBit","unaryMinus","bitwiseNot","exponentiate","y","expValue","neededDigits","msd","runningSquare","multiply","resultLength","divide","resultSign","divisor","quotient","remainder","remainderDigit","add","subtract","leftShift","signedRightShift","unsignedRightShift","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","equal","notEqual","bitwiseAnd","y1","bitwiseXor","bitwiseOr","asIntN","n","neededLength","topDigit","compareDigit","asUintN","bitsInTopDigit","ADD","LT","LE","GT","GE","EQ","NE","__zero","__oneDigit","topUnconsumedBit","mask","__fromDouble","rawExponent","digits","kMantissaHighTopBit","msdTopBit","remainingMantissaBits","__isWhitespace","c","__fromString","string","cursor","chars","bitsPerChar","roundup","bitsMin","limDigit","limAlpha","parts","partsBits","done","part","bits","charsSoFar","m","digitsSoFar","__fillFromParts","bitsInDigit","partBits","__toStringBasePowerOfTwo","charMask","charsRequired","Array","pos","availableBits","newDigit","consumedBits","__toStringGeneric","bitLength","maxBitsPerChar","minBitsPerChar","secondHalfChars","conqueror","input","secondHalf","divisionResult","firstHalf","__unequalSign","leftNegative","__absoluteGreater","bothNegative","__absoluteLess","__compareToBigInt","xSign","__compareToNumber","ySign","yAbs","xDigit","__compareToDouble","yBitLength","compareMantissa","__equalToNumber","__comparisonResultToBool","__compare","r","__absoluteSub","__absoluteAddOne","inputLength","__absoluteSubOne","__absoluteAnd","yLength","numPairs","tmp","tmpLength","__absoluteAndNot","__absoluteOr","__absoluteXor","__absoluteCompare","diff","__multiplyAccumulate","m2Low","m2High","multiplicand","accumulatorIndex","acc","accumulator","m1","m1Low","m1High","rLow","rMid1","rMid2","rHigh","__internalMultiplyAdd","source","rx","ry","upperHalf","lowerHalf","__absoluteModSmall","__absoluteDivLarge","n2","dividend","q","wantQuotient","qhatv","u","vn1","halfDigitBuffer","j","qhat","ujn","rhat","vn2","ujn2","__clz15","addDigit","__leftShiftByAbsolute","digitShift","bitsShift","grow","__rightShiftByAbsolute","mustRoundDown","__rightShiftByMaximum","__toShiftAmount","__toPrimitive","hint","obj","Symbol","exoticToPrim","__toNumeric","__isBigInt","__truncateToNBits","drop","__truncateAndSubFromPowerOfTwo","limit","msdBitsConsumed","resultMsd","minuendMsd","base","__isOneDigitInt","__kBitsPerCharTableShift","a","b","ArrayIncludes","ArrayPrototypePush","IntlDateTimeFormat","MathAbs","MathFloor","ObjectAssign","ObjectCreate","ReflectApply","PARSE.zoneddatetime","PARSE.time","PARSE.yearmonth","PARSE.monthday","PARSE.duration","PARSE.offset","descriptor","ES.ToTemporalTimeZone","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","ES.BuiltinTimeZoneGetInstantFor","ES.ToString","ES.ToBigInt","ES.ValidateEpochNanoseconds","ES.TemporalInstantToString","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","ES.DifferenceTemporalInstant","ES.CreateOnePropObject","ES.GetOptionsObject","ES.GetTemporalUnit","ES.REQUIRED","ES.ToTemporalRoundingMode","ES.ToTemporalRoundingIncrement","ES.RoundInstant","ES.ToTemporalInstant","ES.ToSecondsStringPrecision","ES.IsObject","ES.ToTemporalCalendar","ES.CreateTemporalZonedDateTime","ES.GetISO8601Calendar","ES.ToNumber","ES.IsBuiltinCalendar","ES.IsTemporalCalendar","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","ES.CreateTemporalMonthDay","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","ES.RejectToRange","ES.ConstrainToRange","ES.ISOYearString","ES.ISODateTimePartString","ES.ComparisonResult","ES.CompareISODate","ES.ToIntegerThrowOnInfinity","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","ES.RejectObjectWithCalendarOrTimeZone","ES.CalendarFields","ES.CalendarMergeFields","ES.CalendarDateFromFields","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","ES.CalendarEquals","ES.ToShowCalendarOption","ES.TemporalDateToString","ES.CreateTemporalDateTime","ES.ToTemporalTime","ES.CalendarYearMonthFromFields","ES.CalendarMonthDayFromFields","ES.CreateTemporalDateTimeSlots","ES.InterpretTemporalDateTimeFields","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","ES.TemporalDateTimeToDate","ES.TemporalDateTimeToTime","ES.ToIntegerWithoutRounding","ES.RejectDuration","ES.TemporalDurationToString","ES.IsTemporalDuration","ES.DurationSign","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","ES.LargerOfTwoTemporalUnits","ES.ToTemporalDateTimeRoundingIncrement","ES.ToRelativeTemporalObject","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.CalculateOffsetShift","ES.TotalDurationNanoseconds","ES.CreateTemporalMonthDaySlots","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","ES.SystemUTCEpochNanoSeconds","ES.BuiltinTimeZoneGetPlainDateTimeFor","ES.SystemTimeZone","ES.RoundTime","ES.FormatSecondsStringPart","ES.RejectTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","ES.GetCanonicalTimeZoneIdentifier","ES.IsTemporalTimeZone","ES.TestTimeZoneOffsetString","ES.ParseTimeZoneOffsetString","ES.GetIANATimeZoneOffsetNanoseconds","ES.BuiltinTimeZoneGetOffsetStringFor","ES.GetEpochFromISOParts","ES.GetIANATimeZoneEpochValue","ES.GetIANATimeZoneNextTransition","ES.GetIANATimeZonePreviousTransition","ES.CreateTemporalYearMonthSlots","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ES.CreateTemporalZonedDateTimeSlots","ES.GetOffsetNanosecondsFor","ES.ToTemporalOffset","ES.ArrayPush","ES.InterpretISODateTimeOffset","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.ToShowTimeZoneNameOption","ES.ToShowOffsetOption","ES.TemporalZonedDateTimeToString","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.PlainTime","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYA;;;;;EACIA,gBAAW,CAAXA,EAAW,CAAXA,EAA0B;EAAA;;EAAA;;EAMtB,QALA,0BAAA,CAAA,GACA,MAAA,IAAA,GAAYC,CADZ,EAIAC,MAAM,CAANA,cAAAA,gCAA4BC,IAAI,CAAhCD,SAAAA,CAJA,EAKIE,CAAM,GAAGD,IAAI,CAAjB,YAAA,EACI,MAAM,IAAA,UAAA,CAAA,8BAAA,CAAN;EAPkB;EAUnBE;;;;aAqCPC,yBAAgB;EACZ,UAAMC,CAAM,GAAG,CAAf,SAAe,CAAf;;EADY,iDAEZ,IAFY;EAAA;;EAAA;EAEZ;EAAA,cAAA,CAAA;EACIA,UAAAA,CAAM,CAANA,IAAAA,CAAY,CAACC,CAAK,GAAG,CAACA,CAAK,KAAN,CAAA,EAAA,QAAA,CAAH,EAAG,CAAH,GAAN,CAAA,IAAZD,IAAAA;EADJ;EAFY;EAAA;EAAA;EAAA;EAAA;;EAKZA,aAAAA,CAAM,CAANA,IAAAA,CAAAA,GAAAA,GACOA,CAAM,CAANA,IAAAA,CAAAA,EAAAA,CADPA;EAGJE;;;aAAAA,oBAAqB;EAAA,UAAZC,CAAY,uEAAb,EAAa;EACjB,UAAI,IAAA,CAAA,IAAa,KAAjB,CAAA,EACI,MAAM,IAAA,UAAA,CAAN,oDAAM,CAAN;EAFa,aAIb,MAAA,KAJa,MAIb,GAJa,GAIb,GAEA,MAACA,CAAK,GAAIA,CAAK,GANF,CAMb,IACOP,IAAI,CAAJA,wBAAAA,CAAAA,IAAAA,EAPM,CAONA,CADP,GAGGA,IAAI,CAAJA,iBAAAA,CAAAA,IAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CATU;EAWrBQ;;;aAAAA,mBAAU;EACN,YAAM,IAAA,KAAA,CAAA,4DAAA,CAAN;EAIGC;;;aA0ePC,kBAAS;EACL,UAAMN,CAAM,GAAG,IAAA,IAAA,CAAS,KAAT,MAAA,EAAsB,KAArC,IAAe,CAAf;;EACA,WAAK,IAAIO,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAG,KAApB,MAAA,EAAiCA,CAAjC,EAAA;EACIP,QAAAA,CAAM,CAANA,CAAM,CAANA,GAAY,KAAZA,CAAY,CAAZA;EADJ;;EAGA,aAAOA,CAAP;EAEJQ;;;aAAAA,kBAAS;EAAA,UACDC,CAAS,GAAG,KADX,MAAA;EAAA,UAEDC,CAAI,GAAG,KAAKD,CAAS,GAFpB,CAEM,CAFN;;EAAA,aAGE,MAHF,CAAA;EAIDA,QAAAA,CAJC,IAKDC,CAAI,GAAG,KAAKD,CAAS,GALpB,CAKM,CALN,EAMD,KANC,GAMD,EAFAA;EAJC;;EAQa,aAAd,MAAA,CAAA,KACA,KAAA,IAAA,GAAA,CAAA,CADA,GAEG,IAFW;EAItBE;;;aAAAA,8BAAqB;EACjB,WAAK,IAAIJ,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAG,KAApB,MAAA,EAAiCA,CAAjC,EAAA;EACI,aAAA,CAAA,IAAU,CAAV;EADJ;EAIGK;;;aA6mBPC,oBAAW;EACP,aAAOjB,IAAI,CAAJA,OAAAA,CAAa,KAAA,OAAA,CAAa,KAAA,MAAA,GAA1BA,CAAa,CAAbA,CAAP;EAEGkB;;;aA8QPC,8BAAoB,CAApBA,EAAoB,CAApBA,EAAoB,CAApBA,EAAkD;EAC1ClB,MAAAA,CAAM,GAAG,KADiC,MAC1CA,KACAA,CAAM,GAAG,KAFiC,MAC1CA;EAD0C,UAGxCmB,CAAI,GAAG,QAHiC,CAAA;EAAA,UAIxCC,CAAK,GAAGC,CAAU,KAJsB,EAAA;EAAA,UAK1CC,CAAK,GALqC,CAAA;EAAA,UAM1CC,CAAI,GANsC,CAAA;;EAO9C,WAAK,IAAIb,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAA4BA,CAA5B,EAAA,EAAiC;EAAA,YACvBc,EAAC,GAAG,KAAA,OAAA,CADmB,CACnB,CADmB;EAAA,YAEvBC,EAAI,GAAG,QAFgB,EAAA;EAAA,YAGvBC,EAAK,GAAGF,EAAC,KAHc,EAAA;EAAA,YAIvBG,CAAI,GAAG5B,IAAI,CAAJA,MAAAA,CAAAA,EAAAA,EAJgB,CAIhBA,CAJgB;EAAA,YAKvB6B,CAAK,GAAG7B,IAAI,CAAJA,MAAAA,CAAAA,EAAAA,EALe,CAKfA,CALe;EAAA,YAMvB8B,CAAK,GAAG9B,IAAI,CAAJA,MAAAA,CAAAA,EAAAA,EANe,CAMfA,CANe;EAAA,YAOvB+B,CAAK,GAAG/B,IAAI,CAAJA,MAAAA,CAAAA,EAAAA,EAPe,CAOfA,CAPe;;EAQ7B,YAAII,CAAM,GAAGoB,CAAI,GAAJA,CAAAA,GAAb,CAAA;EACAD,QAAAA,CAAK,GAAGnB,CAAM,KATe,EAS7BmB,EACAnB,CAAM,IAVuB,UAS7BmB,EAEAnB,CAAM,IAAI,CAAC,CAAC,QAAD,CAAA,KAAD,EAAA,KAA4B,CAAC,QAAD,CAAA,KAXT,EAWnB,CAFVmB,EAGAA,CAAK,IAAInB,CAAM,KAZc,EAS7BmB,EAIAC,CAAI,GAAGO,CAAK,IAAIF,CAAK,KAAdE,EAAK,CAALA,IAA0BD,CAAK,KAbT,EAatBC,CAJPR,EAKA,KAAA,UAAA,CAAA,CAAA,EAAmB,aAAnB,CAAA,CALAA;EAOJ;;EAAA,UAAI,KAAA,CAAA,IAAe,MAAnB,CAAA,EACI,MAAM,IAAA,KAAA,CAAA,oBAAA,CAAN;EAGDS;;;aA8FPC,sBAAY,CAAZA,EAAY,CAAZA,EAAY,CAAZA,EAA8C;EAC1C,UAAIV,CAAK,GAAT,CAAA;;EACA,WAAK,IAAIZ,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAAgCA,CAAhC,EAAA,EAAqC;EACjC,YAAMuB,CAAG,GAAG,KAAA,WAAA,CAAiBC,CAAU,GAA3B,CAAA,IACRC,CAAO,CAAPA,WAAAA,CADQ,CACRA,CADQ,GAAZ,CAAA;EAGAb,QAAAA,CAAK,GAAGW,CAAG,KAJsB,EAIjCX,EACA,KAAA,cAAA,CAAoBY,CAAU,GAA9B,CAAA,EAAoC,QAApC,CAAA,CADAZ;EAGJ;;EAAA,aAAOA,CAAP;EAEJc;;;aAAAA,sBAAY,CAAZA,EAAY,CAAZA,EAAY,CAAZA,EAAiD;EAE7C,UAAIC,CAAM,GAAV,CAAA;;EACA,UAAI,IAAJ,CAAA,EAAoB;EAGhBH,QAAAA,CAAU,KAHM,CAGhBA;;EAHgB,YAIZI,CAAO,GAAG,KAAA,OAAA,CAJE,CAIF,CAJE;EAAA,YAKZC,CAAE,GAAG,QALO,CAAA;EAAA,YAMZ7B,CAAC,GANW,CAAA;;EAOhB,eAAOA,CAAC,GATO8B,CAAU,GAAX,CAACA,KAAoB,CASnC,EAAsB9B,CAAtB,EAAA,EAA2B;EAAA,cACjB+B,GAAG,GAAGC,CAAU,CAAVA,OAAAA,CADW,CACXA,CADW;EAAA,cAEjBC,EAAG,GAAG,CAACL,CAAO,KAAR,EAAA,KAAoB,QAApB,GAAA,IAFW,CAAA;;EAGvBD,UAAAA,CAAM,GAAG,IAACM,EAAG,KAHU,EAGvBN,EACA,KAAA,UAAA,CAAgBH,CAAU,GAA1B,CAAA,EAAiC,CAAC,QAAD,EAAA,KAAD,EAAC,GAAyB,QAJnC,CAIvB,CADAG,EAEAC,CAAO,GAAG,KAAA,OAAA,CAAaJ,CAAU,GAAVA,CAAAA,GALA,CAKb,CAFVG,EAGAE,CAAE,GAAG,CAAC,QAAD,CAAA,KAAsBE,GAAG,KAAzB,EAAA,IANkB,CAGvBJ,EAIAA,CAAM,GAAG,IAACE,CAAE,KAAK,EAJjBF;EAVY;;EAAA,YAiBVI,CAAG,GAAGC,CAAU,CAAVA,OAAAA,CAjBI,CAiBJA,CAjBI;EAAA,YAkBVC,CAAG,GAAG,CAACL,CAAO,KAAR,EAAA,KAAoB,QAApB,CAAA,IAlBI,CAAA;;EAmBhBD,QAAAA,CAAM,GAAG,IAACM,CAAG,KAnBG,EAmBhBN,EACA,KAAA,UAAA,CAAgBH,CAAU,GAA1B,CAAA,EAAiC,CAAC,QAAD,CAAA,KAAD,EAAC,GAAyB,QApB1C,CAoBhB,CADAG;EAGA,YAAIH,CAAU,GAAVA,CAAAA,GAAAA,CAAAA,IAAsB,KAA1B,MAAA,EACI,MAAM,IAAA,UAAA,CAAN,eAAM,CAAN;EAEA,cAAC,IAzBW,CAyBZ,MACAI,CAAO,GAAG,KAAA,OAAA,CAAaJ,CAAU,GAAVA,CAAAA,GA1BX,CA0BF,CAAVI,EACAC,CAAE,GAAG,CAAC,QAAD,CAAA,KANME,CAAG,KAAK,EAMd,IA3BO,CA0BZH,EAEAD,CAAM,GAAG,IAACE,CAAE,KA5BA,EA0BZD,EAGA,KAAA,UAAA,CAAgBJ,CAAU,GAAGQ,CAAU,CAAvC,MAAA,EAAiD,aAAD,CAAC,GAAyB,QA7B9D,CA6BZ,CAJA;EAzBR,OAAA,MAgCK;EACDR,QAAAA,CAAU,KADT,CACDA;EACA,YAAIxB,EAAC,GAAL,CAAA;;EACA,eAAOA,EAAC,GAAGgC,CAAU,CAAVA,MAAAA,GAAX,CAAA,EAAkChC,EAAlC,EAAA,EAAuC;EAAA,cAC7B4B,GAAO,GAAG,KAAA,OAAA,CAAaJ,CAAU,GADJ,EACnB,CADmB;EAAA,cAE7BO,GAAG,GAAGC,CAAU,CAAVA,OAAAA,CAFuB,EAEvBA,CAFuB;EAAA,cAG7BH,GAAE,GAAG,CAAC,QAAD,GAAA,KAAsB,QAAtB,GAAA,IAHwB,CAAA;;EAInCF,UAAAA,CAAM,GAAG,IAACE,GAAE,KAJuB,EAInCF;;EACA,cAAMM,GAAG,GAAG,CAACL,GAAO,KAAR,EAAA,KAAoBG,GAAG,KAAvB,EAAA,IAAZ,CAAA;;EACAJ,UAAAA,CAAM,GAAG,IAACM,GAAG,KANsB,EAMnCN,EACA,KAAA,UAAA,CAAgBH,CAAU,GAA1B,EAAA,EAAiC,CAAC,QAAD,GAAA,KAAD,EAAC,GAAyB,QAA1D,GAAA,CADAG;EATH;;EAAA,YAYKC,GAAO,GAAG,KAAA,OAAA,CAAaJ,CAAU,GAZtC,EAYe,CAZf;EAAA,YAaKO,EAAG,GAAGC,CAAU,CAAVA,OAAAA,CAbX,EAaWA,CAbX;EAAA,YAcKH,EAAE,GAAG,CAAC,QAAD,GAAA,KAAsB,QAAtB,EAAA,IAdV,CAAA;;EAeDF,QAAAA,CAAM,GAAG,IAACE,EAAE,KAfX,EAeDF;EACA,YAAIM,EAAG,GAAP,CAAA;EACI,cAAC,IAjBJ,CAiBG,MACAA,EAAG,GAAG,CAACL,GAAO,KAAR,EAAA,KAAoBG,EAAG,KAAvB,EAAA,IAlBT,CAkBGE,EACAN,CAAM,GAAG,IAACM,EAAG,KAnBhB,EAiBG,GAIJ,KAAA,UAAA,CAAgBT,CAAU,GAA1B,EAAA,EAAiC,CAAC,QAAD,EAAA,KAAD,EAAC,GAAyB,QAA1D,EAAA,CAJI;EAMR;;EAAA,aAAOG,CAAP;EAEJO;;;aAAAA,6BAAmB,CAAnBA,EAA2B;EACvB,UAAI,MAAJ,CAAA,EACI;;EACJ,UAAItB,CAAK,GAAG,KAAA,OAAA,CAAA,CAAA,MAAZ,CAAA;;EACA,UAAMT,CAAI,GAAG,KAAA,MAAA,GAAb,CAAA;;EACA,WAAK,IAAIH,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAA0BA,CAA1B,EAAA,EAA+B;EAC3B,YAAMc,CAAC,GAAG,KAAA,OAAA,CAAad,CAAC,GAAxB,CAAU,CAAV;;EACA,aAAA,UAAA,CAAA,CAAA,EAAoB,aAACc,CAAC,IAAK,KAAR,CAAC,GAFO,CAE3B,GACAF,CAAK,GAAGE,CAAC,KAAKqB,CADd;EAGJ;;EAAA,WAAA,UAAA,CAAA,CAAA,EAAA,CAAA;EAEGC;;;aA+NPC,iBAAO,CAAPA,EAAW;EACP,aAAO,KAAA,CAAA,CAAP;EAEJC;;;aAAAA,yBAAe,CAAfA,EAAmB;EACf,aAAO,KAAA,CAAA,MAAY,CAAnB;EAEJC;;;aAAAA,oBAAU,CAAVA,EAAU,CAAVA,EAAqB;EACjB,WAAA,CAAA,IAAU,IAAA,CAAV;EAEJC;;;aAAAA,wBAAc,CAAdA,EAAc,CAAdA,EAAyB;EACrB,WAAA,CAAA,IAAU,IAAA,CAAV;EAEJC;;;aAAAA,6BAAoB;EAChB,UAAMC,CAAG,GAAG,KAAZ,MAAA;EADgB,aAEZ,SAAA,KAAA,eAAA,CAAqBA,CAAG,GAFZ,CAEZ,CAAA,GACO,IAAA,CAAA,GAHK,CAEZ,GAEG,IAAA,CAJS;EAMpBC;;;aAAAA,qBAAW,CAAXA,EAAe;EACX,aAAO,QAAC,KAAK3C,CAAC,KAAN,CAAA,MAAmB,MAAC,IAAD,CAAA,CAA3B;EAEJ4C;;;aAAAA,wBAAc,CAAdA,EAAc,CAAdA,EAAyB;EAAA,UACfC,CAAU,GAAG7C,CAAC,KADC,CAAA;EAAA,UAEf8C,CAAQ,GAAG,KAAA,OAAA,CAFI,CAEJ,CAFI;EAAA,UAGfC,CAAO,GAAI,IAAD,CAAC,GAAU,QAAD,CAAC,GAAsBC,CAAK,IAAtC,EAAC,GACV,aAAD,CAAC,GAA0B,QAJZ,CAAA;;EAKrB,WAAA,UAAA,CAAA,CAAA,EAAA,CAAA;EAEGC;;;aAp4DA1D,gBAAM,CAANA,EAAY;EAAA,UAAA,CAAA,GAUkB2D,IAAI,CAVtB,KAAA;EAAA,UAAA,CAAA,GAUNC,MAAM,CAVA,QAAA;;EACf,UAAI,YAAA,OAAJ,CAAA,EAA6B;EACzB,YAAI,MAAJ,CAAA,EACI,OAAO9D,IAAI,CAAX,MAAOA,EAAP;EACJ,YAAIA,IAAI,CAAJA,eAAAA,CAAJ,CAAIA,CAAJ,EAAA,OACQ,IADR,CACQ,GACOA,IAAI,CAAJA,UAAAA,CAAgB,CAAhBA,CAAAA,EAAAA,CAFf,CAEeA,CADP,GAGGA,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,EAAAA,CAJX,CAIWA,CAJX;EAMA,YAAI,CAAC8D,CAAAA,CAAD,CAACA,CAAD,IAAyBD,CAAAA,CAAAA,CAAAA,CAAAA,KAA7B,CAAA,EACI,MAAM,IAAA,UAAA,CAAe,gBAAA,CAAA,GAArB,6DAAM,CAAN;EAGJ,eAAO7D,IAAI,CAAJA,YAAAA,CAAAA,CAAAA,CAAP;EAEC;;EAAA,UAAI,YAAA,OAAJ,CAAA,EAA6B;EAC9B,YAAMI,EAAM,GAAGJ,IAAI,CAAJA,YAAAA,CAAf,CAAeA,CAAf;;EACA,YAAI,SAAJ,EAAA,EACI,MAAM,IAAA,WAAA,CAAgB,oBAAA,CAAA,GAAtB,cAAM,CAAN;EAEJ,eAAOI,EAAP;EAEC;;EAAA,UAAI,aAAA,OAAJ,CAAA,EAAA,OACG,CAAA,CAAA,KADH,CACG,GACOJ,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,EAAAA,CAFV,CAEUA,CADP,GAGGA,IAAI,CAJV,MAIMA,EAJN;;EAMA,UAAI,oBAAJ,CAAI,CAAJ,EAA6B;EAC9B,YAAI+D,CAAG,CAAHA,WAAAA,KAAJ,IAAA,EACI,OAAA,CAAA;;EACJ,YAAMC,EAAS,GAAGhE,IAAI,CAAJA,aAAAA,CAAlB,CAAkBA,CAAlB;;EACA,eAAOA,IAAI,CAAJA,MAAAA,CAAAA,EAAAA,CAAP;EAEJ;;EAAA,YAAM,IAAA,SAAA,CAAc,oBAAA,CAAA,GAAd,cAAA,CAAN;EAEJG;;;aAwBOM,kBAAQ,CAARA,EAAY;EACf,UAAMwD,CAAO,GAAGC,CAAC,CAAjB,MAAA;EACA,UAAI,MAAJ,CAAA,EACI,OAAA,CAAA;;EACJ,UAAI,MAAJ,CAAA,EAAmB;EACf,YAAMP,EAAK,GAAGO,CAAC,CAADA,eAAAA,CAAd,CAAcA,CAAd;;EACA,eAAOA,CAAC,CAADA,IAAAA,GAAS,CAATA,EAAAA,GAAkBP,EAAzB;EANW;;EAAA,UAQTQ,CAAI,GAAGD,CAAC,CAADA,OAAAA,CAAUD,CAAO,GARf,CAQFC,CARE;EAAA,UASTE,CAAe,GAAGpE,IAAI,CAAJA,OAAAA,CATT,CASSA,CATT;EAAA,UAUTqE,CAAU,GAAG,KAAA,CAAA,GAVJ,CAAA;;EAWf,UAAI,OAAJ,CAAA,EACI,OAAOH,CAAC,CAADA,IAAAA,GAAS,CAATA,QAAAA,GAAAA,IAAP,CAAA;EAZW,UAaXI,CAAQ,GAAGD,CAAU,GAbV,CAAA;EAAA,UAcXE,CAAY,GAdD,CAAA;EAAA,UAeXf,CAAU,GAAGS,CAAO,GAfT,CAAA;EAgBf,UAAMnB,CAAK,GAAGsB,CAAe,GAA7B,CAAA;EACA,UAAII,CAAY,GAAI,OAAD,CAAC,GAAD,CAAC,GAAoBD,CAAY,IAApD,CAAA;EACAC,MAAAA,CAAY,MAlBG,EAkBfA;EACA,UAAMC,CAAqB,GAAG3B,CAAK,GAAnC,EAAA;EAnBe,UAoBX4B,CAAW,GAAI,MAAD,CAAC,GAAD,CAAC,GAAoBH,CAAY,IAAK,KApBzC,CAAA;EAAA,UAqBXI,CAAoB,GAAG,KArBZ,CAAA;;EAAA,WAsBX,IAAA,CAAA,IAA6B,IAtBlB,CAsBX,KACAnB,CAvBW,IAwBXe,CAAY,GAAGL,CAAC,CAADA,OAAAA,CAxBJ,CAwBIA,CAxBJ,EAyBXM,CAAY,IAAKD,CAAY,KAAM,KAzBxB,CAAA,EA0BXG,CAAW,GAAGH,CAAY,IAAIE,CAAqB,GA1BxC,CAAA,EA2BXE,CAAoB,GAAGF,CAAqB,GA3BjC,CAsBX,CAtBW,EA6BR,IAAA,CAAA,IAA4B,IA7BpB,CAAA;EA8BXjB,QAAAA,CA9BW,IA+BXe,CAAY,GAAGL,CAAC,CAADA,OAAAA,CA/BJ,CA+BIA,CA/BJ,EAiCPQ,CAjCO,IAgCP,MAhCO,CAgCP,GACgBH,CAAY,IAAKI,CAAoB,GAjC9C,EAgCP,GAIgBJ,CAAY,KAAM,KApC3B,CAAA,EAsCXI,CAAoB,IAtCT,EA8BXnB;EA9BW;;EAwCf,UAAMoB,CAAQ,GAAG5E,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,EAAjB,CAAiBA,CAAjB;;EACA,UAAA,CAAI,MAAA,CAAA,IAAmB,MAAA,CAAA,IAAkB,MAAC,IAA1C,CAAyC,CAAzC,MACI0E,CAAW,GAAIA,CAAW,GAAZ,CAACA,KADnB,CACIA,EACI,MAFR,CAEQ,KAEAF,CAJR,IAKY,KAACA,CAAY,KALzB,EAKY,KAEAA,CAAY,GAPxB,CAOYA,EACAF,CARZ,EAOYE,EAEI,OAThB,CAKY,CAHJ,CAFR,CAAA,EAWgB,OAAON,CAAC,CAADA,IAAAA,GAAS,CAATA,QAAAA,GAAAA,IAAP,CAAA;EAKhB,UAAMW,CAAO,GAAGX,CAAC,CAADA,IAAAA,GAAAA,CAAAA,UAAAA,GAAhB,CAAA;EACAI,aAAAA,CAAQ,GAAIA,CAAQ,GAAT,IAACA,IAAqB,EAAjCA,EACAtE,IAAI,CAAJA,oBAAAA,CAAAA,CAAAA,IAA+B6E,CAAO,GAAPA,CAAAA,GAAqBL,CADpDF,EAEAtE,IAAI,CAAJA,oBAAAA,CAAAA,CAAAA,IAA+B0E,CAF/BJ,EAGOtE,IAAI,CAAJA,sBAAAA,CAAAA,CAAAA,CAHPsE;EAMGQ;;;aAAAA,oBAAU,CAAVA,EAAc;EACjB,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;;EACJ,UAAM1E,CAAM,GAAG8D,CAAC,CAAhB,MAAeA,EAAf;;EACA9D,aAAAA,CAAM,CAANA,IAAAA,GAAc,CAAC8D,CAAC,CAACpE,IAAjBM,EACOA,CADPA;EAGG2E;;;aAAAA,oBAAU,CAAVA,EAAc;EAAA,aACbb,CAAC,CADY,IACbA,GAEOlE,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAHM,MAGNA,EAFPkE,GAKGlE,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CANU;EAQdgF;;;aAAAA,sBAAY,CAAZA,EAAY,CAAZA,EAAmB;EACtB,UAAIC,CAAC,CAAL,IAAA,EACI,MAAM,IAAA,UAAA,CAAN,2BAAM,CAAN;EAEJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAOjF,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,EAAAA,CAAP,CAAOA,CAAP;EAEJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EACJ,UAAI,MAAA,CAAC,CAAD,MAAA,IAAkB,MAAA,CAAC,CAAD,OAAA,CAAtB,CAAsB,CAAtB,EAAA,OAEQkE,CAAC,CAADA,IAAAA,IAAU,MAAC,IAAA,CAAC,CAAD,OAAA,CAFnB,CAEmB,CAAD,CAAVA,GACOlE,IAAI,CAAJA,UAAAA,CAHf,CAGeA,CADPkE,GAFR,CAAA;EAUA,UAAI,IAAA,CAAC,CAAL,MAAA,EACI,MAAM,IAAA,UAAA,CAAN,gBAAM,CAAN;;EACJ,UAAIgB,CAAQ,GAAGD,CAAC,CAADA,eAAAA,CAAf,CAAeA,CAAf;;EACA,UAAI,MAAJ,CAAA,EACI,OAAA,CAAA;EACJ,UAAIC,CAAQ,IAAIlF,IAAI,CAApB,gBAAA,EACI,MAAM,IAAA,UAAA,CAAN,gBAAM,CAAN;;EAEJ,UAAI,MAAA,CAAC,CAAD,MAAA,IAAkB,MAAA,CAAC,CAAD,OAAA,CAAtB,CAAsB,CAAtB,EAA0C;EAAA,YAEhCmF,EAAY,GAAG,KAAK,IAACD,CAAQ,GAFG,EAEjB,CAFiB;EAAA,YAGhCpF,GAAI,GAAGoE,CAAC,CAADA,IAAAA,IAAW,MAAC,IAHa,CAGd,CAHc;EAAA,YAIhC9D,EAAM,GAAG,IAAA,IAAA,CAAA,EAAA,EAJuB,GAIvB,CAJuB;;EAKtCA,QAAAA,EAAM,CALgC,kBAKtCA;;EAEA,YAAMgF,CAAG,GAAG,KAAMF,CAAQ,GAA1B,EAAA;EACA9E,eAAAA,EAAM,CAANA,UAAAA,CAAkB+E,EAAY,GAA9B/E,CAAAA,EAAAA,CAAAA,GACOA,EADPA;EAnCkB;;EAAA,UAsClBA,CAAM,GAtCY,IAAA;EAAA,UAuClBiF,CAAa,GAvCK,CAAA;;EA4CtB,WAHI,MAAC,IAAD,CAAA,MACAjF,CAAM,GAAG8D,CADT,GAEJgB,CAAQ,KAAK,CACb,EAAO,MAAP,CAAA,EAAuBA,CAAQ,KAA/B,CAAA;EACIG,QAAAA,CAAa,GAAGrF,IAAI,CAAJA,QAAAA,CAAAA,CAAAA,EADpB,CACoBA,CAAhBqF,EACI,MAAC,IAFT,CAEQ,MACI,SAHZ,CAGY,GACAjF,CAAM,GAJlB,CAGY,GAIAA,CAAM,GAAGJ,IAAI,CAAJA,QAAAA,CAAAA,CAAAA,EAPrB,CAOqBA,CALb,CADJqF;EADJ;;EAYA,aAAOjF,CAAP;EAEGkF;;;aAAAA,kBAAQ,CAARA,EAAQ,CAARA,EAAe;EAClB,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EACJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EACJ,UAAIC,CAAY,GAAGrB,CAAC,CAADA,MAAAA,GAAWe,CAAC,CAA/B,MAAA;EACI,YAAA,CAAC,CAAD,QAAA,KAAeA,CAAC,CANF,QAMCA,EAAf,IACAM,CAPc,EAMd;EAGJ,UAAMnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAuB8D,CAAC,CAADA,IAAAA,KAAWe,CAAC,CAAlD,IAAe,CAAf;;EACA7E,MAAAA,CAAM,CAVY,kBAUlBA;;EACA,WAAK,IAAIO,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAGuD,CAAC,CAArB,MAAA,EAA8BvD,CAA9B,EAAA;EACIX,QAAAA,IAAI,CAAJA,oBAAAA,CAAAA,CAAAA,EAA6BkE,CAAC,CAADA,OAAAA,CAA7BlE,CAA6BkE,CAA7BlE,EAAAA,CAAAA,EAAAA,CAAAA;EADJ;;EAGA,aAAOI,CAAM,CAANA,MAAAA,EAAP;EAEGoF;;;aAAAA,gBAAM,CAANA,EAAM,CAANA,EAAa;EAChB,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,MAAM,IAAA,UAAA,CAAN,kBAAM,CAAN;EACJ,UAAI,IAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAJ,CAAI,CAAJ,EACI,OAAOxF,IAAI,CAAX,MAAOA,EAAP;;EAJY,UAKVyF,CAAU,GAAGvB,CAAC,CAADA,IAAAA,KAAWe,CAAC,CALf,IAAA;EAAA,UAMVS,CAAO,GAAGT,CAAC,CAADA,eAAAA,CANA,CAMAA,CANA;;EAOhB,UAAA,CAAA;;EACA,UAAI,MAAA,CAAC,CAAD,MAAA,IAAkB,SAAtB,CAAA,EAAyC;EACrC,YAAI,MAAJ,CAAA,EACI,OAAOQ,CAAU,KAAKvB,CAAC,CAAhBuB,IAAAA,GAAAA,CAAAA,GAA4BzF,IAAI,CAAJA,UAAAA,CAAnC,CAAmCA,CAAnC;EAEJ2F,QAAAA,CAAQ,GAAG3F,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,IAAAA,CAAX2F;EAJJ,OAAA,MAOIA,CAAQ,GAAG3F,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAPf,CAOeA,CAAX2F;;EAEJA,aAAAA,CAAQ,CAARA,IAAAA,GAAgBF,CAAhBE,EACOA,CAAQ,CAARA,MAAAA,EADPA;EAGGC;;;aAAAA,mBAAS,CAATA,EAAS,CAATA,EAAgB;EACnB,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,MAAM,IAAA,UAAA,CAAN,kBAAM,CAAN;EACJ,UAAI,IAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAJ,CAAI,CAAJ,EACI,OAAA,CAAA;;EACJ,UAAMF,CAAO,GAAGT,CAAC,CAADA,eAAAA,CAAhB,CAAgBA,CAAhB;;EACA,UAAI,MAAA,CAAC,CAAD,MAAA,IAAkB,SAAtB,CAAA,EAAyC;EACrC,YAAI,MAAJ,CAAA,EACI,OAAOjF,IAAI,CAAX,MAAOA,EAAP;;EACJ,YAAM6F,EAAc,GAAG7F,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAvB,CAAuBA,CAAvB;;EAHqC,eAIjC,MAJiC,EAIjC,GACOA,IAAI,CALsB,MAK1BA,EADP,GAEGA,IAAI,CAAJA,UAAAA,CAAAA,EAAAA,EAAgCkE,CAAC,CAAjClE,IAAAA,CAN8B;EAQzC;;EAAA,UAAM4F,CAAS,GAAG5F,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAlB,CAAkBA,CAAlB;;EACA4F,aAAAA,CAAS,CAATA,IAAAA,GAAiB1B,CAAC,CAACpE,IAAnB8F,EACOA,CAAS,CAATA,MAAAA,EADPA;EAGGE;;;aAAAA,aAAG,CAAHA,EAAG,CAAHA,EAAU;EACb,UAAMhG,CAAI,GAAGoE,CAAC,CAAd,IAAA;EADa,aAETpE,CAAI,KAAKmF,CAAC,CAFD,IAETnF,GAGOE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EALE,CAKFA,CAHPF,GAOA,KAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EATS,CAST,CAAA,GACOE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAVE,CAUFA,CADP,GAGGA,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAyB,CAAzBA,CAAAA,CAZM;EAcV+F;;;aAAAA,kBAAQ,CAARA,EAAQ,CAARA,EAAe;EAClB,UAAMjG,CAAI,GAAGoE,CAAC,CAAd,IAAA;EADkB,aAEdpE,CAAI,KAAKmF,CAAC,CAFI,IAEdnF,GAOA,KAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EATc,CASd,CAAA,GACOE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAVO,CAUPA,CADP,GAGGA,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAyB,CAZd,CAYXA,CAVHF,GAGOE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CALO;EAcfgG;;;aAAAA,mBAAS,CAATA,EAAS,CAATA,EAAgB;EAAA,aACf,MAAA,CAAC,CAAD,MAAA,IAAkB,MAAA,CAAC,CADJ,MACf,GADe,CACf,GAEAf,CAAC,CAHc,IAGfA,GACOjF,IAAI,CAAJA,sBAAAA,CAAAA,CAAAA,EAJQ,CAIRA,CADPiF,GAEGjF,IAAI,CAAJA,qBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CALY;EAOhBiG;;;aAAAA,0BAAgB,CAAhBA,EAAgB,CAAhBA,EAAuB;EAAA,aACtB,MAAA,CAAC,CAAD,MAAA,IAAkB,MAAA,CAAC,CADG,MACtB,GADsB,CACtB,GAEAhB,CAAC,CAHqB,IAGtBA,GACOjF,IAAI,CAAJA,qBAAAA,CAAAA,CAAAA,EAJe,CAIfA,CADPiF,GAEGjF,IAAI,CAAJA,sBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CALmB;EAOvBkG;;;aAAAA,8BAAqB;EACxB,YAAM,IAAA,SAAA,CAAA,sDAAA,CAAN;EAEGC;;;aAAAA,kBAAQ,CAARA,EAAQ,CAARA,EAAe;EAClB,aAAO,IAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAA,CAAA,CAAP;EAEGC;;;aAAAA,yBAAe,CAAfA,EAAe,CAAfA,EAAsB;EACzB,aAAO,KAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAA,CAAA,CAAP;EAEGC;;;aAAAA,qBAAW,CAAXA,EAAW,CAAXA,EAAkB;EACrB,aAAO,IAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAA,CAAA,CAAP;EAEGC;;;aAAAA,4BAAkB,CAAlBA,EAAkB,CAAlBA,EAAyB;EAC5B,aAAO,KAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAA,CAAA,CAAP;EAEGC;;;aAAAA,eAAK,CAALA,EAAK,CAALA,EAAY;EACf,UAAIrC,CAAC,CAADA,IAAAA,KAAWe,CAAC,CAAhB,IAAA,EACI,OAAA,CAAA,CAAA;EACJ,UAAIf,CAAC,CAADA,MAAAA,KAAae,CAAC,CAAlB,MAAA,EACI,OAAA,CAAA,CAAA;;EACJ,WAAK,IAAItE,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAGuD,CAAC,CAArB,MAAA,EAA8BvD,CAA9B,EAAA;EACI,YAAIuD,CAAC,CAADA,OAAAA,CAAAA,CAAAA,MAAiBe,CAAC,CAADA,OAAAA,CAArB,CAAqBA,CAArB,EACI,OAAA,CAAA,CAAA;EAFR;;EAIA,aAAA,CAAA,CAAA;EAEGuB;;;aAAAA,kBAAQ,CAARA,EAAQ,CAARA,EAAe;EAClB,aAAO,CAACxG,IAAI,CAAJA,KAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAR;EAEGyG;;;aAAAA,oBAAU,CAAVA,EAAU,CAAVA,EAAiB;EAAA;;EAAA,UAAA,CAAA,GAKK5C,IAAI,CALT,GAAA;EACpB,UAAI,CAACK,CAAC,CAAF,IAAA,IAAW,CAACe,CAAC,CAAjB,IAAA,EACI,OAAOjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAP,MAAOA,EAAP;;EAEC,UAAIkE,CAAC,CAADA,IAAAA,IAAUe,CAAC,CAAf,IAAA,EAAsB;EACvB,YAAMM,CAAY,GAAG1B,CAAAA,CAASK,CAAC,CAAVL,MAAAA,EAAmBoB,CAAC,CAApBpB,MAAAA,CAAAA,GAArB,CAAA;;EAGA,YAAIzD,CAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAb,CAAaA,CAAb;;EACA,YAAM0G,CAAE,GAAG1G,IAAI,CAAJA,gBAAAA,CAAX,CAAWA,CAAX;;EACAI,eAAAA,CAAM,GAAGJ,IAAI,CAAJA,YAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAATI,EACOJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,MAAAA,EADPI;EAIA8D;;EAAAA,aAAAA,CAAC,CAACpE,IAAFoE,YACS,CAAA,CAAA,EAAA,CAAA,CADTA,EACA,CADAA,YACA,CADAA,mBAIGlE,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAyBA,IAAI,CAAJA,gBAAAA,CAAzBA,CAAyBA,CAAzBA,EAAAA,MAAAA,EAJHkE;EAMDyC;;;aAAAA,oBAAU,CAAVA,EAAU,CAAVA,EAAiB;EAAA;;EAAA,UAAA,CAAA,GAMK9C,IAAI,CANT,GAAA;EACpB,UAAI,CAACK,CAAC,CAAF,IAAA,IAAW,CAACe,CAAC,CAAjB,IAAA,EACI,OAAOjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAP,MAAOA,EAAP;;EAEC,UAAIkE,CAAC,CAADA,IAAAA,IAAUe,CAAC,CAAf,IAAA,EAAsB;EAAA,YAEjBM,GAAY,GAAG1B,CAAAA,CAASK,CAAC,CAAVL,MAAAA,EAAmBoB,CAAC,CAFlB,MAEFpB,CAFE;EAAA,YAGjBzD,GAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAHQ,GAGRA,CAHQ;EAAA,YAIjB0G,CAAE,GAAG1G,IAAI,CAAJA,gBAAAA,CAJY,CAIZA,CAJY;;EAKvB,eAAOA,IAAI,CAAJA,aAAAA,CAAAA,GAAAA,EAAAA,CAAAA,EAAAA,GAAAA,EAAAA,MAAAA,EAAP;EAEJ;;EAAA,UAAMuF,CAAY,GAAG,CAAA,CAASrB,CAAC,CAAV,MAAA,EAAmBe,CAAC,CAApB,MAAA,CAAA,GAArB,CAAA;EAEIf,MAAAA,CAAC,CAbe,IAahBA,aACS,CAAA,CAAA,EAdO,CAcP,CADTA,EACA,CADAA,aACA,CADAA;;EAIJ,UAAI9D,CAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAb,CAAaA,CAAb;;EACAI,aAAAA,CAAM,GAAGJ,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAATI,EACOJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,MAAAA,EADPI;EAGGwG;;;aAAAA,mBAAS,CAATA,EAAS,CAATA,EAAgB;EAAA;;EAAA,UAAA,CAAA,GACE/C,IAAI,CADN,GAAA;EACnB,UAAM0B,CAAY,GAAG1B,CAAAA,CAASK,CAAC,CAAVL,MAAAA,EAAmBoB,CAAC,CAAzC,MAAqBpB,CAArB;EACA,UAAI,CAACK,CAAC,CAAF,IAAA,IAAW,CAACe,CAAC,CAAjB,IAAA,EACI,OAAOjF,IAAI,CAAJA,YAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAP,MAAOA,EAAP;;EAEC,UAAIkE,CAAC,CAADA,IAAAA,IAAUe,CAAC,CAAf,IAAA,EAAsB;EAGvB,YAAI7E,GAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAb,CAAaA,CAAb;;EACA,YAAM0G,GAAE,GAAG1G,IAAI,CAAJA,gBAAAA,CAAX,CAAWA,CAAX;;EACAI,eAAAA,GAAM,GAAGJ,IAAI,CAAJA,aAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CAATI,EACOJ,IAAI,CAAJA,gBAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,EAAAA,GAAAA,EAAAA,MAAAA,EADPI;EAIA8D;;EAAAA,MAAAA,CAAC,CAdc,IAcfA,aACS,CAAA,CAAA,EAfM,CAeN,CADTA,EACA,CADAA,aACA,CADAA;;EAIJ,UAAI9D,CAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAb,CAAaA,CAAb;;EACAI,aAAAA,CAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAATI,EACOJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,MAAAA,EADPI;EAGGyG;;;aAAAA,gBAAM,CAANA,EAAM,CAANA,EAAa;EAAA,UAAA,CAAA,GAGZhD,IAAI,CAHQ,KAAA;EAChB,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EAEJ,UADAiD,CAAC,GAAGjD,CAAAA,CAAAA,CAAAA,CAAJiD,EACI,IAAJ,CAAA,EACI,MAAM,IAAA,UAAA,CAAN,oDAAM,CAAN;EAEJ,UAAI,MAAJ,CAAA,EACI,OAAO9G,IAAI,CAAX,MAAOA,EAAP;EAEJ,UAAI8G,CAAC,IAAI9G,IAAI,CAAb,gBAAA,EACI,OAAA,CAAA;EACJ,UAAM+G,CAAY,GAAG,IAAC,CAACD,CAAC,GAAF,EAAA,IAAtB,EAAA;EACA,UAAI5C,CAAC,CAADA,MAAAA,GAAJ,CAAA,EACI,OAAA,CAAA;;EAdY,UAeV8C,CAAQ,GAAG9C,CAAC,CAADA,eAAAA,CAAkB6C,CAAY,GAf/B,CAeC7C,CAfD;EAAA,UAgBV+C,CAAY,GAAG,KAAM,CAACH,CAAC,GAAF,CAAA,IAhBX,EAAA;;EAiBhB,UAAI5C,CAAC,CAADA,MAAAA,KAAAA,CAAAA,IAA6B8C,CAAQ,GAAzC,CAAA,EACI,OAAA,CAAA;EAGJ,UAAI,EADW,CAACA,CAAQ,GAAT,CAAA,MAA8BC,CACzC,CAAJ,EACI,OAAOjH,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAAP,CAAOA,CAAP;EACJ,UAAI,CAACkE,CAAC,CAAN,IAAA,EACI,OAAOlE,IAAI,CAAJA,8BAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAP,CAAOA,CAAP;;EACJ,UAAI,MAACgH,CAAQ,GAAIC,CAAY,GAA7B,CAAI,CAAJ,EAA2C;EACvC,aAAK,IAAItG,CAAC,GAAGoG,CAAY,GAAzB,CAAA,EAA+B,KAA/B,CAAA,EAAuCpG,CAAvC,EAAA;EACI,cAAI,MAAA,CAAC,CAAD,OAAA,CAAJ,CAAI,CAAJ,EACI,OAAOX,IAAI,CAAJA,8BAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAP,CAAOA,CAAP;EAFR;;EADuC,eAMnCkE,CAAC,CAADA,MAAAA,KAAAA,CAAAA,IAA6B8C,CAAQ,KANF,CAMnC9C,GANmC,CAMnCA,GAEGlE,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CARgC;EAU3C;;EAAA,aAAOA,IAAI,CAAJA,8BAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAP;EAEGkH;;;aAAAA,iBAAO,CAAPA,EAAO,CAAPA,EAAc;EAAA,UAAA,CAAA,GAGbrD,IAAI,CAHS,KAAA;EACjB,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EAEJ,UADAiD,CAAC,GAAGjD,CAAAA,CAAAA,CAAAA,CAAJiD,EACI,IAAJ,CAAA,EACI,MAAM,IAAA,UAAA,CAAN,oDAAM,CAAN;EAEJ,UAAI,MAAJ,CAAA,EACI,OAAO9G,IAAI,CAAX,MAAOA,EAAP;;EAEJ,UAAIkE,CAAC,CAAL,IAAA,EAAY;EACR,YAAI4C,CAAC,GAAG9G,IAAI,CAAZ,gBAAA,EACI,MAAM,IAAA,UAAA,CAAN,gBAAM,CAAN;EAEJ,eAAOA,IAAI,CAAJA,8BAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAP;EAGJ;;EAAA,UAAI8G,CAAC,IAAI9G,IAAI,CAAb,gBAAA,EACI,OAAA,CAAA;EACJ,UAAM+G,CAAY,GAAG,IAAC,CAACD,CAAC,GAAF,EAAA,IAAtB,EAAA;EACA,UAAI5C,CAAC,CAADA,MAAAA,GAAJ,CAAA,EACI,OAAA,CAAA;EACJ,UAAMiD,CAAc,GAAGL,CAAC,GAAxB,EAAA;;EACA,UAAI5C,CAAC,CAADA,MAAAA,IAAJ,CAAA,EAA8B;EAC1B,YAAI,MAAJ,CAAA,EACI,OAAA,CAAA;;EACJ,YAAM8C,GAAQ,GAAG9C,CAAC,CAADA,OAAAA,CAAU6C,CAAY,GAAvC,CAAiB7C,CAAjB;;EACA,YAAI,KAAC8C,GAAQ,KAAb,CAAA,EACI,OAAO9C,CAAP;EAGR;;EAAA,aAAOlE,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAP;EAGGoH;;;aAAAA,aAAG,CAAHA,EAAG,CAAHA,EAAU;EAGb,UAFAlD,CAAC,GAAGlE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJkE,EACAe,CAAC,GAAGjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CADJkE,EAEI,YAAA,OAAJ,CAAA,EAGI,OAFI,YAAA,OAAOe,CAAP,KACAA,CAAC,GAAGA,CAAC,CAADA,QAAAA,EADJ,GAEGf,CAAC,GAAR,CAAA;EAEJ,UAAI,YAAA,OAAJ,CAAA,EACI,OAAOA,CAAC,CAADA,QAAAA,KAAP,CAAA;EAIJ,UAFAA,CAAC,GAAGlE,IAAI,CAAJA,WAAAA,CAAAA,CAAAA,CAAJkE,EACAe,CAAC,GAAGjF,IAAI,CAAJA,WAAAA,CAAAA,CAAAA,CADJkE,EAEIlE,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,KAAsBA,IAAI,CAAJA,UAAAA,CAA1B,CAA0BA,CAA1B,EACI,OAAOA,IAAI,CAAJA,GAAAA,CAAAA,CAAAA,EAAP,CAAOA,CAAP;EAEJ,UAAI,YAAA,OAAA,CAAA,IAAyB,YAAA,OAA7B,CAAA,EACI,OAAOkE,CAAC,GAAR,CAAA;EAEJ,YAAM,IAAA,SAAA,CAAA,6DAAA,CAAN;EAEGmD;;;aAAAA,YAAE,CAAFA,EAAE,CAAFA,EAAS;EACZ,aAAOrH,IAAI,CAAJA,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAP;EAEGsH;;;aAAAA,YAAE,CAAFA,EAAE,CAAFA,EAAS;EACZ,aAAOtH,IAAI,CAAJA,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAP;EAEGuH;;;aAAAA,YAAE,CAAFA,EAAE,CAAFA,EAAS;EACZ,aAAOvH,IAAI,CAAJA,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAP;EAEGwH;;;aAAAA,YAAE,CAAFA,EAAE,CAAFA,EAAS;EACZ,aAAOxH,IAAI,CAAJA,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAP;EAEGyH;;;aAAAA,YAAE,CAAFA,EAAE,CAAFA,EAAS;EAAA,eAAA;EAER,YAAIzH,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EAAA,OACQA,IAAI,CAAJA,UAAAA,CADR,CACQA,IACOA,IAAI,CAAJA,KAAAA,CAAAA,CAAAA,EAFf,CAEeA,CADPA,GAEGA,IAAI,CAAJA,EAAAA,CAAAA,CAAAA,EAHX,CAGWA,CAHX;;EAKK,YAAI,YAAA,OAAJ,CAAA,EAA2B;EAC5B,cAAIA,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EACI,OAAOA,IAAI,CAAJA,eAAAA,CAAAA,CAAAA,EAAP,CAAOA,CAAP;EACJ,cAAI,oBAAJ,CAAI,CAAJ,EACI,OAAOkE,CAAC,IAAR,CAAA;EACJe,UAAAA,CAAC,GAAGjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJiF;EALC,SAAA,MAOA,IAAI,YAAA,OAAJ,CAAA,EAA2B;EAC5B,cAAIjF,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EAAA,OACIkE,CAAC,GAAGlE,IAAI,CAAJA,YAAAA,CADR,CACQA,CAAJkE,EACI,SAFR,CAEQ,IAEGlE,IAAI,CAAJA,KAAAA,CAAAA,CAAAA,EAJX,CAIWA,CAJX;EAMA,cAAI,oBAAJ,CAAI,CAAJ,EACI,OAAOkE,CAAC,IAAR,CAAA;EACJe,UAAAA,CAAC,GAAGjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJiF;EATC,SAAA,MAWA,IAAI,aAAA,OAAJ,CAAA,EAA4B;EAC7B,cAAIjF,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EACI,OAAOA,IAAI,CAAJA,eAAAA,CAAAA,CAAAA,EAAwB,CAA/B,CAAOA,CAAP;EACJ,cAAI,oBAAJ,CAAI,CAAJ,EACI,OAAOkE,CAAC,IAAR,CAAA;EACJe,UAAAA,CAAC,GAAGjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJiF;EALC,SAAA,MAOA,IAAI,oBAAJ,CAAI,CAAJ,EAA2B;EAC5B,cAAIjF,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EACI,OAAA,CAAA,CAAA;EACJ,cAAI,oBAAJ,CAAI,CAAJ,EACI,OAAOkE,CAAC,IAAR,CAAA;EACJe,UAAAA,CAAC,GAAGjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJiF;EALC,SAAA,MAOA,IAAI,oBAAJ,CAAI,CAAJ,EAA2B;EAC5B,cAAI,oBAAA,CAAA,KAAyBA,CAAC,CAADA,WAAAA,KAA7B,IAAA,EACI,OAAOf,CAAC,IAAR,CAAA;EACJA,UAAAA,CAAC,GAAGlE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJkE;EAHC,SAAA,MAMD,OAAOA,CAAC,IA7CJ,CA6CJ;EAGX;EACMwD;;;aAAAA,YAAE,CAAFA,EAAE,CAAFA,EAAS;EACZ,aAAO,CAAC1H,IAAI,CAAJA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAR;EAGG2H;;;aAAAA,kBAAS;EACZ,aAAO,IAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAP;EAEGC;;;aAAAA,oBAAU,CAAVA,EAAU,CAAVA,EAAwB;EAC3B,UAAMxH,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAf,CAAe,CAAf;EACAA,aAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GACOA,CADPA;EAGJM;;;aAwBOM,0BAAgB,CAAhBA,EAAgB,CAAhBA,EAAgB,CAAhBA,EAAgB,CAAhBA,EAAiE;EACpE,UAAI,IAAJ,CAAA,EACI,OAAO,CAAP,CAAA;EACJ,UAAA,CAAA;EACA,UAAI,IAAJ,CAAA,EACI6G,CAAgB,GAAG,CAAA,CAAA,GADvB,CACIA,CADJ,KAGK;EAED,YAAI,MAAJ,CAAA,EACI,OAAO,CAAP,CAAA;EACJrE,QAAAA,CAJC,IAKDe,CAAY,GAAGL,CAAC,CAADA,OAAAA,CALd,CAKcA,CALd,EAMD2D,CAAgB,GAAG,EAFnBrE;EAKJ;EAAA,UAAIsE,CAAI,GAAG,KAAX,CAAA;EACA,UAAI,MAACvD,CAAY,GAAjB,CAAI,CAAJ,EACI,OAAO,CAAP,CAAA;EAGJ,UADAuD,CAAI,IAAI,CAARA,EACI,MAACvD,CAAY,GAAjB,CAAI,CAAJ,EACI,OAAA,CAAA;;EAtBgE,aAuB7D,IAvB6D,CAAA;EAyBhE,YADAf,CAAU,IACN,MAAA,CAAC,CAAD,OAAA,CAAJ,CAAI,CAAJ,EACI,OAAA,CAAA;EA1B4D;;EA4BpE,aAAO,CAAP;EAEGuE;;;aAAAA,sBAAY,CAAZA,EAAoB;EAEvB/H,MAAAA,IAAI,CAAJA,sBAAAA,CAAAA,CAAAA,IAFuB,CAEvBA;;EAFuB,UAGjBgI,CAAW,GAAG,OAAChI,IAAI,CAAJA,oBAAAA,CAAAA,CAAAA,MAHE,EAAA;EAAA,UAIjBsE,CAAQ,GAAG0D,CAAW,GAJL,IAAA;EAAA,UAKjBC,CAAM,GAAG,CAAC,IAAC3D,CAAQ,GAAV,EAAA,IALQ,CAAA;EAAA,UAMjBlE,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EALF,IADU,CAMR,CANQ;;EAAA,UAQnBoE,CAAY,GAAI,UAAA,IAAI,CAAJ,oBAAA,CAAD,CAAC,CAAA,GARG,OAAA;EAAA,UASnBE,CAAW,GAAG1E,IAAI,CAAJA,oBAAAA,CATK,CASLA,CATK;EAAA,UAUjBkI,CAAmB,GAVF,EAAA;EAAA,UAYjBC,CAAS,GAAG7D,CAAQ,GAZH,EAAA;EAAA,UAAA,CAAA;EAAA,UAenB8D,CAAqB,GAfF,CAAA;;EAmBvB,UAAID,CAAS,GAAb,EAAA,EAAqC;EACjC,YAAMrF,GAAK,GAAGoF,CAAmB,GAAjC,CAAA;;EACAE,QAAAA,CAAqB,GAAGtF,GAAK,GAFI,EAEjCsF,EACA/H,CAAK,GAAGmE,CAAY,KAHa,GAEjC4D,EAEA5D,CAAY,GAAIA,CAAY,IAAK,KAAlB,GAACA,GAAiCE,CAAW,KAJ3B,GAEjC0D,EAGA1D,CALiC,KAKH,KAAK5B,GAHnCsF;EAFJ,OAAA,MAOK,IAAID,CAAS,KAAb,EAAA,EACDC,CAAqB,GADpB,EACDA,EACA/H,CAAK,GAFJ,CACD+H,EAEA5D,CAAY,GAHX,CACD4D,EAGA1D,CAAW,GAJV,CACD0D,CADC,KAMA;EACD,YAAMtF,GAAK,GAAGqF,CAAS,GAAvB,CAAA;;EACAC,QAAAA,CAAqB,GAAG,KAFvB,GAEDA,EACA/H,CAAK,GAAImE,CAAY,IAAb,GAACA,GAA0BE,CAAW,KAAM,KAHnD,GAED0D,EAEA5D,CAAY,GAAGE,CAAW,IAJzB,GAED0D,EAGA1D,CAAW,GAAG,CAHd0D;EAKJhI;;EAAAA,MAAAA,CAAM,CAANA,UAAAA,CAAkB6H,CAAM,GAAxB7H,CAAAA,EAvCuB,CAuCvBA;;EAEA,WAAK,IAAIoD,EAAU,GAAGyE,CAAM,GAA5B,CAAA,EAAkC,KAAlC,EAAA,EAAmDzE,EAAnD,EAAA;EACQ,YADR,CACQ,IACA4E,CAAqB,IAF7B,EAEQA,EACA/H,CAAK,GAAGmE,CAAY,KAH5B,CAEQ4D,EAEA5D,CAAY,GAAIA,CAAY,IAAb,EAACA,GAAuBE,CAAW,KAJ1D,CAEQ0D,EAGA1D,CALR,KAAA,EACQ,IAOArE,CAAK,GARb,CACQ,EASJD,CAAM,CAANA,UAAAA,CAAAA,EAAAA,EAVJ,CAUIA,CATI;EADR;;EAYA,aAAOA,CAAM,CAANA,MAAAA,EAAP;EAEGiI;;;aAAAA,wBAAc,CAAdA,EAAkB;EAAA,aAAA,CAAA,EACjB,MAAA,CAAA,IAAa,KADI,CAAA,CAAA,KAGjB,OAHiB,CAGjB,GACO,MAJU,CAGjB,GAEA,UALiB,CAKjB,GACO,OAAA,CAAA,IAAc,QANJ,CAKjB,GAGA,UARiB,CAQjB,IACAC,CAAC,IATgB,MASjBA,EACO,MAAA,CAAA,IAAa,MAAb,CAAA,IAA2B,MAA3B,CAAA,IAAyC,MAAzC,CAAA,IACH,MADG,CAAA,IACW,QAXD,CAQjB,IAKG,SAbc,CAAA,CAAA;EAelBC;;;aAAAA,sBAAY,CAAZA,EAAgC;EAAA,UAAXhI,CAAW,uEAApB,CAAoB;;EACnC,UAAIT,CAAI,GAAR,CAAA;EAEA,UAAMG,CAAM,GAAGuI,CAAM,CAArB,MAAA;EACA,UAAIC,CAAM,GAAV,CAAA;EACA,UAAIA,CAAM,KAAV,CAAA,EACI,OAAOzI,IAAI,CAAX,MAAOA,EAAP;EACJ,UAAIuC,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAd,CAAcA,CAAd;;EAPmC,aAS5BxI,IAAI,CAAJA,cAAAA,CAT4B,CAS5BA,CAT4B,GASE;EACjC,YAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAOA,IAAI,CAAX,MAAOA,EAAP;EACJuC,QAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAGJ;;EAAA,UAAI,OAAJ,CAAA,EAAsB;EAClB,YAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAA,IAAA;EACJA,QAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAHQ,CAGRA,CAAVjG,EACAzC,CAAI,GAAG,CADPyC;EAHJ,OAAA,MAMK,IAAI,OAAJ,CAAA,EAAsB;EACvB,YAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAA,IAAA;EACJA,QAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAHa,CAGbA,CAAVjG,EACAzC,CAAI,GAAG,CAAC,CADRyC;EAGJ;;EAAA,UAAI,MAAJ,CAAA,EAAA;EAEI,YADAhC,CAAK,GAAG,EAARA,EACI,OAAJ,CAAA,EAAsB;EAClB,cAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAOP,IAAI,CAAX,MAAOA,EAAP;;EAEJ,cADAuC,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG,EACI,OAAA,CAAA,IAAoB,QAAxB,CAAA,EAA0C;EAEtC,gBADAhC,CAAK,GAAG,EAARA,EACI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAA,IAAA;EACJgC,YAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAJJ,WAAA,MAMK,IAAI,OAAA,CAAA,IAAoB,QAAxB,CAAA,EAA0C;EAE3C,gBADAhC,CAAK,GAAG,CAARA,EACI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAA,IAAA;EACJgC,YAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAJC,WAAA,MAMA,IAAI,OAAA,CAAA,IAAoB,OAAxB,CAAA,EAA0C;EAE3C,gBADAhC,CAAK,GAAG,CAARA,EACI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAA,IAAA;EACJgC,YAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAKP;EA3BL;EAAA,OAAA,MA6BK,IAAI,OAAJ,CAAI,IACD,OADH,CAAA,EACqB;EAElB,YAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAOvC,IAAI,CAAX,MAAOA,EAAP;;EAEJ,YADAuC,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG,EACI,OAAA,CAAA,IAAoB,QAAxB,CAAA,EAA0C;EACtC,cAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAA,IAAA;EACJA,UAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAKP;EAEL;;EAAA,UAAI,KAAA,CAAA,IAAc,OAAlB,CAAA,EACI,OAAA,IAAA;;EAzE+B,aA2E5B,OA3E4B,CAAA,GA2EV;EAErB,YAAI,EAAA,CAAA,KAAJ,CAAA,EACI,OAAOvC,IAAI,CAAX,MAAOA,EAAP;EACJuC,QAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAGJ;;EAAA,UAAMmG,CAAK,GAAGzI,CAAM,GAApB,CAAA;EAlFmC,UAmF/B0I,CAAW,GAAG3I,IAAI,CAAJA,iBAAAA,CAnFiB,CAmFjBA,CAnFiB;EAAA,UAoF/B4I,CAAO,GAAG5I,IAAI,CAAJA,6BAAAA,GApFqB,CAAA;EAqFnC,UAAI0I,CAAK,GAAG,aAAZ,CAAA,EACI,OAAA,IAAA;EAtF+B,UAuF7BG,CAAO,GAAIF,CAAW,GAAXA,CAAAA,GAAD,CAACA,KAAmC3I,IAAI,CAvFrB,wBAAA;EAAA,UAyF7BI,CAAM,GAAG,IAAA,IAAA,CADM,IAAC,CAACyI,CAAO,GAAR,EAAA,IAAiB,EACxB,EAAA,CAzFoB,CAyFpB,CAzFoB;EAAA,UA2F7BC,CAAQ,GAAG,KAAA,CAAA,GAAK,CAAL,GA3FkB,EAAA;EAAA,UA4F7BC,CAAQ,GAAG,KAAA,CAAA,GAAaxI,CAAK,GAAb,EAAL,GA5FkB,CAAA;;EA6FnC,UAAI,MAACA,CAAK,GAAIA,CAAK,GAAnB,CAAI,CAAJ,EAAiC;EAE7BoI,QAAAA,CAAW,KAAK3I,IAAI,CAFS,wBAE7B2I;EAF6B,YAGvBK,EAAK,GAHkB,EAAA;EAAA,YAIvBC,GAAS,GAJc,EAAA;;EAK7B,YAAIC,GAAI,GAAA,CAAR,CAAA;;EACA,WAAG;EAAA,cACKC,GAAI,GADT,CAAA;EAAA,cAEKC,EAAI,GAFT,CAAA;;EAAA,mBAGc;EACT,gBAAI3H,GAAJ,SAAA;;EACA,gBAAMc,CAAO,GAAR,EAACA,KAAF,CAAEA,GAAN,CAAA,EACId,GAAC,GAAGc,CAAO,GADf,EACId,CADJ,KAGK,IAAM,CAAC,KAAD,CAAA,IAAD,EAAC,KAAF,CAAE,GAAN,CAAA,EACDA,GAAC,GAAG,CAAC,KAAD,CAAA,IADH,EACDA,CADC,KAGA;EACDyH,cAAAA,GAAI,GAAA,CADH,CACDA;EACA;EAIJ;;EAAA,gBAFAE,EAAI,IAAIT,CAARS,EACAD,GAAI,GAAIA,GAAI,IAAL,CAACA,GAAuB1H,GAD/B2H,EAEI,EAAA,CAAA,KAAJ,CAAA,EAAyB;EACrBF,cAAAA,GAAI,GAAA,CADiB,CACrBA;EACA;EAGJ;;EAAA,gBADA3G,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG,EACI,KAAA,EAAI,GAAR,CAAA,EACI;EAERyG;;EAAAA,UAAAA,EAAK,CAALA,IAAAA,CAzBD,GAyBCA,GACAC,GAAS,CAATA,IAAAA,CAAAA,EAAAA,CADAD;EAzBJ,SAAA,QA2BS,CA3BT,GAAA;;EA4BAhJ,QAAAA,IAAI,CAAJA,eAAAA,CAAAA,CAAAA,EAAAA,EAAAA,EAAAA,GAAAA;EAlCJ,OAAA,MAoCK;EACDI,QAAAA,CAAM,CADL,kBACDA;;EADC,YAEG8I,GAAI,GAAA,CAFP,CAAA;EAAA,YAGGG,GAAU,GAHb,CAAA;;EAID,WAAG;EAAA,cACKF,GAAI,GADT,CAAA;EAAA,cAEK7H,CAAU,GAFf,CAAA;;EAAA,mBAGc;EACT,gBAAIG,GAAJ,SAAA;;EACA,gBAAMc,CAAO,GAAR,EAACA,KAAF,CAAEA,GAAN,CAAA,EACId,GAAC,GAAGc,CAAO,GADf,EACId,CADJ,KAGK,IAAM,CAAC,KAAD,CAAA,IAAD,EAAC,KAAF,CAAE,GAAN,CAAA,EACDA,GAAC,GAAG,CAAC,KAAD,CAAA,IADH,EACDA,CADC,KAGA;EACDyH,cAAAA,GAAI,GAAA,CADH,CACDA;EACA;EAEJ;;EAAA,gBAAMI,GAAC,GAAGhI,CAAU,GAApB,CAAA;;EACA,gBAAI,aAAJ,GAAA,EACI;;EAIJ,gBAHAA,CAAU,GAAGgI,GAAbhI,EACA6H,GAAI,GAAGA,GAAI,GAAJA,CAAAA,GAAe1H,GADtBH,EAEA+H,GAAU,EAFV/H,EAGI,EAAA,CAAA,KAAJ,CAAA,EAAyB;EACrB4H,cAAAA,GAAI,GAAA,CADiB,CACrBA;EACA;EAEJ3G;;EAAAA,YAAAA,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG;EAEJqG;;EAAAA,UAAAA,CAAO,GAAG,KAAA,IAAI,CAAJ,6BAAA,GA3BX,CA2BCA;EACA,cAAMW,CAAW,GAAG,IAAC,CAAEZ,CAAW,GAAXA,GAAAA,GAAD,CAACA,KACnB3I,IAAI,CADa,wBAAA,IAArB,EAAA;;EAEAI,UAAAA,CAAM,CAANA,oBAAAA,CAAAA,CAAAA,EAAAA,GAAAA,EAAAA,CAAAA;EA9BJ,SAAA,QA+BS,CA/BT,GAAA;EAiCJ;;EAAA,UAAIqI,CAAM,KAAV,CAAA,EAAuB;EACnB,YAAI,CAACzI,IAAI,CAAJA,cAAAA,CAAL,CAAKA,CAAL,EACI,OAAA,IAAA;;EACJ,aAAKyI,CAAL,EAAA,EAAeA,CAAM,GAArB,CAAA,EAAgCA,CAAhC,EAAA;EAEI,cADAlG,CAAO,GAAGiG,CAAM,CAANA,UAAAA,CAAAA,CAAAA,CAAVjG,EACI,CAACvC,IAAI,CAAJA,cAAAA,CAAL,CAAKA,CAAL,EACI,OAAO,IAAP;EAHR;EAOJI;;EAAAA,aAAAA,CAAM,CAANA,IAAAA,GAAwB,CAAT,CAAS,IAAT,CAAfA,EACOA,CAAM,CAANA,MAAAA,EADPA;EAGGoJ;;;aAAAA,yBAAe,CAAfA,EAAe,CAAfA,EAAe,CAAfA,EAA0C;EAAA,UACzChG,CAAU,GAD+B,CAAA;EAAA,UAEzCnD,CAAK,GAFoC,CAAA;EAAA,UAGzCoJ,CAAW,GAH8B,CAAA;;EAI7C,WAAK,IAAI9I,CAAC,GAAGqI,CAAK,CAALA,MAAAA,GAAb,CAAA,EAA+B,KAA/B,CAAA,EAAuCrI,CAAvC,EAAA,EAA4C;EAAA,YAClCwI,CAAI,GAAGH,CAAK,CADsB,CACtB,CADsB;EAAA,YAElCU,CAAQ,GAAGT,CAAS,CAFc,CAEd,CAFc;EAGxC5I,QAAAA,CAAK,IAAK8I,CAAI,IAH0B,CAGxC9I,EACAoJ,CAAW,IAJ6B,CAGxCpJ,EAEI,OALoC,CAKpC,IACAD,CAAM,CAANA,UAAAA,CAAkBoD,CAAlBpD,EAAAA,EANoC,CAMpCA,GACAqJ,CAAW,GAPyB,CAMpCrJ,EAEAC,CAAK,GAR+B,CAKpC,IAKK,KAV+B,CAU/B,KACLD,CAAM,CAANA,UAAAA,CAAkBoD,CAAlBpD,EAAAA,EAAgC,aAXI,CAWpCA,GACAqJ,CAAW,IAZyB,EAWpCrJ,EAEAC,CAAK,GAAG8I,CAAI,KAAMO,CAAQ,GAbU,CAU/B,CAPTrJ;EAaJ;;EAAA,UAAI,MAAJ,CAAA,EAAiB;EACb,YAAImD,CAAU,IAAIpD,CAAM,CAAxB,MAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;;EACJA,QAAAA,CAAM,CAANA,UAAAA,CAAkBoD,CAAlBpD,EAAAA,EAAAA,CAAAA;EAEJ;;EAAA,aAAOoD,CAAU,GAAGpD,CAAM,CAA1B,MAAA,EAAmCoD,CAAnC,EAAA;EACIpD,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;EADJ;EAIGuJ;;;aAAAA,kCAAwB,CAAxBA,EAAwB,CAAxBA,EAAmC;EACtC,UAAM1J,CAAM,GAAGiE,CAAC,CAAhB,MAAA;EACA,UAAIkF,CAAI,GAAG7I,CAAK,GAAhB,CAAA;EACA6I,MAAAA,CAAI,GAAG,CAAC,KAACA,CAAI,KAAN,CAAA,KAAyB,KAHM,CAG/B,CAAPA,EACAA,CAAI,GAAG,CAAC,KAACA,CAAI,KAAN,CAAA,KAAyB,KAJM,CAI/B,CADPA,EAEAA,CAAI,GAAG,CAAC,KAACA,CAAI,KAAN,CAAA,KAAyB,KALM,CAK/B,CAFPA;;EAHsC,UAMhCT,CAAW,GANqB,CAAA;EAAA,UAOhCiB,CAAQ,GAAGrJ,CAAK,GAPgB,CAAA;EAAA,UAQhC6E,CAAG,GAAGlB,CAAC,CAADA,OAAAA,CAAUjE,CAAM,GARU,CAQ1BiE,CAR0B;EAAA,UAShCE,CAAe,GAAGpE,IAAI,CAAJA,OAAAA,CATc,CASdA,CATc;;EAWtC,UAAI6J,CAAa,GAAG,IAAC,CADH,KAAA,CAAA,GAAczF,CAAd,GACI,CADJ,GACG,CAAA,IAArB,CAAA;EAGA,UAFIF,CAAC,CAACpE,IAAFoE,IACA2F,CAAa,EADb3F,EAEA,YAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,iBAAM,CAAN;EACJ,UAAM9D,CAAM,GAAO0J,KAAP,CAAZ,CAAY,CAAZ;EAhBsC,UAiBlCC,CAAG,GAAGF,CAAa,GAjBe,CAAA;EAAA,UAkBlCxJ,CAAK,GAlB6B,CAAA;EAAA,UAmBlC2J,CAAa,GAnBqB,CAAA;;EAoBtC,WAAK,IAAIrJ,GAAC,GAAV,CAAA,EAAgBA,GAAC,GAAGV,CAAM,GAA1B,CAAA,EAAgCU,GAAhC,EAAA,EAAqC;EAAA,YAC3BsJ,GAAQ,GAAG/F,CAAC,CAADA,OAAAA,CADgB,GAChBA,CADgB;EAAA,YAE3B3B,GAAO,GAAG,CAAClC,CAAK,GAAI4J,GAAQ,IAAlB,CAAA,IAFiB,CAAA;;EAGjC7J,QAAAA,CAAM,CAAC2J,CAAP3J,EAAM,CAANA,GAAgBJ,IAAI,CAAJA,kBAAAA,CAHiB,GAGjBA,CAAhBI;;EACA,YAAM8J,GAAY,GAAGvB,CAAW,GAAhC,CAAA;;EAJiC,aAKjCtI,CAAK,GAAG4J,GAAQ,KALiB,GAKjC5J,EACA2J,CAAa,GAAG,KANiB,GAAA,EAO1BA,CAAa,IAPa,CAAA;EAQ7B5J,UAAAA,CAAM,CAAC2J,CAAP3J,EAAM,CAANA,GAAgBJ,IAAI,CAAJA,kBAAAA,CAAwBK,CAAK,GARhB,CAQbL,CAAhBI,EACAC,CAAK,MATwB,CAQ7BD,EAEA4J,CAAa,IAAIrB,CAFjBvI;EAR6B;EAarC;;EAAA,UAAMmC,CAAO,GAAG,CAAClC,CAAK,GAAI+E,CAAG,IAAb,CAAA,IAAhB,CAAA;;EAjCsC,WAkCtChF,CAAM,CAAC2J,CAAP3J,EAAM,CAANA,GAAgBJ,IAAI,CAAJA,kBAAAA,CAlCsB,CAkCtBA,CAAhBI,EACAC,CAAK,GAAG+E,CAAG,KAAMuD,CAAW,GAnCU,CAAA,EAoC/B,MApC+B,CAAA;EAqClCvI,QAAAA,CAAM,CAAC2J,CAAP3J,EAAM,CAANA,GAAgBJ,IAAI,CAAJA,kBAAAA,CAAwBK,CAAK,GArCX,CAqClBL,CAAhBI,EACAC,CAAK,MAtC6B,CAqClCD;EArCkC;;EA0CtC,UAFI8D,CAAC,CAACpE,IAAFoE,KACA9D,CAAM,CAAC2J,CAAP3J,EAAM,CAANA,GAAgB,GADhB8D,GAEQ,CAAR,CAAQ,IAAZ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EACJ,aAAO9D,CAAM,CAANA,IAAAA,CAAAA,EAAAA,CAAP;EAEG+J;;;aAAAA,2BAAiB,CAAjBA,EAAiB,CAAjBA,EAAiB,CAAjBA,EAA6C;EAChD,UAAMlK,CAAM,GAAGiE,CAAC,CAAhB,MAAA;EACA,UAAI,MAAJ,CAAA,EACI,OAAA,EAAA;;EACJ,UAAI,MAAJ,CAAA,EAAkB;EACd,YAAI9D,GAAM,GAAG8D,CAAC,CAADA,eAAAA,CAAAA,CAAAA,EAAAA,QAAAA,CAAb,CAAaA,CAAb;;EAIA,eAHI,CAAA,CAAA,KAAA,CAAA,IAA6BA,CAAC,CAACpE,IAA/B,KACAM,GAAM,GAAG,MAAMA,GADf,GAGGA,GAAP;EAT4C;;EAAA,UAW1CgK,CAAS,GAAG,KAAA,CAAA,GAAcpK,IAAI,CAAJA,OAAAA,CAAakE,CAAC,CAADA,OAAAA,CAAUjE,CAAM,GAXb,CAWHiE,CAAblE,CAXgB;EAAA,UAY1CqK,CAAc,GAAGrK,IAAI,CAAJA,iBAAAA,CAZyB,CAYzBA,CAZyB;EAAA,UAa1CsK,CAAc,GAAGD,CAAc,GAbW,CAAA;;EAchD,UAAIR,CAAa,GAAGO,CAAS,GAAGpK,IAAI,CAApC,6BAAA;EACA6J,MAAAA,CAAa,IAAIS,CAAc,GAfiB,CAehDT,EACAA,CAAa,GAAG,IAACA,CAAa,GAhBkB,CAehDA;EAfgD,UAiB1CU,CAAe,GAAIV,CAAa,GAAd,CAACA,IAjBuB,CAAA;EAAA,UAoB1CW,CAAS,GAAGxK,IAAI,CAAJA,YAAAA,CAAkBA,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,EAAAA,CAAlBA,CAAkBA,CAAlBA,EAAiDA,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,EAAAA,CApBnB,CAoBmBA,CAAjDA,CApB8B;EAAA,UAAA,CAAA,EAAA,CAAA;;EAuBhD,UAAM0F,CAAO,GAAG8E,CAAS,CAATA,eAAAA,CAAhB,CAAgBA,CAAhB;;EACA,UAAI,MAAA,CAAS,CAAT,MAAA,IAA0B,SAA9B,CAAA,EAAiD;EAC7C7E,QAAAA,CAAQ,GAAG,IAAA,IAAA,CAASzB,CAAC,CAAV,MAAA,EAAA,CADkC,CAClC,CAAXyB,EACAA,CAAQ,CAFqC,kBAE7CA,EADAA;EAEA,YAAIC,GAAS,GAAb,CAAA;;EACA,aAAK,IAAIjF,GAAC,GAAG,IAAA,CAAC,CAAD,MAAA,GAAb,CAAA,EAA+B,KAA/B,GAAA,EAAuCA,GAAvC,EAAA,EAA4C;EACxC,cAAM8J,GAAK,GAAI7E,GAAS,IAAV,EAACA,GAAmB1B,CAAC,CAADA,WAAAA,CAAlC,GAAkCA,CAAlC;;EACAyB,UAAAA,CAAQ,CAARA,cAAAA,CAAAA,GAAAA,EAA2B,IAAC8E,GAAK,GAFO,CAExC9E,GACAC,GAAS,GAAG,IAAC6E,GAAK,GAAG/E,CADrBC;EAGJ+E;;EAAAA,QAAAA,CAAU,GAAG9E,GAAS,CAATA,QAAAA,CAAAA,CAAAA,CAAb8E;EATJ,OAAA,MAWK;EACD,YAAMC,GAAc,GAAG3K,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAvB,CAAuBA,CAAvB;;EACA2F,QAAAA,CAAQ,GAAGgF,GAAc,CAFxB,QAEDhF;;EACA,YAAMC,GAAS,GAAG+E,GAAc,CAAdA,SAAAA,CAAlB,MAAkBA,EAAlB;;EACAD,QAAAA,CAAU,GAAG1K,IAAI,CAAJA,iBAAAA,CAAAA,GAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAb0K;EAEJ/E;;EAAAA,MAAAA,CAAQ,CAzCwC,MAyChDA;;EACA,UAAIiF,CAAS,GAAG5K,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAhB,CAAgBA,CAAhB;;EA1CgD,aA2CzC0K,CAAU,CAAVA,MAAAA,GA3CyC,CAAA;EA4C5CA,QAAAA,CAAU,GAAG,MAAbA,CAAAA;EA5C4C;;EAiDhD,aAHI,CAAA,CAAA,KAAA,CAAA,IAA6BxG,CAAC,CAACpE,IAA/B,KACA8K,CAAS,GAAG,MAAMA,CADlB,GAGGA,CAAS,GAAGF,CAAnB;EAEGG;;;aAAAA,uBAAa,CAAbA,EAA4B;EAC/B,aAAOC,CAAY,GAAG,CAAH,CAAA,GAAQ,CAA3B;EAEGC;;;aAAAA,2BAAiB,CAAjBA,EAAgC;EACnC,aAAOC,CAAY,GAAG,CAAH,CAAA,GAAQ,CAA3B;EAEGC;;;aAAAA,wBAAc,CAAdA,EAA6B;EAChC,aAAOD,CAAY,GAAA,CAAA,GAAO,CAAC,CAA3B;EAEGE;;;aAAAA,2BAAiB,CAAjBA,EAAiB,CAAjBA,EAAwB;EAC3B,UAAMC,CAAK,GAAGjH,CAAC,CAAf,IAAA;EACA,UAAIiH,CAAK,KAAKlG,CAAC,CAAf,IAAA,EACI,OAAOjF,IAAI,CAAJA,aAAAA,CAAP,CAAOA,CAAP;;EACJ,UAAMI,CAAM,GAAGJ,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAAf,CAAeA,CAAf;;EAJ2B,aAKvB,IALuB,CAKvB,GACOA,IAAI,CAAJA,iBAAAA,CANgB,CAMhBA,CADP,GAEA,IAPuB,CAOvB,GACOA,IAAI,CAAJA,cAAAA,CARgB,CAQhBA,CADP,GAEG,CAToB;EAWxBoL;;;aAAAA,2BAAiB,CAAjBA,EAAiB,CAAjBA,EAAwB;EAC3B,UAAIpL,IAAI,CAAJA,eAAAA,CAAJ,CAAIA,CAAJ,EAA6B;EAAA,YACnBmL,CAAK,GAAGjH,CAAC,CADU,IAAA;EAAA,YAEnBmH,CAAK,GAAI,IAFU,CAAA;EAGzB,YAAIF,CAAK,KAAT,CAAA,EACI,OAAOnL,IAAI,CAAJA,aAAAA,CAAP,CAAOA,CAAP;;EACJ,YAAI,MAAA,CAAC,CAAL,MAAA,EAAoB;EAChB,cAAA,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EACJ,iBAAO,MAAA,CAAA,GAAC,CAAD,GAAc,CAAC,CAAtB;EAGJ;;EAAA,YAAI,IAAA,CAAC,CAAL,MAAA,EACI,OAAOA,IAAI,CAAJA,iBAAAA,CAAP,CAAOA,CAAP;;EAZqB,YAanBsL,CAAI,GAAGzH,IAAI,CAAJA,GAAAA,CAbY,CAaZA,CAbY;EAAA,YAcnB0H,CAAM,GAAGrH,CAAC,CAADA,eAAAA,CAdU,CAcVA,CAdU;;EAAA,eAerBqH,CAAM,GAfe,CAerBA,GACOvL,IAAI,CAAJA,iBAAAA,CAhBc,CAgBdA,CADPuL,GAEAA,CAAM,GAjBe,CAiBrBA,GACOvL,IAAI,CAAJA,cAAAA,CAlBc,CAkBdA,CADPuL,GAEG,CAnBkB;EAqB7B;;EAAA,aAAOvL,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAP;EAEGwL;;;aAAAA,2BAAiB,CAAjBA,EAAiB,CAAjBA,EAAwB;EAC3B,UAAIvG,CAAC,KAAL,CAAA,EACI,OAAA,CAAA;EACJ,UAAIA,CAAC,KAAA,IAAL,CAAA,EACI,OAAO,CAAP,CAAA;EACJ,UAAIA,CAAC,KAAK,CAAV,QAAA,EACI,OAAA,CAAA;EANuB,UAOrBkG,CAAK,GAAGjH,CAAC,CAPY,IAAA;EAS3B,UAAIiH,CAAK,KADM,IAAA,CACf,EACI,OAAOnL,IAAI,CAAJA,aAAAA,CAAP,CAAOA,CAAP;EACJ,UAAI,MAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,iDAAM,CAAN;EAEJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAO,CAAP,CAAA;EACJA,MAAAA,IAAI,CAAJA,sBAAAA,CAAAA,CAAAA,IAhB2B,CAgB3BA;EACA,UAAMgI,CAAW,GAAG,OAAChI,IAAI,CAAJA,oBAAAA,CAAAA,CAAAA,MAArB,EAAA;EACA,UAAI,QAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,uCAAM,CAAN;EAEJ,UAAMsE,CAAQ,GAAG0D,CAAW,GAA5B,IAAA;EACA,UAAI,IAAJ,CAAA,EAGI,OAAOhI,IAAI,CAAJA,iBAAAA,CAAP,CAAOA,CAAP;EAEJ,UAAMiE,CAAO,GAAGC,CAAC,CAAjB,MAAA;;EACA,UAAIC,CAAI,GAAGD,CAAC,CAADA,OAAAA,CAAUD,CAAO,GAA5B,CAAWC,CAAX;;EA5B2B,UA6BrBE,CAAe,GAAGpE,IAAI,CAAJA,OAAAA,CA7BG,CA6BHA,CA7BG;EAAA,UA8BrBqE,CAAU,GAAG,KAAA,CAAA,GA9BQ,CAAA;EAAA,UA+BrBoH,CAAU,GAAGnH,CAAQ,GA/BA,CAAA;;EAgC3B,UAAID,CAAU,GAAd,CAAA,EACI,OAAOrE,IAAI,CAAJA,cAAAA,CAAP,CAAOA,CAAP;EACJ,UAAIqE,CAAU,GAAd,CAAA,EACI,OAAOrE,IAAI,CAAJA,iBAAAA,CAAP,CAAOA,CAAP;EAnCuB,UAuCvBwE,CAAY,GAAG,UAAC,UAAA,IAAI,CAAJ,oBAAA,CAvCO,CAuCP,CAvCO;EAAA,UAwCvBE,CAAW,GAAG1E,IAAI,CAAJA,oBAAAA,CAxCS,CAwCTA,CAxCS;EAAA,UAyCrBkI,CAAmB,GAzCE,EAAA;EAAA,UA0CrBC,CAAS,GAAG,KA1CS,CAAA;EA2C3B,UAAIA,CAAS,MAAM,IAAC,CAAC9D,CAAU,GAAX,CAAA,IAApB,EAAa,CAAb,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EA5CuB,UAAA,CAAA;EAAA,UA+CvB+D,CAAqB,GA/CE,CAAA;;EAiD3B,UAAI,KAAJ,CAAA,EAAqC;EACjC,YAAMtF,IAAK,GAAGoF,CAAmB,GAAjC,CAAA;;EACAE,QAAAA,CAAqB,GAAGtF,IAAK,GAFI,EAEjCsF,EACAsD,CAAe,GAAGlH,CAAY,KAHG,IAEjC4D,EAEA5D,CAAY,GAAIA,CAAY,IAAK,KAAlB,IAACA,GAAiCE,CAAW,KAJ3B,IAEjC0D,EAGA1D,CALiC,KAKH,KAAK5B,IAHnCsF;EAFJ,OAAA,MAOK,IAAI,OAAJ,CAAA,EACDA,CAAqB,GADpB,EACDA,EACAsD,CAAe,GAFd,CACDtD,EAEA5D,CAAY,GAHX,CACD4D,EAGA1D,CAAW,GAJV,CACD0D,CADC,KAMA;EACD,YAAMtF,IAAK,GAAGqF,CAAS,GAAvB,CAAA;;EACAC,QAAAA,CAAqB,GAAG,KAFvB,IAEDA,EACAsD,CAAe,GACVlH,CAAY,IAAb,IAACA,GAA0BE,CAAW,KAAM,KAJ/C,IAED0D,EAGA5D,CAAY,GAAGE,CAAW,IALzB,IAED0D,EAIA1D,CAAW,GAAG,CAJd0D;EAQJ;;EAAA,UAFAjE,CAEA,MAFgB,CAAhBA,EACAuH,CACA,MADsC,CADtCvH,EAEIA,CAAI,GAAR,CAAA,EACI,OAAOnE,IAAI,CAAJA,iBAAAA,CAAP,CAAOA,CAAP;EACJ,UAAImE,CAAI,GAAR,CAAA,EACI,OAAOnE,IAAI,CAAJA,cAAAA,CAAP,CAAOA,CAAP;;EAEJ,WAAK,IAAIwD,GAAU,GAAGS,CAAO,GAA7B,CAAA,EAAmC,KAAnC,GAAA,EAAoDT,GAApD,EAAA,EAAkE;EAC1D,YAD0D,CAC1D,IACA4E,CAAqB,IAFqC,EAE1DA,EACAsD,CAAe,GAAGlH,CAAY,KAH4B,CAE1D4D,EAEA5D,CAAY,GAAIA,CAAY,IAAb,EAACA,GAAuBE,CAAW,KAJQ,CAE1D0D,EAGA1D,CAL0D,KAAA,EAC1D,IAOAgH,CAAe,GAR2C,CAC1D;;EASJ,YAAMrL,GAAK,GAAG6D,CAAC,CAADA,eAAAA,CAAd,GAAcA,CAAd;;EACA,YAAI7D,GAAK,GAAT,CAAA,EACI,OAAOL,IAAI,CAAJA,iBAAAA,CAAP,CAAOA,CAAP;EACJ,YAAIK,GAAK,GAAT,CAAA,EACI,OAAOL,IAAI,CAAJA,cAAAA,CAAAA,CAAAA,CAAP;EAGR;;EAAA,UAAI,MAAA,CAAA,IAAsB,MAA1B,CAAA,EAA6C;EACzC,YAAI,MAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EACJ,eAAOA,IAAI,CAAJA,cAAAA,CAAAA,CAAAA,CAAP;EAEJ;;EAAA,aAAO,CAAP;EAEG2L;;;aAAAA,yBAAe,CAAfA,EAAe,CAAfA,EAAsB;EAAA,UAAA,CAAA,GAMS9H,IAAI,CANb,GAAA;EAAA,aACrB7D,IAAI,CAAJA,eAAAA,CADqB,CACrBA,IACI,MAFiB,CAEjB,GACO,MAAA,CAAC,CAHS,MAEjB,GAGI,MAAA,CAAC,CAAF,MAAC,IAAoBkE,CAAC,CAADA,IAAAA,KAAY,IAAjC,CAAC,IACHA,CAAC,CAADA,eAAAA,CAAAA,CAAAA,MAAyBL,CAAAA,CANT,CAMSA,CAL9B7D,GAOG,MAAA,IAAI,CAAJ,iBAAA,CAAA,CAAA,EAAA,CAAA,CARkB;EAetB4L;;;aAAAA,kCAAwB,CAAxBA,EAAwB,CAAxBA,EAAqC;EAAA,aAAA,MAAA,CAAA,GAErB,IAFqB,CAAA,GAAA,MAAA,CAAA,GAGrB,KAHqB,CAAA,GAAA,MAAA,CAAA,GAIrB,IAJqB,CAAA,GAAA,MAAA,CAAA,GAKrB,KALqB,CAAA,GAAA,KAAA,CAAA;EAQrCC;;;aAAAA,mBAAS,CAATA,EAAS,CAATA,EAAS,CAATA,EAAoB;EAGvB,UAFA3H,CAAC,GAAGlE,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CAAJkE,EACAe,CAAC,GAAGjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,CADJkE,EAEI,YAAA,OAAA,CAAA,IAAyB,YAAA,OAA7B,CAAA,EACI,QAAA,CAAA;EACI,aAAA,CAAA;EAAQ,iBAAOA,CAAC,GAAR,CAAA;;EACR,aAAA,CAAA;EAAQ,iBAAOA,CAAC,IAAR,CAAA;;EACR,aAAA,CAAA;EAAQ,iBAAOA,CAAC,GAAR,CAAA;;EACR,aAAA,CAAA;EAAQ,iBAAOA,CAAC,IAJpB,CAIY;EAJZ;EAOJ,UAAIlE,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,KAAsB,YAAA,OAA1B,CAAA,EAAA,OACIiF,CAAC,GAAGjF,IAAI,CAAJA,YAAAA,CADR,CACQA,CAAJiF,EACI,SAFR,CAEQ,IAEGjF,IAAI,CAAJA,wBAAAA,CAA8BA,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAA9BA,CAA8BA,CAA9BA,EAJX,CAIWA,CAJX;EAMA,UAAI,YAAA,OAAA,CAAA,IAAyBA,IAAI,CAAJA,UAAAA,CAA7B,CAA6BA,CAA7B,EAAA,OACIkE,CAAC,GAAGlE,IAAI,CAAJA,YAAAA,CADR,CACQA,CAAJkE,EACI,SAFR,CAEQ,IAEGlE,IAAI,CAAJA,wBAAAA,CAA8BA,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAA9BA,CAA8BA,CAA9BA,EAJX,CAIWA,CAJX;;EAQA,UAFAkE,CAAC,GAAGlE,IAAI,CAAJA,WAAAA,CAAAA,CAAAA,CAAJkE,EACAe,CAAC,GAAGjF,IAAI,CAAJA,WAAAA,CAAAA,CAAAA,CADJkE,EAEIlE,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EAAwB;EACpB,YAAIA,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EACI,OAAOA,IAAI,CAAJA,wBAAAA,CAA8BA,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAA9BA,CAA8BA,CAA9BA,EAAP,CAAOA,CAAP;EAEJ,YAAI,YAAA,OAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EACJ,eAAOA,IAAI,CAAJA,wBAAAA,CAA8BA,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAA9BA,CAA8BA,CAA9BA,EAAAA,CAAAA,CAAP;EAEJ;;EAAA,UAAI,YAAA,OAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EACJ,UAAIA,IAAI,CAAJA,UAAAA,CAAJ,CAAIA,CAAJ,EAEI,OAAOA,IAAI,CAAJA,wBAAAA,CAA8BA,IAAI,CAAJA,iBAAAA,CAAAA,CAAAA,EAA9BA,CAA8BA,CAA9BA,EAA6D,IAApE,CAAOA,CAAP;EAEJ,UAAI,YAAA,OAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;EAxCmB,aAAA,MAAA,CAAA,GA0CJkE,CAAC,GA1CG,CAAA,GAAA,MAAA,CAAA,GA2CJA,CAAC,IA3CG,CAAA,GAAA,MAAA,CAAA,GA4CJA,CAAC,GA5CG,CAAA,GAAA,MAAA,CAAA,GA6CJA,CAAC,IA7CG,CAAA,GAAA,KAAA,CAAA;EAgD3BjD;;;aAGOC,uBAAa,CAAbA,EAAa,CAAbA,EAAa,CAAbA,EAAgC;EACnC,UAAIgD,CAAC,CAADA,MAAAA,GAAWe,CAAC,CAAhB,MAAA,EACI,OAAOjF,IAAI,CAAJA,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAP,CAAOA,CAAP;EACJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EACJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAOkE,CAAC,CAADA,IAAAA,KAAAA,CAAAA,GAAAA,CAAAA,GAA4BlE,IAAI,CAAJA,UAAAA,CAAnC,CAAmCA,CAAnC;EACJ,UAAIuF,CAAY,GAAGrB,CAAC,CAApB,MAAA;EAPmC,OAQ/B,MAAA,CAAC,CAAD,QAAA,EAAA,IAAuBe,CAAC,CAADA,MAAAA,KAAaf,CAAC,CAAde,MAAAA,IAAyB,MAAA,CAAC,CARlB,QAQiB,EARjB,KAS/BM,CAT+B,EAAA;EAWnC,UAAMnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAf,CAAe,CAAf;EAXmC,UAY/BmB,CAAK,GAZ0B,CAAA;EAAA,UAa/BZ,CAAC,GAb8B,CAAA;;EAcnC,aAAOA,CAAC,GAAGsE,CAAC,CAAZ,MAAA,EAAqBtE,CAArB,EAAA,EAA0B;EACtB,YAAMmL,CAAC,GAAG5H,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAee,CAAC,CAADA,OAAAA,CAAff,CAAee,CAAff,GAAV,CAAA;EACA3C,QAAAA,CAAK,GAAGuK,CAAC,KAFa,EAEtBvK,EACAnB,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,CAAAA,CADAmB;EAGJ;;EAAA,aAAOZ,CAAC,GAAGuD,CAAC,CAAZ,MAAA,EAAqBvD,CAArB,EAAA,EAA0B;EACtB,YAAMmL,IAAC,GAAG5H,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAV,CAAA;;EACA3C,QAAAA,CAAK,GAAGuK,IAAC,KAFa,EAEtBvK,EACAnB,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,IAAAA,CADAmB;EAGAZ;;EAAAA,aAAAA,CAAC,GAAGP,CAAM,CAACH,MAAXU,IACAP,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CADAO,EAGGP,CAAM,CAANA,MAAAA,EAHHO;EAKDoL;;;aAAAA,uBAAa,CAAbA,EAAa,CAAbA,EAAa,CAAbA,EAAgC;EACnC,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAA,CAAA;EACJ,UAAI,MAAA,CAAC,CAAL,MAAA,EACI,OAAO7H,CAAC,CAADA,IAAAA,KAAAA,CAAAA,GAAAA,CAAAA,GAA4BlE,IAAI,CAAJA,UAAAA,CAAnC,CAAmCA,CAAnC;EACJ,UAAMI,CAAM,GAAG,IAAA,IAAA,CAAS8D,CAAC,CAAV,MAAA,EAAf,CAAe,CAAf;EALmC,UAM/B5B,CAAM,GANyB,CAAA;EAAA,UAO/B3B,CAAC,GAP8B,CAAA;;EAQnC,aAAOA,CAAC,GAAGsE,CAAC,CAAZ,MAAA,EAAqBtE,CAArB,EAAA,EAA0B;EACtB,YAAMmL,CAAC,GAAG5H,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAee,CAAC,CAADA,OAAAA,CAAff,CAAee,CAAff,GAAV,CAAA;EACA5B,QAAAA,CAAM,GAAG,IAACwJ,CAAC,KAFW,EAEtBxJ,EACAlC,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,CAAAA,CADAkC;EAGJ;;EAAA,aAAO3B,CAAC,GAAGuD,CAAC,CAAZ,MAAA,EAAqBvD,CAArB,EAAA,EAA0B;EACtB,YAAMmL,IAAC,GAAG5H,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAV,CAAA;;EACA5B,QAAAA,CAAM,GAAG,IAACwJ,IAAC,KAFW,EAEtBxJ,EACAlC,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,IAAAA,CADAkC;EAGJ;;EAAA,aAAOlC,CAAM,CAANA,MAAAA,EAAP;EAEG4L;;;aAAAA,0BAAgB,CAAhBA,EAAgB,CAAhBA,EAAyC;EAAA,UAAf5L,CAAe,uEAAzB,IAAyB;EAC5C,UAAM6L,CAAW,GAAG/H,CAAC,CAArB,MAAA;EACI,eAFwC,CAExC,GACA9D,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAH+B,CAG/B,CADT,GAIAA,CAAM,CAANA,IAAAA,GANwC,CAExC;EAMJ,UAAImB,CAAK,GAAT,CAAA;;EACA,WAAK,IAAIZ,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAAiCA,CAAjC,EAAA,EAAsC;EAClC,YAAMmL,IAAC,GAAG5H,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAV,CAAA;;EACA3C,QAAAA,CAAK,GAAGuK,IAAC,KAFyB,EAElCvK,EACAnB,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,IAAAA,CADAmB;EAGU;;EAAA,aAAV,KAAA,CAAA,IACAnB,CAAM,CAANA,cAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CADA,EAGGA,CAHO;EAKX8L;;;aAAAA,0BAAgB,CAAhBA,EAAgB,CAAhBA,EAAkC;EACrC,UAAMjM,CAAM,GAAGiE,CAAC,CAAhB,MAAA;EACAqB,MAAAA,CAAY,GAAGA,CAAY,IAFU,CAErCA;EACA,UAAMnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAA,CAAf,CAAe,CAAf;EACA,UAAIkC,CAAM,GAAV,CAAA;;EACA,WAAK,IAAI3B,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAA4BA,CAA5B,EAAA,EAAiC;EAC7B,YAAMmL,CAAC,GAAG5H,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAV,CAAA;EACA5B,QAAAA,CAAM,GAAG,IAACwJ,CAAC,KAFkB,EAE7BxJ,EACAlC,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,CAAAA,CADAkC;EAGJ;;EAAA,UAAI,KAAJ,CAAA,EACI,MAAM,IAAA,KAAA,CAAN,oBAAM,CAAN;;EACJ,WAAK,IAAI3B,GAAC,GAAV,CAAA,EAAqBA,GAAC,GAAtB,CAAA,EAAuCA,GAAvC,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,GAAAA,EAAAA,CAAAA;EADJ;;EAGA,aAAOA,CAAP;EAEG+L;;;aAAAA,uBAAa,CAAbA,EAAa,CAAbA,EAAmC;EAAA,UAAf/L,CAAe,uEAAtB,IAAsB;EAAA,UAClC6D,CAAO,GAAGC,CAAC,CADuB,MAAA;EAAA,UAElCkI,CAAO,GAAGnH,CAAC,CAFuB,MAAA;EAAA,UAGlCoH,CAAQ,GAH0B,CAAA;;EAItC,UAAIpI,CAAO,GAAX,CAAA,EAAuB;EACnBoI,QAAAA,CAAQ,GADW,CACnBA;EADmB,YAEbC,CAAG,GAFU,CAAA;EAAA,YAGbC,IAAS,GAHI,CAAA;EAInBrI,QAAAA,CAAC,GAJkB,CAInBA,EACAD,CAAO,GALY,CAInBC,EAEAe,CAAC,GANkB,CAInBf,EAGAkI,CAAO,GAAGG,IAHVrI;EAKJ;;EAAA,UAAIqB,CAAY,GAAhB,CAAA;EACI,eAdkC,CAclC,GACAnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAA,CAfyB,CAezB,CADT,GAIAmF,CAAY,GAAGnF,CAAM,CAlBa,MAclC;EAMJ,UAAIO,CAAC,GAAL,CAAA;;EACA,aAAOA,CAAC,GAAR,CAAA,EAAqBA,CAArB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAee,CAAC,CAADA,OAAAA,CAApC7E,CAAoC6E,CAApC7E;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAyBA,CAAzB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;EADJ;;EAGA,aAAOA,CAAP;EAEGoM;;;aAAAA,0BAAgB,CAAhBA,EAAgB,CAAhBA,EAAsC;EAAA,UAAfpM,CAAe,uEAAtB,IAAsB;EAAA,UACnC6D,CAAO,GAAGC,CAAC,CADwB,MAAA;EAAA,UAEnCkI,CAAO,GAAGnH,CAAC,CAFwB,MAAA;EAGzC,UAAIoH,CAAQ,GAAZ,CAAA;EACIpI,MAAAA,CAAO,GAJ8B,CAIrCA,KACAoI,CAAQ,GAL6B,CAIrCpI;EAGJ,UAAIsB,CAAY,GAAhB,CAAA;EACI,eARqC,CAQrC,GACAnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAA,CAT4B,CAS5B,CADT,GAIAmF,CAAY,GAAGnF,CAAM,CAZgB,MAQrC;EAMJ,UAAIO,CAAC,GAAL,CAAA;;EACA,aAAOA,CAAC,GAAR,CAAA,EAAqBA,CAArB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAe,CAACe,CAAC,CAADA,OAAAA,CAArC7E,CAAqC6E,CAArC7E;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAoBA,CAApB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAArB9D,CAAqB8D,CAArB9D;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAyBA,CAAzB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;EADJ;;EAGA,aAAOA,CAAP;EAEGqM;;;aAAAA,sBAAY,CAAZA,EAAY,CAAZA,EAAkC;EAAA,UAAfrM,CAAe,uEAAtB,IAAsB;EAAA,UACjC6D,CAAO,GAAGC,CAAC,CADsB,MAAA;EAAA,UAEjCkI,CAAO,GAAGnH,CAAC,CAFsB,MAAA;EAAA,UAGjCoH,CAAQ,GAHyB,CAAA;;EAIrC,UAAIpI,CAAO,GAAX,CAAA,EAAuB;EACnBoI,QAAAA,CAAQ,GADW,CACnBA;EADmB,YAEbC,CAAG,GAFU,CAAA;EAAA,YAGbC,IAAS,GAHI,CAAA;EAInBrI,QAAAA,CAAC,GAJkB,CAInBA,EACAD,CAAO,GALY,CAInBC,EAEAe,CAAC,GANkB,CAInBf,EAGAkI,CAAO,GAAGG,IAHVrI;EAKJ;;EAAA,UAAIqB,CAAY,GAAhB,CAAA;EACI,eAdiC,CAcjC,GACAnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAA,CAfwB,CAexB,CADT,GAIAmF,CAAY,GAAGnF,CAAM,CAlBY,MAcjC;EAMJ,UAAIO,CAAC,GAAL,CAAA;;EACA,aAAOA,CAAC,GAAR,CAAA,EAAqBA,CAArB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAee,CAAC,CAADA,OAAAA,CAApC7E,CAAoC6E,CAApC7E;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAoBA,CAApB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAArB9D,CAAqB8D,CAArB9D;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAyBA,CAAzB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;EADJ;;EAGA,aAAOA,CAAP;EAEGsM;;;aAAAA,uBAAa,CAAbA,EAAa,CAAbA,EAAmC;EAAA,UAAftM,CAAe,uEAAtB,IAAsB;EAAA,UAClC6D,CAAO,GAAGC,CAAC,CADuB,MAAA;EAAA,UAElCkI,CAAO,GAAGnH,CAAC,CAFuB,MAAA;EAAA,UAGlCoH,CAAQ,GAH0B,CAAA;;EAItC,UAAIpI,CAAO,GAAX,CAAA,EAAuB;EACnBoI,QAAAA,CAAQ,GADW,CACnBA;EADmB,YAEbC,CAAG,GAFU,CAAA;EAAA,YAGbC,IAAS,GAHI,CAAA;EAInBrI,QAAAA,CAAC,GAJkB,CAInBA,EACAD,CAAO,GALY,CAInBC,EAEAe,CAAC,GANkB,CAInBf,EAGAkI,CAAO,GAAGG,IAHVrI;EAKJ;;EAAA,UAAIqB,CAAY,GAAhB,CAAA;EACI,eAdkC,CAclC,GACAnF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAA,CAfyB,CAezB,CADT,GAIAmF,CAAY,GAAGnF,CAAM,CAlBa,MAclC;EAMJ,UAAIO,CAAC,GAAL,CAAA;;EACA,aAAOA,CAAC,GAAR,CAAA,EAAqBA,CAArB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IAAee,CAAC,CAADA,OAAAA,CAApC7E,CAAoC6E,CAApC7E;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAoBA,CAApB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAArB9D,CAAqB8D,CAArB9D;EADJ;;EAGA,aAAOO,CAAC,GAAR,CAAA,EAAyBA,CAAzB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;EADJ;;EAGA,aAAOA,CAAP;EAEGuM;;;aAAAA,2BAAiB,CAAjBA,EAAiB,CAAjBA,EAAwB;EAC3B,UAAMC,CAAI,GAAG1I,CAAC,CAADA,MAAAA,GAAWe,CAAC,CAAzB,MAAA;EACA,UAAI,KAAJ,CAAA,EACI,OAAA,CAAA;EACJ,UAAItE,CAAC,GAAGuD,CAAC,CAADA,MAAAA,GAAR,CAAA;;EAJ2B,aAKpB,KAAA,CAAA,IAAUA,CAAC,CAADA,OAAAA,CAAAA,CAAAA,MAAiBe,CAAC,CAADA,OAAAA,CALP,CAKOA,CALP;EAMvBtE,QAAAA,CAAC;EANsB;;EAAA,aAOvB,IAPuB,CAOvB,GAPuB,CAOvB,GAEGuD,CAAC,CAADA,eAAAA,CAAAA,CAAAA,IAAuBe,CAAC,CAADA,eAAAA,CAAvBf,CAAuBe,CAAvBf,GAAAA,CAAAA,GAAkD,CAAC,CAT/B;EAWxB2I;;;aAAAA,8BAAoB,CAApBA,EAAoB,CAApBA,EAAoB,CAApBA,EAAoB,CAApBA,EAA8E;EACjF,UAAI,MAAJ,CAAA,EACI;EAF6E,UAG3EC,CAAK,GAAG,QAHmE,CAAA;EAAA,UAI3EC,CAAM,GAAGzL,CAAU,KAJwD,EAAA;EAAA,UAK7EC,CAAK,GALwE,CAAA;EAAA,UAM7EC,CAAI,GANyE,CAAA;;EAOjF,WAAK,IAAA,CAAA,EAAIb,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAGqM,CAAY,CAAhC,MAAA,EAAyCrM,CAAC,IAAIsM,CAA9C,EAAA,EAAkE;EAC1DC,QAAAA,CAD0D,GACpDC,CAAW,CAAXA,OAAAA,CADoD,CACpDA,CAAND;;EAD0D,YAExDE,CAAE,GAAGJ,CAAY,CAAZA,OAAAA,CAFmD,CAEnDA,CAFmD;EAAA,YAGxDK,GAAK,GAAG,QAHgD,CAAA;EAAA,YAIxDC,CAAM,GAAGF,CAAE,KAJ6C,EAAA;EAAA,YAKxDG,CAAI,GAAGvN,IAAI,CAAJA,MAAAA,CAAAA,GAAAA,EALiD,CAKjDA,CALiD;EAAA,YAMxDwN,CAAK,GAAGxN,IAAI,CAAJA,MAAAA,CAAAA,GAAAA,EANgD,CAMhDA,CANgD;EAAA,YAOxDyN,CAAK,GAAGzN,IAAI,CAAJA,MAAAA,CAAAA,CAAAA,EAPgD,CAOhDA,CAPgD;EAAA,YAQxD0N,CAAK,GAAG1N,IAAI,CAAJA,MAAAA,CAAAA,CAAAA,EARgD,CAQhDA,CARgD;;EAS9DkN,QAAAA,CAAG,IAAI1L,CAAI,GAAJA,CAAAA,GATuD,CAS9D0L,EACA3L,CAAK,GAAG2L,CAAG,KAVmD,EAS9DA,EAEAA,CAAG,IAX2D,UAS9DA,EAGAA,CAAG,IAAI,CAAC,CAAC,QAAD,CAAA,KAAD,EAAA,KAA4B,CAAC,QAAD,CAAA,KAZ2B,EAYvD,CAHPA,EAIA3L,CAAK,IAAI2L,CAAG,KAbkD,EAS9DA,EAKA1L,CAAI,GAAGkM,CAAK,IAAIF,CAAK,KAAdE,EAAK,CAALA,IAA0BD,CAAK,KAdwB,EAcvDC,CALPR,EAMAC,CAAW,CAAXA,UAAAA,CAAAA,CAAAA,EAAyC,aAAzCA,CAAAA,CANAD;EAQJ;;EAAA,aAAO,KAAA,CAAA,IAAe,MAAtB,CAAA,EAAkCD,CAAlC,EAAA,EAAsD;EAClD,YAAIC,IAAG,GAAGC,CAAW,CAAXA,OAAAA,CAAV,CAAUA,CAAV;;EACAD,QAAAA,IAAG,IAAI3L,CAAK,GAFsC,CAElD2L,EACA1L,CAAI,GAH8C,CAElD0L,EAEA3L,CAAK,GAAG2L,IAAG,KAJuC,EAElDA,EAGAC,CAAW,CAAXA,UAAAA,CAAAA,CAAAA,EAAyC,aAAzCA,IAAAA,CAHAD;EAKP;EACMS;;;aAAAA,+BAAqB,CAArBA,EAAqB,CAArBA,EAAqB,CAArBA,EAAqB,CAArBA,EAAqB,CAArBA,EAA0D;EAAA,UACzDpM,CAAK,GADoD,CAAA;EAAA,UAEzDC,CAAI,GAFqD,CAAA;;EAG7D,WAAK,IAAIb,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAAuBA,CAAvB,EAAA,EAA4B;EAAA,YAClBN,CAAK,GAAGuN,CAAM,CAANA,OAAAA,CADU,CACVA,CADU;EAAA,YAElBC,IAAE,GAAG7N,IAAI,CAAJA,MAAAA,CAAY,QAAZA,CAAAA,EAFa,CAEbA,CAFa;EAAA,YAGlB8N,GAAE,GAAG9N,IAAI,CAAJA,MAAAA,CAAYK,CAAK,KAAjBL,EAAAA,EAHa,CAGbA,CAHa;EAAA,YAIlB8L,CAAC,GAAG+B,IAAE,IAAI,CAAC,QAAD,GAAA,KAANA,EAAE,CAAFA,GAAAA,CAAAA,GAJc,CAAA;;EAKxBtM,QAAAA,CAAK,GAAGuK,CAAC,KALe,EAKxBvK,EACAC,CAAI,GAAGsM,GAAE,KANe,EAKxBvM,EAEAnB,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,CAAAA,CAFAmB;EAIJ;;EAAA,UAAInB,CAAM,CAANA,MAAAA,GAAJ,CAAA,EAAA,KACIA,CAAM,CAANA,UAAAA,CAAkB0G,CAAlB1G,EAAAA,EAAuBmB,CAAK,GADhC,CACInB,CADJ,EAEW0G,CAAC,GAAG1G,CAAM,CAFrB,MAAA;EAGQA,QAAAA,CAAM,CAANA,UAAAA,CAAkB0G,CAAlB1G,EAAAA,EAHR,CAGQA;EAHR,OAAA,MAOI,IAAI,MAAA,CAAK,GAAT,CAAA,EACI,MAAM,IAAA,KAAA,CAAA,oBAAA,CAAN;EAGZe;;;aA2BOa,4BAAkB,CAAlBA,EAAkB,CAAlBA,EAAgD;EAAA,UAAjB2D,CAAiB,uEAA9B,IAA8B;EAC/C,eAD+C,CAC/C,KACAA,CAAQ,GAAG,IAAA,IAAA,CAASzB,CAAC,CAAV,MAAA,EAAA,CAFoC,CAEpC,CADX;EAEJ,UAAI0B,CAAS,GAAb,CAAA;;EACA,WAAK,IAAA,CAAA,EAAIjF,CAAC,GAAG,IAAA,CAAC,CAAD,MAAA,GAAb,CAAA,EAA+B,KAA/B,CAAA,EAAuCA,CAAC,IAAxC,CAAA,EAA+C;EACvC8J,QAAAA,CADuC,GAC/B,CAAE7E,CAAS,IAAV,EAACA,GAAmB1B,CAAC,CAADA,WAAAA,CAArB,CAAqBA,CAArB,MAD+B,CACvCuG;EACJ,YAAMsD,CAAS,GAAG,IAACtD,CAAK,GAAxB,CAAA;EACA7E,QAAAA,CAAS,GAAG,IAAC6E,CAAK,GAHyB,CAG3C7E,EACA6E,CAAK,GAAG,CAAE7E,CAAS,IAAV,EAACA,GAAmB1B,CAAC,CAADA,WAAAA,CAAcvD,CAAC,GAApC,CAAqBuD,CAArB,MAJmC,CAG3C0B;EAEA,YAAMoI,CAAS,GAAG,IAACvD,CAAK,GAAxB,CAAA;EACA7E,QAAAA,CAAS,GAAG,IAAC6E,CAAK,GANyB,CAM3C7E,EACAD,CAAQ,CAARA,UAAAA,CAAoBhF,CAAC,KAArBgF,CAAAA,EAA8BoI,CAAS,IAAV,EAACA,GAA9BpI,CAAAA,CADAC;EAGJ;;EAAA,aAAOD,CAAP;EAEGsI;;;aAAAA,4BAAkB,CAAlBA,EAAkB,CAAlBA,EAA+B;EAClC,UAAIrI,CAAS,GAAb,CAAA;;EACA,WAAK,IAAIjF,CAAC,GAAG,IAAA,CAAC,CAAD,MAAA,GAAb,CAAA,EAA+B,KAA/B,CAAA,EAAuCA,CAAvC,EAAA,EAA4C;EACxC,YAAM8J,CAAK,GAAG,CAAE7E,CAAS,IAAV,EAACA,GAAmB1B,CAAC,CAADA,WAAAA,CAArB,CAAqBA,CAArB,MAAd,CAAA;EACA0B,QAAAA,CAAS,GAAG,IAAC6E,CAAK,GAAG/E,CAArBE;EAEJ;;EAAA,aAAOA,CAAP;EAEGsI;;;aAAAA,4BAAkB,CAAlBA,EAAkB,CAAlBA,EAAkB,CAAlBA,EAAkB,CAAlBA,EAAmE;EAAA,UAChEpH,CAAC,GAAGpB,CAAO,CADqD,iBAC5DA,EAD4D;EAAA,UAEhEyI,CAAE,GAAGzI,CAAO,CAFoD,MAAA;EAAA,UAGhE4D,CAAC,GAAG8E,CAAQ,CAARA,iBAAAA,KAH4D,CAAA;;EAItE,UAAIC,CAAC,GAAL,IAAA;EACIC,MAAAA,CALkE,KAMlED,CAAC,GAAG,IAAA,IAAA,CAAU/E,CAAC,GAAF,CAACA,KAAV,CAAA,EAAA,CAN8D,CAM9D,CAAJ+E,EACAA,CAAC,CAPiE,kBAOlEA,EAPkE,CAKlEC;EAIJ,UAAMC,CAAK,GAAG,IAAA,IAAA,CAAUzH,CAAC,GAAF,CAACA,KAAV,CAAA,EAAA,CAAd,CAAc,CAAd;;EACAyH,MAAAA,CAAK,CAViE,kBAUtEA;;EAEA,UAAMzL,CAAK,GAAG9C,IAAI,CAAJA,OAAAA,CAAa0F,CAAO,CAAPA,WAAAA,CAAoBoB,CAAC,GAAhD,CAA2BpB,CAAb1F,CAAd;;EACI,UAbkE,CAalE,KACA0F,CAAO,GAAG1F,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAdwD,CAcxDA,CADV;;EAbkE,UAgBhEwO,CAAC,GAAGxO,IAAI,CAAJA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAhB4D,CAgB5DA,CAhB4D;EAAA,UAkBhEyO,CAAG,GAAG/I,CAAO,CAAPA,WAAAA,CAAoBoB,CAAC,GAlBqC,CAkB1DpB,CAlB0D;;EAmBtE,UAAIgJ,CAAe,GAAnB,CAAA;;EACA,WAAK,IAAA,GAAA,EAAIC,CAAC,GAAV,CAAA,EAAgB,KAAhB,CAAA,EAAwBA,CAAxB,EAAA,EAA6B;EAErBC,QAAAA,GAFqB,GAAA,KAErBA;;EACJ,YAAMC,IAAG,GAAGL,CAAC,CAADA,WAAAA,CAAcG,CAAC,GAA3B,CAAYH,CAAZ;;EACA,YAAIK,IAAG,KAAP,CAAA,EAAiB;EACb,cAAMpE,GAAK,GAAG,CAAEoE,IAAG,IAAJ,EAACA,GAAaL,CAAC,CAADA,WAAAA,CAAcG,CAAC,GAADA,CAAAA,GAA7B,CAAeH,CAAf,MAAd,CAAA;;EACAI,UAAAA,GAAI,GAAG,IAACnE,GAAK,GAFA,CAEbmE;;EACA,cAAIE,IAAI,GAAG,IAACrE,GAAK,GAAjB,CAAA;;EAHa,cAIPsE,GAAG,GAAGrJ,CAAO,CAAPA,WAAAA,CAAoBoB,CAAC,GAJpB,CAIDpB,CAJC;EAAA,cAKPsJ,GAAI,GAAGR,CAAC,CAADA,WAAAA,CAAcG,CAAC,GAADA,CAAAA,GALd,CAKAH,CALA;;EAAA,iBAMLxO,IAAI,CAAJA,MAAAA,CAAAA,GAAAA,EAAAA,GAAAA,MAAD,CAACA,GAAiC,CAAE8O,IAAI,IAAL,EAACA,GAAF,GAAA,MAN5B,CAML9O,KACJ4O,GAPS,IAQTE,IAAI,IARK,CAAA,EAAA,EASL,QATK,IAAA,CAML9O,CANK;EAAA;EAcjBA;;EAAAA,QAAAA,IAAI,CAAJA,qBAAAA,CAAAA,CAAAA,EAAAA,GAAAA,EAAAA,CAAAA,EAAAA,CAAAA,EAlByB,CAkBzBA;;EACA,YAAIsI,IAAC,GAAGkG,CAAC,CAADA,YAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAyB1H,CAAC,GAAlC,CAAQ0H,CAAR;;EACI,cApBqB,IAoBrB,KACAlG,IAAC,GAAGkG,CAAC,CAADA,YAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EArBiB,CAqBjBA,CAAJlG,EACAkG,CAAC,CAADA,cAAAA,CAAiBG,CAAC,GAAlBH,CAAAA,EAAwB,QAACA,CAAC,CAADA,WAAAA,CAAcG,CAAC,GAAfH,CAAAA,IAtBJ,IAsBrBA,CADAlG,EAEAsG,GAvBqB,EAoBrB,GAKAN,CAzBqB,KA0BjB,IA1BiB,CA0BjB,GACAI,CAAe,GAAGE,GAAI,IA3BL,EA0BjB,GAKAP,CAAC,CAADA,UAAAA,CAAaM,CAAC,KAAdN,CAAAA,EAAsBK,CAAe,GA/BpB,GA+BjBL,CA/BiB,CAoBrB;EAeR;;EAAA,UAAA,CAAA,EAAA,OACIG,CAAC,CAADA,mBAAAA,CADJ,CACIA,GACIF,CAFR,GAGe;EAAE3I,QAAAA,QAAQ,EAAV,CAAA;EAAeC,QAAAA,SAAS,EAHvC;EAGe,OAHf,GAAA,CAAA;EAOA,UAAA,CAAA,EACI,OAAA,CAAA;EAEJ,YAAM,IAAA,KAAA,CAAA,aAAA,CAAN;EAEGqJ;;;aAAAA,iBAAO,CAAPA,EAAe;EAClB,aAAOjP,IAAI,CAAJA,OAAAA,CAAAA,CAAAA,IAAsB,EAA7B;EAGJiC;;;aAmFOc,4BAAkB,CAAlBA,EAAkB,CAAlBA,EAAkB,CAAlBA,EAAuC;EAAA,UACpC+D,CAAC,GAAG5C,CAAC,CAD+B,MAAA;EAAA,UAGpC9D,CAAM,GAAG,IAAA,IAAA,CADM0G,CAAC,GAAGoI,CACV,EAAA,CAH2B,CAG3B,CAH2B;;EAI1C,UAAI,MAAJ,CAAA,EAAiB;EACb,aAAK,IAAIvO,IAAC,GAAV,CAAA,EAAgBA,IAAC,GAAjB,CAAA,EAAuBA,IAAvB,EAAA;EACIP,UAAAA,CAAM,CAANA,UAAAA,CAAAA,IAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAArB9D,IAAqB8D,CAArB9D;EADJ;;EAEe,eAAX,IAAA,CAAA,IACAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CADA,EAEGA,CAFQ;EAInB;;EAAA,UAAImB,CAAK,GAAT,CAAA;;EACA,WAAK,IAAIZ,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAjB,CAAA,EAAuBA,CAAvB,EAAA,EAA4B;EACxB,YAAMc,CAAC,GAAGyC,CAAC,CAADA,OAAAA,CAAV,CAAUA,CAAV;;EACA9D,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAsB,aAACqB,CAAC,IAAH,CAAC,GAFE,CAExBrB,GACAmB,CAAK,GAAGE,CAAC,KAAM,KAAKqB,CADpB1C;EAGW;;EAAA,aAAX,IAAA,CAAA,IACAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CADA,EAGGA,CAHQ;EAKZ+O;;;aAAAA,+BAAqB,CAArBA,EAAqB,CAArBA,EAA4B;EAC/B,UAAMrM,CAAK,GAAG9C,IAAI,CAAJA,eAAAA,CAAd,CAAcA,CAAd;;EACA,UAAI,IAAJ,CAAA,EACI,MAAM,IAAA,UAAA,CAAN,gBAAM,CAAN;EAH2B,UAIzBoP,CAAU,GAAG,IAACtM,CAAK,GAJM,EAAA;EAAA,UAKzBuM,CAAS,GAAGvM,CAAK,GALQ,EAAA;EAAA,UAMzB7C,CAAM,GAAGiE,CAAC,CANe,MAAA;EAAA,UAOzBoL,CAAI,GAAG,MAAA,CAAA,IACT,KAACpL,CAAC,CAADA,OAAAA,CAAUjE,CAAM,GAAhBiE,CAAAA,MAA2B,KARD,CAAA;EAAA,UASzBqB,CAAY,GAAGtF,CAAM,GAANA,CAAAA,IAAuBqP,CAAI,GAAA,CAAA,GATjB,CASVrP,CATU;EAAA,UAUzBG,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAuB8D,CAAC,CAVR,IAUhB,CAVgB;;EAW/B,UAAI,MAAJ,CAAA,EAAqB;EACjB,YAAIvD,IAAC,GAAL,CAAA;;EACA,eAAOA,IAAC,GAAR,CAAA,EAAuBA,IAAvB,EAAA;EACIP,UAAAA,CAAM,CAANA,UAAAA,CAAAA,IAAAA,EAAAA,CAAAA;EADJ;;EAEA,eAAOO,IAAC,GAAR,CAAA,EAAyBA,IAAzB,EAAA;EACIP,UAAAA,CAAM,CAANA,UAAAA,CAAAA,IAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAAUvD,IAAC,GAAhCP,CAAqB8D,CAArB9D;EADJ;EAJJ,OAAA,MAQK;EACD,YAAImB,IAAK,GAAT,CAAA;;EACA,aAAK,IAAIZ,GAAC,GAAV,CAAA,EAAgBA,GAAC,GAAjB,CAAA,EAAgCA,GAAhC,EAAA;EACIP,UAAAA,CAAM,CAANA,UAAAA,CAAAA,GAAAA,EAAAA,CAAAA;EADJ;;EAEA,aAAK,IAAIO,GAAC,GAAV,CAAA,EAAgBA,GAAC,GAAjB,CAAA,EAA4BA,GAA5B,EAAA,EAAiC;EAC7B,cAAMc,IAAC,GAAGyC,CAAC,CAADA,OAAAA,CAAV,GAAUA,CAAV;;EACA9D,UAAAA,CAAM,CAANA,UAAAA,CAAkBO,GAAC,GAAnBP,CAAAA,EAAmC,aAACqB,IAAC,IAAH,CAAC,GAFN,IAE7BrB,GACAmB,IAAK,GAAGE,IAAC,KAAM,KAAK4N,CADpBjP;EAGJ;;EAAA,YAAA,CAAA,EACIA,CAAM,CAANA,UAAAA,CAAkBH,CAAM,GAAxBG,CAAAA,EADJ,IACIA,EADJ,KAII,IAAI,MAAJ,IAAA,EACI,MAAM,IAAA,KAAA,CAAA,oBAAA,CAAN;EAGZ;;EAAA,aAAOA,CAAM,CAANA,MAAAA,EAAP;EAEGmP;;;aAAAA,gCAAsB,CAAtBA,EAAsB,CAAtBA,EAA6B;EAAA,UAC1BtP,CAAM,GAAGiE,CAAC,CADgB,MAAA;EAAA,UAE1BpE,CAAI,GAAGoE,CAAC,CAFkB,IAAA;EAAA,UAG1BpB,CAAK,GAAG9C,IAAI,CAAJA,eAAAA,CAHkB,CAGlBA,CAHkB;;EAIhC,UAAI,IAAJ,CAAA,EACI,OAAOA,IAAI,CAAJA,qBAAAA,CAAP,CAAOA,CAAP;EAL4B,UAM1BoP,CAAU,GAAG,IAACtM,CAAK,GANO,EAAA;EAAA,UAO1BuM,CAAS,GAAGvM,CAAK,GAPS,EAAA;EAQhC,UAAIyC,CAAY,GAAGtF,CAAM,GAAzB,CAAA;EACA,UAAI,KAAJ,CAAA,EACI,OAAOD,IAAI,CAAJA,qBAAAA,CAAP,CAAOA,CAAP;EAKJ,UAAIwP,CAAa,GAAA,CAAjB,CAAA;;EACA,UAAA,CAAA,EAAU;EAEN,YAAI,MAACtL,CAAC,CAADA,OAAAA,CAAAA,CAAAA,IADQ,CAAC,KAAD,CAAA,IAAmB,CAC5B,CAAJ,EACIsL,CAAa,GAAA,CADjB,CACIA,CADJ,KAII,KAAK,IAAI7O,IAAC,GAAV,CAAA,EAAgBA,IAAC,GAAjB,CAAA,EAAgCA,IAAhC,EAAA;EACI,cAAI,MAAA,CAAC,CAAD,OAAA,CAAJ,IAAI,CAAJ,EAAwB;EACpB6O,YAAAA,CAAa,GAAA,CADO,CACpBA;EACA;EAIf;EAPO;EASR;;EAAA,UAAIA,CAAa,IAAI,MAArB,CAAA,EAAsC;EAAA,YAE5BpK,IAAG,GAAGlB,CAAC,CAADA,OAAAA,CAAUjE,CAAM,GAFM,CAEtBiE,CAFsB;;EAGN,aAAA,CAHM,IAGN,IAExBqB,CAAY,EAFY;EAIhC;;EAAA,UAAInF,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAb,CAAa,CAAb;;EACA,UAAI,MAAJ,CAAA,EAAqB;EAEjBA,QAAAA,CAAM,CAANA,UAAAA,CAAkBmF,CAAY,GAA9BnF,CAAAA,EAFiB,CAEjBA;;EACA,aAAK,IAAIO,IAAC,GAAV,CAAA,EAAyBA,IAAC,GAA1B,CAAA,EAAqCA,IAArC,EAAA;EACIP,UAAAA,CAAM,CAANA,UAAAA,CAAkBO,IAAC,GAAnBP,CAAAA,EAAkC8D,CAAC,CAADA,OAAAA,CAAlC9D,IAAkC8D,CAAlC9D;EADJ;EAHJ,OAAA,MAOK;EACD,YAAImB,IAAK,GAAG2C,CAAC,CAADA,OAAAA,CAAAA,CAAAA,MAAZ,CAAA;;EACA,YAAMpD,GAAI,GAAGb,CAAM,GAANA,CAAAA,GAAb,CAAA;;EACA,aAAK,IAAIU,IAAC,GAAV,CAAA,EAAgBA,IAAC,GAAjB,GAAA,EAA0BA,IAA1B,EAAA,EAA+B;EAC3B,cAAMc,IAAC,GAAGyC,CAAC,CAADA,OAAAA,CAAUvD,IAAC,GAADA,CAAAA,GAApB,CAAUuD,CAAV;;EACA9D,UAAAA,CAAM,CAANA,UAAAA,CAAAA,IAAAA,EAAsB,aAACqB,IAAC,IAAK,KAAR,CAAC,GAFK,IAE3BrB,GACAmB,IAAK,GAAGE,IAAC,KAAK4N,CADdjP;EAGJA;;EAAAA,QAAAA,CAAM,CAANA,UAAAA,CAAAA,GAAAA,EAAAA,IAAAA;EAEAoP;;EAAAA,aAAAA,CAKJ,KAFIpP,CAAM,GAAGJ,IAAI,CAAJA,gBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAEb,CALIwP,EAKGpP,CAAM,CAANA,MAAAA,EALHoP;EAODC;;;aAAAA,+BAAqB,CAArBA,EAA4B;EAAA,aAC3B3P,CAD2B,GAEpBE,IAAI,CAAJA,UAAAA,CAAAA,CAAAA,EAAAA,CAFoB,CAEpBA,CAFoB,GAIxBA,IAAI,CAAJA,MAAAA,EAJwB;EAM5B0P;;;aAAAA,yBAAe,CAAfA,EAAmB;EACtB,UAAI,IAAA,CAAC,CAAL,MAAA,EACI,OAAO,CAAP,CAAA;;EACJ,UAAM/L,CAAK,GAAGO,CAAC,CAADA,eAAAA,CAAd,CAAcA,CAAd;;EAHsB,aAIlBP,CAAK,GAAG3D,IAAI,CAJM,gBAIlB2D,GACO,CALW,CAIlBA,GAEGA,CANe;EAQnBgM;;;aAAAA,uBAAa,CAAbA,EAAqC;EAAA,UAAlBC,CAAkB,uEAAxB,SAAwB;;EACxC,UAAI,oBAAJ,CAAI,CAAJ,EACI,OAAA,CAAA;EACJ,UAAIC,CAAG,CAAHA,WAAAA,KAAJ,IAAA,EACI,OAAA,CAAA;;EACJ,UAAI,eAAA,OAAA,MAAA,IACA,oBAAOC,MAAM,CADjB,WACI,CADJ,EAC4C;EACxC,YAAMC,IAAY,GAAGF,CAAG,CAACC,MAAM,CAA/B,WAAwB,CAAxB;;EACA,YAAA,IAAA,EAAkB;EACd,cAAM9L,IAAS,GAAG+L,IAAY,CAA9B,CAA8B,CAA9B;;EACA,cAAI,oBAAJ,IAAI,CAAJ,EACI,OAAA,IAAA;EACJ,gBAAM,IAAA,SAAA,CAAA,0CAAA,CAAN;EAEP;EACD;;EAAA,UAAMvP,CAAO,GAAGqP,CAAG,CAAnB,OAAA;;EACA,UAAA,CAAA,EAAa;EACT,YAAM7L,GAAS,GAAGxD,CAAO,CAAPA,IAAAA,CAAlB,CAAkBA,CAAlB;;EACA,YAAI,oBAAJ,GAAI,CAAJ,EACI,OAAOwD,GAAP;EAER;;EAAA,UAAM1D,CAAQ,GAAGuP,CAAG,CAApB,QAAA;;EACA,UAAA,CAAA,EAAc;EACV,YAAM7L,GAAS,GAAG1D,CAAQ,CAARA,IAAAA,CAAlB,CAAkBA,CAAlB;;EACA,YAAI,oBAAJ,GAAI,CAAJ,EACI,OAAO0D,GAAP;EAER;;EAAA,YAAM,IAAA,SAAA,CAAA,0CAAA,CAAN;EAEGgM;;;aAAAA,qBAAW,CAAXA,EAAmB;EAAA,aAClBhQ,IAAI,CAAJA,UAAAA,CADkB,CAClBA,IADkB,CAClBA,GAEG,CAAC2D,CAHc;EAKnBsM;;;aAAAA,oBAAU,CAAVA,EAAkB;EACrB,aAAO,oBAAA,CAAA,KAA6B,SAA7B,CAAA,IACHtM,CAAK,CAALA,WAAAA,KAAsB3D,IAD1B;EAGGkQ;;;aAAAA,2BAAiB,CAAjBA,EAAiB,CAAjBA,EAAwB;EAAA,UACrB/K,CAAY,GAAG,IAAC,CAAC2B,CAAC,GAAF,EAAA,IADK,EAAA;EAAA,UAErB1G,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAAuB8D,CAAC,CAFZ,IAEZ,CAFY;EAAA,UAGrBpD,CAAI,GAAGqE,CAAY,GAHE,CAAA;;EAI3B,WAAK,IAAIxE,IAAC,GAAV,CAAA,EAAgBA,IAAC,GAAjB,CAAA,EAA0BA,IAA1B,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,IAAAA,EAAqB8D,CAAC,CAADA,OAAAA,CAArB9D,IAAqB8D,CAArB9D;EADJ;;EAGA,UAAIgF,CAAG,GAAGlB,CAAC,CAADA,OAAAA,CAAV,CAAUA,CAAV;;EACA,UAAI,KAAC4C,CAAC,GAAN,EAAA,EAAoB;EAChB,YAAMqJ,GAAI,GAAG,KAAMrJ,CAAC,GAApB,EAAA;;EACA1B,QAAAA,CAAG,GAAIA,CAAG,IAAJ,GAACA,KAAiB+K,GAAxB/K;EAEJhF;;EAAAA,aAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GACOA,CAAM,CAANA,MAAAA,EADPA;EAGGgQ;;;aAAAA,wCAA8B,CAA9BA,EAA8B,CAA9BA,EAA8B,CAA9BA,EAAiD;EAAA,UAAA,CAAA,GAMtCvM,IAAI,CANkC,GAAA;EAAA,UAC9CsB,CAAY,GAAG,IAAC,CAAC2B,CAAC,GAAF,EAAA,IAD8B,EAAA;EAAA,UAE9C1G,CAAM,GAAG,IAAA,IAAA,CAAA,CAAA,EAFqC,CAErC,CAFqC;EAGpD,UAAIO,CAAC,GAAL,CAAA;EACA,UAAMG,CAAI,GAAGqE,CAAY,GAAzB,CAAA;EACA,UAAI7C,CAAM,GAAV,CAAA;;EAEA,WADA,IAAM+N,CAAK,GAAGxM,CAAAA,CAAAA,CAAAA,EAAeK,CAAC,CAAhBL,MAAAA,CACd,EAAOlD,CAAC,GAAR,CAAA,EAAkBA,CAAlB,EAAA,EAAuB;EACnB,YAAMmL,IAAC,GAAG,IAAI5H,CAAC,CAADA,OAAAA,CAAJ,CAAIA,CAAJ,GAAV,CAAA;;EACA5B,QAAAA,CAAM,GAAG,IAACwJ,IAAC,KAFQ,EAEnBxJ,EACAlC,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,aAArBA,IAAAA,CADAkC;EAGJ;;EAAA,aAAO3B,CAAC,GAAR,CAAA,EAAiBA,CAAjB,EAAA;EACIP,QAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAqB,IAAC,aAAA,CAAtBA,CAAAA;EADJ;;EAGA,UAAIgF,CAAG,GAAGtE,CAAI,GAAGoD,CAAC,CAARpD,MAAAA,GAAkBoD,CAAC,CAADA,OAAAA,CAAlBpD,CAAkBoD,CAAlBpD,GAAV,CAAA;EACA,UAAMwP,CAAe,GAAGxJ,CAAC,GAAzB,EAAA;EACA,UAAA,CAAA;EACA,UAAI,KAAJ,CAAA,EACIyJ,CAAS,GAAG,IAAA,CAAA,GADhB,CACIA,EACAA,CAAS,IAFb,UACIA,CADJ,KAIK;EACD,YAAMJ,IAAI,GAAG,KAAb,CAAA;;EACA/K,QAAAA,CAAG,GAAIA,CAAG,IAAJ,IAACA,KAFN,IAEDA;;EACA,YAAMoL,GAAU,GAAG,KAAM,KAAzB,IAAA;;EACAD,QAAAA,CAAS,GAAGC,GAAU,GAAVA,CAAAA,GAJX,CAIDD,EACAA,CAAS,IAAKC,GAAU,GAAG,CAD3BD;EAGJnQ;EAAAA,aAAAA,CAAM,CAANA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GACOA,CAAM,CAANA,MAAAA,EADPA;EAIJ4C;;;aA4BOY,oBAAU,CAAVA,EAAU,CAAVA,EAA2B;EAC9B,UAAIxD,CAAM,GAAV,CAAA;;EAD8B,aAEvB,IAFuB,CAAA;EAGtB,YAHsB,CAGtB,KACAA,CAAM,IAJgB,CAGtB,GAEJkE,CAAQ,MALkB,CAGtB,EAGJmM,CAAI,IANsB,CAGtB;EAHsB;;EAQ9B,aAAOrQ,CAAP;EAEGsQ;;;aAAAA,yBAAe,CAAfA,EAAmB;EACtB,aAAO,CAAC,aAAD,CAAA,MAAqBxM,CAA5B;EA15DiB;;;;mCAAN4F;;EA65DnB9J,IAAI,CAAJA,YAAAA,GAAAA,QAAAA,EACAA,IAAI,CAAJA,gBAAAA,GAAwBA,IAAI,CAAJA,YAAAA,IAAqB,CAD7CA,EASAA,IAAI,CAAJA,iBAAAA,GAAyB,CAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CATzBA,EAgBAA,IAAI,CAAJA,wBAAAA,GAAgC,CAhBhCA,EAiBAA,IAAI,CAAJA,6BAAAA,GAAqC,KAAKA,IAAI,CAAC2Q,wBAjB/C3Q,EAkBAA,IAAI,CAAJA,kBAAAA,GAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CAlBAA,EAmBAA,IAAI,CAAJA,sBAAAA,GAA8B,IAAA,WAAA,CAAA,CAAA,CAnB9BA,EAoBAA,IAAI,CAAJA,sBAAAA,GAA8B,IAAA,YAAA,CAAiBA,IAAI,CAArB,sBAAA,CApB9BA,EAqBAA,IAAI,CAAJA,oBAAAA,GAA4B,IAAA,UAAA,CAAeA,IAAI,CAAnB,sBAAA,CArB5BA,EAyBAA,IAAI,CAAJA,OAAAA,GAAe6D,IAAI,CAAJA,KAAAA,GAAa,UAAA,CAAA,EAAa;EACrC,SAAOA,IAAI,CAAJA,KAAAA,CAAAA,CAAAA,IAAgB,CAAvB;EADWA,CAAAA,GAEX,UAAA,CAAA,EAAa;EAAA,SACT,MADS,CACT,GADS,EACT,GAEG,IAAA,MAAM,IAAA,IAAI,CAAJ,GAAA,CAASK,CAAC,KAAV,CAAA,IAAoBL,IAAI,CAA9B,GAAA,CAHM;EAIhB,CA/BD7D,EAgCAA,IAAI,CAAJA,MAAAA,GAAc6D,IAAI,CAAJA,IAAAA,IAAa,UAAA,CAAA,EAAA,CAAA,EAAgB;EACvC,SAAO,IAAC+M,CAAC,GAAGC,CAAZ;EACH,CAlCD7Q;;ECn4DA,IAAM,UAAU,GAAG,EAAnB;;EASA,IAAM,2BAA2B,uBAK9B,mBAL8B,4BAKT,KALS,EAKF,OALE,EAKK;EAClC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAR,WAAmB,KAAK,MAAM,CAAC,WAAZ,CAAnB,eAAgD,IAAhD,QAAyD,SAAzD,CAAd;EACA,MAAI,KAAK,GAAG,CAAZ,EAAe,OAAO,KAAP;EACf,MAAM,OAAO,GAAG,EAAhB;;EACA,0BAAmB,CACjB,OADiB,EAEjB,QAFiB,EAGjB,OAHiB,EAIjB,MAJiB,EAKjB,OALiB,EAMjB,SANiB,EAOjB,SAPiB,EAQjB,cARiB,EASjB,cATiB,EAUjB,aAViB,CAAnB,0BAWY;EAXP,QAAM,IAAI,WAAV;EAYH,QAAI,KAAK,IAAL,MAAe,CAAnB,EAAsB,OAAO,CAAC,IAAR,aAAkB,IAAlB,eAA2B,OAAO,CAAC,OAAR,CAAgB,KAAK,IAAL,CAAhB,EAA4B,QAA5B,CAA3B;EACvB;;EACD,SAAO,KAAK,GAAG,MAAR,GAAiB,OAAO,CAAC,IAAR,CAAa,KAAb,CAAjB,GAAuC,KAA9C;EACD,CAxB8B,CAAjC;;EA4BA,SAAS,2BAAT,CAAgD,KAAhD,EAA+D,OAA/D,EAA+F;EAC7F,SAAO,OAAO,CAAC,OAAR,WAAmB,KAAK,MAAM,CAAC,WAAZ,CAAnB,eAAgD,IAAhD,QAAyD,SAAzD,CAAP;EACD;;EAEK,SAAU,kBAAV,CACJ,KADI,EAEJ,IAFI,EAEsC;EAE1C,EAAA,MAAM,CAAC,cAAP,CAAsB,KAAK,CAAC,SAA5B,EAAuC,MAAM,CAAC,WAA9C,EAA2D;EACzD,IAAA,KAAK,EAAE,IADkD;EAEzD,IAAA,QAAQ,EAAE,KAF+C;EAGzD,IAAA,UAAU,EAAE,KAH6C;EAIzD,IAAA,YAAY,EAAE;EAJ2C,GAA3D;;EAMA,EAAW;EACT,IAAA,MAAM,CAAC,cAAP,CAAsB,KAAK,CAAC,SAA5B,EAAuC,MAAM,CAAC,GAAP,CAAW,4BAAX,CAAvC,EAAiF;EAC/E,MAAA,KAAK,EAAE,2BAA2B,CAAC,IAAD,CAA3B,IAAqC,2BADmC;EAE/E,MAAA,QAAQ,EAAE,KAFqE;EAG/E,MAAA,UAAU,EAAE,KAHmE;EAI/E,MAAA,YAAY,EAAE;EAJiE,KAAjF;EAMD;;EAfyC,6CAgBvB,MAAM,CAAC,mBAAP,CAA2B,KAA3B,CAhBuB;EAAA;;EAAA;EAgB1C,wDAAsD;EAAA,UAA3C,IAA2C;EACpD;EACA;EACA,UAAM,IAAI,GAAG,MAAM,CAAC,wBAAP,CAAgC,KAAhC,EAAuC,IAAvC,CAAb;EACA,UAAI,CAAC,IAAI,CAAC,YAAN,IAAsB,CAAC,IAAI,CAAC,UAAhC,EAA4C;EAC5C,MAAA,IAAI,CAAC,UAAL,GAAkB,KAAlB;EACA,MAAA,MAAM,CAAC,cAAP,CAAsB,KAAtB,EAA6B,IAA7B,EAAmC,IAAnC;EACD;EAvByC;EAAA;EAAA;EAAA;EAAA;;EAAA,8CAwBvB,MAAM,CAAC,mBAAP,CAA2B,KAAK,CAAC,SAAjC,CAxBuB;EAAA;;EAAA;EAwB1C,2DAAgE;EAAA,UAArD,KAAqD;;EAC9D;EACA;EACA,UAAM,KAAI,GAAG,MAAM,CAAC,wBAAP,CAAgC,KAAK,CAAC,SAAtC,EAAiD,KAAjD,CAAb;;EACA,UAAI,CAAC,KAAI,CAAC,YAAN,IAAsB,CAAC,KAAI,CAAC,UAAhC,EAA4C;EAC5C,MAAA,KAAI,CAAC,UAAL,GAAkB,KAAlB;EACA,MAAA,MAAM,CAAC,cAAP,CAAsB,KAAK,CAAC,SAA5B,EAAuC,KAAvC,EAA6C,KAA7C;EACD;EA/ByC;EAAA;EAAA;EAAA;EAAA;;EAiC1C,EAAA,eAAe,CAAC,IAAD,EAAO,KAAP,CAAf;EACA,EAAA,eAAe,WAAI,IAAJ,iBAAsB,KAAK,CAAC,SAA5B,CAAf;EACD;EAmBK,SAAU,eAAV,CAAgE,IAAhE,EAA4E,KAA5E,EAA0F;EAC9F,MAAM,GAAG,cAAuC,IAAvC,MAAT;EACA,MAAI,UAAU,CAAC,GAAD,CAAV,KAAoB,SAAxB,EAAmC,MAAM,IAAI,KAAJ,qBAAuB,IAAvB,qBAAN;EACnC,EAAA,UAAU,CAAC,GAAD,CAAV,GAAkB,KAAlB;EACD;EACK,SAAU,YAAV,CAA6D,SAA7D,EAA4E;EAChF,SAAO,UAAU,CAAC,SAAD,CAAjB;EACD;;EC1ID;EACO,IAAM,gBAAgB,GAAG,uBAAzB;;EAGA,IAAM,WAAW,GAAG,0BAApB;;EAGA,IAAM,QAAQ,GAAG,WAAjB;EACA,IAAM,SAAS,GAAG,YAAlB;EACA,IAAM,OAAO,GAAG,UAAhB;EACA,IAAM,QAAQ,GAAG,WAAjB;EACA,IAAM,UAAU,GAAG,aAAnB;EACA,IAAM,UAAU,GAAG,aAAnB;EACA,IAAM,eAAe,GAAG,kBAAxB;EACA,IAAM,eAAe,GAAG,kBAAxB;EACA,IAAM,cAAc,GAAG,iBAAvB;EACA,IAAM,QAAQ,GAAG,eAAjB;;EAEA,IAAM,UAAU,GAAG,iBAAnB;EACA,IAAM,gBAAgB,GAAG,uBAAzB;EACA,IAAM,eAAe,GAAG,sBAAxB;;EAGA,IAAM,OAAO,GAAG,qBAAhB;EACA,IAAM,SAAS,GAAG,gBAAlB;;EAGA,IAAM,KAAK,GAAG,YAAd;EACA,IAAM,MAAM,GAAG,aAAf;EACA,IAAM,KAAK,GAAG,YAAd;EACA,IAAM,IAAI,GAAG,WAAb;EACA,IAAM,KAAK,GAAG,YAAd;EACA,IAAM,OAAO,GAAG,cAAhB;EACA,IAAM,OAAO,GAAG,cAAhB;EACA,IAAM,YAAY,GAAG,mBAArB;EACA,IAAM,YAAY,GAAG,mBAArB;EACA,IAAM,WAAW,GAAG,kBAApB;;EAGA,IAAM,WAAW,GAAG,0BAApB;EA6GP,IAAM,KAAK,GAAG,IAAI,OAAJ,EAAd;EACM,SAAU,WAAV,CAAsB,SAAtB,EAAgD;EACpD,EAAA,KAAK,CAAC,GAAN,CAAU,SAAV,EAAqB,MAAM,CAAC,MAAP,CAAc,IAAd,CAArB;EACD;;EAED,SAAS,QAAT,CAA6C,SAA7C,EAAyD;EACvD,SAAO,KAAK,CAAC,GAAN,CAAU,SAAV,CAAP;EACD;;EAgHK,SAAU,OAAV,CAAkB,SAAlB,EAA6D;EACjE,MAAI,CAAC,SAAD,IAAc,qBAAoB,SAApB,CAAlB,EAAiD,OAAO,KAAP;EACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAD,CAAxB;;EAFiE,oCAApB,GAAoB;EAApB,IAAA,GAAoB;EAAA;;EAGjE,SAAO,CAAC,CAAC,OAAF,IAAa,GAAG,CAAC,MAAJ,CAAW,UAAC,GAAD,EAAe,EAAf;EAAA,WAAsB,GAAG,IAAI,EAAE,IAAI,OAAnC;EAAA,GAAX,EAAuD,IAAvD,CAApB;EACD;EACK,SAAU,OAAV,CACJ,SADI,EAEJ,EAFI,EAEI;EAER,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAD,CAAR,CAAoB,EAApB,CAAd;EACA,MAAI,KAAK,KAAK,SAAd,EAAyB,MAAM,IAAI,SAAJ,iCAAuC,EAAvC,EAAN;EACzB,SAAO,KAAP;EACD;EACK,SAAU,OAAV,CACJ,SADI,EAEJ,EAFI,EAGJ,KAHI,EAGuB;EAE3B,EAAA,QAAQ,CAAC,SAAD,CAAR,CAAoB,EAApB,IAA0B,KAA1B;EACD;;EClSD,IAAM,WAAW,GAAG,6FAApB;EACA,IAAM,eAAe,GAAG,4EAAxB;EACA,IAAM,UAAU,GAAG,IAAI,MAAJ,iBACR,WAAW,CAAC,MADJ,uBACuB,WAAW,CAAC,MADnC,qCACoE,eAAe,CAAC,MADpF,OAAnB;EAIA,IAAM,YAAY,GAAG,kBAArB;EACA,IAAM,UAAU,GAAG,IAAI,MAAJ,cAAiB,YAAY,CAAC,MAA9B,iBAA2C,YAAY,CAAC,MAAxD,SAAnB;EAEA,IAAM,QAAQ,GAAG,2BAAjB;EACA,IAAM,SAAS,GAAG,mBAAlB;EACA,IAAM,OAAO,GAAG,yBAAhB;EACA,IAAM,SAAS,GAAG,IAAI,MAAJ,YACZ,QAAQ,CAAC,MADG,mBACY,SAAS,CAAC,MADtB,gBACkC,OAAO,CAAC,MAD1C,gBACsD,SAAS,CAAC,MADhE,eAC2E,OAAO,CAAC,MADnF,QAAlB;EAGA,IAAM,SAAS,GAAG,2FAAlB;EACO,IAAM,MAAM,GAAG,wFAAf;EACP,IAAM,SAAS,GAAG,IAAI,MAAJ,wBAA2B,MAAM,CAAC,MAAlC,uBAAqD,UAAU,CAAC,MAAhE,YAAlB;EACA,IAAM,QAAQ,GAAG,IAAI,MAAJ,oBAAuB,UAAU,CAAC,MAAlC,UAAjB;EAEO,IAAM,aAAa,GAAG,IAAI,MAAJ,YACvB,SAAS,CAAC,MADa,0BACS,SAAS,CAAC,MADnB,eAC8B,SAAS,CAAC,MADxC,gBACoD,QAAQ,CAAC,MAD7D,UAE3B,GAF2B,CAAtB;EAKA,IAAM,IAAI,GAAG,IAAI,MAAJ,cAAiB,SAAS,CAAC,MAA3B,gBAAuC,SAAS,CAAC,MAAjD,kBAA+D,QAAQ,CAAC,MAAxE,UAAqF,GAArF,CAAb;EAGP;EACA;EACA;EACA;EACA;;EACO,IAAM,SAAS,GAAG,IAAI,MAAJ,aAAgB,QAAQ,CAAC,MAAzB,iBAAsC,SAAS,CAAC,MAAhD,QAAlB;EACA,IAAM,QAAQ,GAAG,IAAI,MAAJ,oBAAuB,SAAS,CAAC,MAAjC,iBAA8C,OAAO,CAAC,MAAtD,QAAjB;EAEP,IAAM,QAAQ,GAAG,yBAAjB;EAEA,IAAM,YAAY,GAAG,8CAArB;EACA,IAAM,YAAY,GAAG,IAAI,MAAJ,cAAiB,QAAQ,CAAC,MAA1B,mBAAyC,QAAQ,CAAC,MAAlD,mBAAiE,QAAQ,CAAC,MAA1E,SAArB;EACO,IAAM,QAAQ,GAAG,IAAI,MAAJ,0BAA6B,YAAY,CAAC,MAA1C,sBAA4D,YAAY,CAAC,MAAzE,UAAsF,GAAtF,CAAjB;;ECxCP,IAAM8Q,eAAa,GAAG,KAAK,CAAC,SAAN,CAAgB,QAAtC;EACA,IAAMC,oBAAkB,GAAG,KAAK,CAAC,SAAN,CAAgB,IAA3C;EACA,IAAMC,oBAAkB,GAAG,UAAU,CAAC,IAAX,CAAgB,cAA3C;EACA,IAAM,OAAO,GAAG,IAAI,CAAC,GAArB;EACA,IAAM,OAAO,GAAG,IAAI,CAAC,GAArB;EACA,IAAMC,SAAO,GAAG,IAAI,CAAC,GAArB;EACA,IAAMC,WAAS,GAAG,IAAI,CAAC,KAAvB;EACA,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAtB;EACA,IAAM,SAAS,GAAG,IAAI,CAAC,KAAvB;EACA,IAAM,WAAW,GAAG,MAAM,CAAC,KAA3B;EACA,IAAM,cAAc,GAAG,MAAM,CAAC,QAA9B;EACA,IAAM,UAAU,GAAG,MAAnB;EACA,IAAM,UAAU,GAAG,MAAnB;EACA,IAAM,oBAAoB,GAAG,MAAM,CAAC,gBAApC;EACA,IAAMC,cAAY,GAAG,MAAM,CAAC,MAA5B;EACA,IAAMC,cAAY,GAAG,MAAM,CAAC,MAA5B;EACA,IAAM,oBAAoB,GAAG,MAAM,CAAC,cAApC;EACA,IAAM,8BAA8B,GAAG,MAAM,CAAC,wBAA9C;EACA,IAAM,QAAQ,GAAG,MAAM,CAAC,EAAxB;EACA,IAAMC,cAAY,GAAG,OAAO,CAAC,KAA7B;EA4DO,IAAM,IAAI,GAAG,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAb;EACP,IAAM,GAAG,GAAG,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAZ;EACA,IAAM,KAAK,GAAG,IAAI,CAAC,MAAL,CAAY,EAAZ,CAAd;EACO,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAjB;EACA,IAAM,OAAO,GAAG,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAhB;EACA,IAAM,OAAO,GAAG,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAhB;EACP,IAAM,YAAY,GAAG,IAAI,CAAC,MAAL,CAAY,CAAC,CAAb,CAArB;EACA,IAAM,WAAW,GAAG,KAApB;EACA,IAAM,SAAS,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,WAAZ,CAAd,EAAwC,OAAxC,CAAlB;EACA,IAAM,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,CAAC,KAAb,CAAd,EAAmC,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAnC,CAAf;EACA,IAAM,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,KAAZ,CAAd,EAAkC,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAlC,CAAf;EACA,IAAM,QAAQ,GAAG,CAAC,MAAlB;EACA,IAAM,QAAQ,GAAG,MAAjB;EACA,IAAM,8BAA8B,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,CAAC,MAAb,CAAd,EAAoC,IAAI,CAAC,MAAL,CAAY,IAAZ,CAApC,CAAvC;;EACA,IAAM,qBAAqB,GAAG,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,IAAI,CAAC,MAAL,CAAY,MAAM,EAAlB,CAAzB,CAA9B;EACA,IAAM,oBAAoB,GAAG,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,IAAI,CAAC,MAAL,CAAY,MAAM,CAAlB,CAAzB,CAA7B;EACA,IAAM,eAAe,GAAG,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,IAAI,CAAC,MAAL,CAAY,IAAI,CAAhB,CAAzB,CAAxB;EAEA,IAAM,oBAAoB,GAAG,CAC3B,SAD2B,EAE3B,QAF2B,EAG3B,SAH2B,EAI3B,kBAJ2B,EAK3B,cAL2B,EAM3B,eAN2B,EAO3B,cAP2B,EAQ3B,UAR2B,EAS3B,SAT2B,EAU3B,UAV2B,EAW3B,SAX2B,EAY3B,QAZ2B,EAa3B,SAb2B,EAc3B,OAd2B,EAe3B,KAf2B,EAgB3B,QAhB2B,EAiB3B,UAjB2B,EAkB3B,UAlB2B,EAmB3B,SAnB2B,CAA7B;;EAsBA,SAAS,SAAT,CAAmB,KAAnB,EAAiC;EAC/B,MAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,CAAC,cAAc,CAAC,KAAD,CAAhD,EAAyD,OAAO,KAAP;EACzD,MAAM,GAAG,GAAGJ,SAAO,CAAC,KAAD,CAAnB;EACA,SAAOC,WAAS,CAAC,GAAD,CAAT,KAAmB,GAA1B;EACD;;EAQK,SAAU,QAAV,CAAmB,KAAnB,EAAiC;EACrC,SAAQ,QAAO,KAAP,MAAiB,QAAjB,IAA6B,KAAK,KAAK,IAAxC,IAAiD,OAAO,KAAP,KAAiB,UAAzE;EACD;EAEK,SAAU,QAAV,CAAmB,KAAnB,EAAiC;EACrC,MAAI,OAAO,KAAP,KAAiB,QAArB,EAA+B,MAAM,IAAI,SAAJ,CAAc,iCAAd,CAAN;EAC/B,SAAO,UAAU,CAAC,KAAD,CAAjB;EACD;;EAED,SAAS,SAAT,CAAmB,KAAnB,EAAiC;EAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAD,CAApB;EACA,MAAI,WAAW,CAAC,GAAD,CAAf,EAAsB,OAAO,CAAP;EACtB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAD,CAAzB;EACA,MAAI,GAAG,KAAK,CAAZ,EAAe,OAAO,CAAP;EACf,SAAO,OAAP;EACD;;EAEK,SAAU,QAAV,CAAmB,KAAnB,EAAiC;EACrC,MAAI,QAAO,KAAP,MAAiB,QAArB,EAA+B;EAC7B,UAAM,IAAI,SAAJ,CAAc,2CAAd,CAAN;EACD;;EACD,SAAO,UAAU,CAAC,KAAD,CAAjB;EACD;EAEK,SAAU,wBAAV,CAAmC,KAAnC,EAAiD;EACrD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAD,CAAzB;;EACA,MAAI,CAAC,cAAc,CAAC,OAAD,CAAnB,EAA8B;EAC5B,UAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;EACD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,iBAAT,CAA2B,UAA3B,EAAgD,QAAhD,EAAiE;EAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,UAAD,CAAvB;;EACA,MAAI,CAAC,cAAc,CAAC,KAAD,CAAnB,EAA4B;EAC1B,UAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;EACD;;EACD,MAAI,KAAK,GAAG,CAAZ,EAAe;EACb,QAAI,QAAQ,KAAK,SAAjB,EAA4B;EAC1B,YAAM,IAAI,UAAJ,qBAA4B,QAA5B,0CAAN;EACD;;EACD,UAAM,IAAI,UAAJ,CAAe,6DAAf,CAAN;EACD;;EACD,SAAO,KAAP;EACD;;EAEK,SAAU,wBAAV,CAAmC,UAAnC,EAAsD;EAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAD,CAAtB;EACA,MAAI,WAAW,CAAC,KAAD,CAAf,EAAwB,OAAO,CAAP;;EACxB,MAAI,CAAC,cAAc,CAAC,KAAD,CAAnB,EAA4B;EAC1B,UAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;EACD;;EACD,MAAI,CAAC,SAAS,CAAC,KAAD,CAAd,EAAuB;EACrB,UAAM,IAAI,UAAJ,wCAA+C,KAA/C,EAAN;EACD;;EACD,SAAO,SAAS,CAAC,KAAD,CAAhB,CAT0D;EAU3D;;EACD,SAAS,MAAT,CAAgB,CAAhB,EAAyB,CAAzB,EAAgC;EAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAL,CAAY,CAAZ,EAAe,CAAf,CAAjB;EACA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAL,CAAe,CAAf,EAAkB,CAAlB,CAAlB;EACA,SAAO;EAAE,IAAA,QAAQ,EAAR,QAAF;EAAY,IAAA,SAAS,EAAT;EAAZ,GAAP;EACD;;EAED,SAAS,GAAT,CAAa,CAAb,EAAoB;EAClB,MAAI,IAAI,CAAC,QAAL,CAAc,CAAd,EAAiB,IAAjB,CAAJ,EAA4B,OAAO,IAAI,CAAC,QAAL,CAAc,CAAd,EAAiB,YAAjB,CAAP;EAC5B,SAAO,CAAP;EACD;;EAEK,SAAU,SAAV,CACJ,GADI,EAE2B;EAAA,oCAA5B,OAA4B;EAA5B,IAAA,OAA4B;EAAA;;EAE/B,EAAAH,oBAAkB,CAAC,KAAnB,CAAyB,GAAzB,EAA8B,OAA9B;EACA,SAAO,GAAP;EACD;EAGD,IAAM,aAAa,GAAG,IAAI,GAAJ,CAA6C,CACjE,CAAC,MAAD,EAAS,wBAAT,CADiE,EAEjE,CAAC,OAAD,EAAU,iBAAV,CAFiE,EAGjE,CAAC,WAAD,EAAc,QAAd,CAHiE,EAIjE,CAAC,KAAD,EAAQ,iBAAR,CAJiE,EAKjE,CAAC,MAAD,EAAS,wBAAT,CALiE,EAMjE,CAAC,QAAD,EAAW,wBAAX,CANiE,EAOjE,CAAC,QAAD,EAAW,wBAAX,CAPiE,EAQjE,CAAC,aAAD,EAAgB,wBAAhB,CARiE,EASjE,CAAC,aAAD,EAAgB,wBAAhB,CATiE,EAUjE,CAAC,YAAD,EAAe,wBAAf,CAViE,EAWjE,CAAC,OAAD,EAAU,wBAAV,CAXiE,EAYjE,CAAC,QAAD,EAAW,wBAAX,CAZiE,EAajE,CAAC,OAAD,EAAU,wBAAV,CAbiE,EAcjE,CAAC,MAAD,EAAS,wBAAT,CAdiE,EAejE,CAAC,OAAD,EAAU,wBAAV,CAfiE,EAgBjE,CAAC,SAAD,EAAY,wBAAZ,CAhBiE,EAiBjE,CAAC,SAAD,EAAY,wBAAZ,CAjBiE,EAkBjE,CAAC,cAAD,EAAiB,wBAAjB,CAlBiE,EAmBjE,CAAC,cAAD,EAAiB,wBAAjB,CAnBiE,EAoBjE,CAAC,aAAD,EAAgB,wBAAhB,CApBiE,EAqBjE,CAAC,KAAD,EAAQ,QAAR,CArBiE,EAsBjE,CAAC,SAAD,EAAY,SAAZ,CAtBiE,EAuBjE,CAAC,QAAD,EAAW,QAAX,CAvBiE,CAA7C,CAAtB;EA0BA,IAAM,gBAAgB,GAAG,IAAI,GAAJ,CAAQ,CAC/B,CAAC,MAAD,EAAS,CAAT,CAD+B,EAE/B,CAAC,QAAD,EAAW,CAAX,CAF+B,EAG/B,CAAC,QAAD,EAAW,CAAX,CAH+B,EAI/B,CAAC,aAAD,EAAgB,CAAhB,CAJ+B,EAK/B,CAAC,aAAD,EAAgB,CAAhB,CAL+B,EAM/B,CAAC,YAAD,EAAe,CAAf,CAN+B,CAAR,CAAzB;;EAUA,IAAM,qBAAqB,GAAG,CAC5B,CAAC,OAAD,EAAU,MAAV,EAAkB,MAAlB,CAD4B,EAE5B,CAAC,QAAD,EAAW,OAAX,EAAoB,MAApB,CAF4B,EAG5B,CAAC,OAAD,EAAU,MAAV,EAAkB,MAAlB,CAH4B,EAI5B,CAAC,MAAD,EAAS,KAAT,EAAgB,MAAhB,CAJ4B,EAK5B,CAAC,OAAD,EAAU,MAAV,EAAkB,MAAlB,CAL4B,EAM5B,CAAC,SAAD,EAAY,QAAZ,EAAsB,MAAtB,CAN4B,EAO5B,CAAC,SAAD,EAAY,QAAZ,EAAsB,MAAtB,CAP4B,EAQ5B,CAAC,cAAD,EAAiB,aAAjB,EAAgC,MAAhC,CAR4B,EAS5B,CAAC,cAAD,EAAiB,aAAjB,EAAgC,MAAhC,CAT4B,EAU5B,CAAC,aAAD,EAAgB,YAAhB,EAA8B,MAA9B,CAV4B,CAA9B;EAYA,IAAM,YAAY,GAAG,IAAI,GAAJ,CAAQ,qBAAqB,CAAC,GAAtB,CAA0B,UAAC,CAAD;EAAA,SAAO,CAAC,CAAC,CAAC,CAAD,CAAF,EAAO,CAAC,CAAC,CAAD,CAAR,CAAP;EAAA,CAA1B,CAAR,CAArB;EACA,IAAM,UAAU,GAAG,IAAI,GAAJ,CAAQ,qBAAqB,CAAC,GAAtB,CAA0B;EAAA;EAAA,MAAE,CAAF;EAAA,MAAK,CAAL;;EAAA,SAAY,CAAC,CAAD,EAAI,CAAJ,CAAZ;EAAA,CAA1B,CAAR,CAAnB;EACA,IAAM,gBAAgB,GAAG,qBAAqB,CAAC,GAAtB,CAA0B;EAAA;EAAA,MAAI,CAAJ;;EAAA,SAAW,CAAX;EAAA,CAA1B,CAAzB;EAEA,IAAM,eAAe,GAAG,KAAK,CAAC,IAAN,CAAW,YAAY,CAAC,IAAb,EAAX,EAAgC,IAAhC,EAAxB;EAIA,IAAM,2BAA2B,GAAG,IAAI,GAAJ,EAApC;;EAEA,SAAS,oCAAT,CAA8C,kBAA9C,EAAwE;EACtE,MAAI,QAAQ,GAAG,2BAA2B,CAAC,GAA5B,CAAgC,kBAAhC,CAAf;;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B;EAC1B,IAAA,QAAQ,GAAG,IAAIC,oBAAJ,CAAuB,OAAvB,EAAgC;EACzC,MAAA,QAAQ,EAAE,UAAU,CAAC,kBAAD,CADqB;EAEzC,MAAA,MAAM,EAAE,KAFiC;EAGzC,MAAA,GAAG,EAAE,OAHoC;EAIzC,MAAA,IAAI,EAAE,SAJmC;EAKzC,MAAA,KAAK,EAAE,SALkC;EAMzC,MAAA,GAAG,EAAE,SANoC;EAOzC,MAAA,IAAI,EAAE,SAPmC;EAQzC,MAAA,MAAM,EAAE,SARiC;EASzC,MAAA,MAAM,EAAE;EATiC,KAAhC,CAAX;EAWA,IAAA,2BAA2B,CAAC,GAA5B,CAAgC,kBAAhC,EAAoD,QAApD;EACD;;EACD,SAAO,QAAP;EACD;;EAEK,SAAU,iBAAV,CAA4B,IAA5B,EAAyC;EAC7C,SAAO,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAP,IAAmC,CAAC,OAAO,CAAC,IAAD,EAAO,SAAP,EAAkB,QAAlB,CAAlD;EACD;EAEK,SAAU,kBAAV,CAA6B,IAA7B,EAA0C;EAC9C,SAAO,OAAO,CAAC,IAAD,EAAO,WAAP,CAAd;EACD;EACK,SAAU,kBAAV,CAA6B,IAA7B,EAA0C;EAC9C,SAAO,OAAO,CAAC,IAAD,EAAO,WAAP,CAAd;EACD;EACK,SAAU,kBAAV,CAA6B,IAA7B,EAA0C;EAC9C,SAAO,OAAO,CAAC,IAAD,EAAO,KAAP,EAAc,MAAd,EAAsB,IAAtB,EAA4B,KAA5B,EAAmC,OAAnC,EAA4C,OAA5C,EAAqD,YAArD,EAAmE,YAAnE,EAAiF,WAAjF,CAAd;EACD;EACK,SAAU,cAAV,CAAyB,IAAzB,EAAsC;EAC1C,SAAO,OAAO,CAAC,IAAD,EAAO,UAAP,CAAd;EACD;EACK,SAAU,cAAV,CAAyB,IAAzB,EAAsC;EAC1C,SACE,OAAO,CAAC,IAAD,EAAO,QAAP,EAAiB,UAAjB,EAA6B,UAA7B,EAAyC,eAAzC,EAA0D,eAA1D,EAA2E,cAA3E,CAAP,IACA,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,EAAiB,SAAjB,EAA4B,OAA5B,CAFV;EAID;EACK,SAAU,kBAAV,CAA6B,IAA7B,EAA0C;EAC9C,SAAO,OAAO,CACZ,IADY,EAEZ,QAFY,EAGZ,SAHY,EAIZ,OAJY,EAKZ,QALY,EAMZ,UANY,EAOZ,UAPY,EAQZ,eARY,EASZ,eATY,EAUZ,cAVY,CAAd;EAYD;EACK,SAAU,mBAAV,CAA8B,IAA9B,EAA2C;EAC/C,SAAO,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAd;EACD;EACK,SAAU,kBAAV,CAA6B,IAA7B,EAA0C;EAC9C,SAAO,OAAO,CAAC,IAAD,EAAO,eAAP,CAAd;EACD;EACK,SAAU,uBAAV,CAAkC,IAAlC,EAA+C;EACnD,SAAO,OAAO,CAAC,IAAD,EAAO,gBAAP,EAAyB,SAAzB,EAAoC,QAApC,CAAd;EACD;EACK,SAAU,kCAAV,CAA6C,IAA7C,EAAsE;EAC1E,MAAI,OAAO,CAAC,IAAD,EAAO,QAAP,CAAP,IAA2B,OAAO,CAAC,IAAD,EAAO,SAAP,CAAtC,EAAyD;EACvD,UAAM,IAAI,SAAJ,CAAc,yDAAd,CAAN;EACD;;EACD,MAAK,IAA8B,CAAC,QAA/B,KAA4C,SAAjD,EAA4D;EAC1D,UAAM,IAAI,SAAJ,CAAc,6CAAd,CAAN;EACD;;EACD,MAAK,IAA8B,CAAC,QAA/B,KAA4C,SAAjD,EAA4D;EAC1D,UAAM,IAAI,SAAJ,CAAc,6CAAd,CAAN;EACD;EACF;;EACD,SAAS,qBAAT,CAA+B,WAA/B,EAAkD;EAChD,8BAA8B,2BAA2B,CAAC,WAAD,CAAzD;EAAA,MAAM,QAAN,yBAAM,QAAN;EAAA,MAAgB,MAAhB,yBAAgB,MAAhB;EAAA,MAAwB,CAAxB,yBAAwB,CAAxB;;EACA,MAAI,QAAJ,EAAc,OAAO,QAAP;EACd,MAAI,CAAJ,EAAO,OAAO,KAAP;EACP,SAAO,MAAP,CAJgD;EAKjD;;EAED,SAAS,wBAAT,CAAkC,EAAlC,EAA8C,YAA9C,EAAuG;EACrG,MAAI,YAAY,KAAK,OAArB,EAA8B,OAAO,EAAP;EAC9B,MAAI,YAAY,KAAK,MAAjB,IAA2B,EAAE,KAAK,SAAtC,EAAiD,OAAO,EAAP;EACjD,yBAAgB,EAAhB;EACD;;EAED,SAAS,gBAAT,CAA0B,SAA1B,EAA2C;EACzC;EACA,MAAM,KAAK,GAAGM,aAAA,CAAoB,IAApB,CAAyB,SAAzB,CAAd;EACA,MAAI,CAAC,KAAL,EAAY,MAAM,IAAI,UAAJ,oCAA2C,SAA3C,EAAN;EACZ,MAAI,UAAU,GAAG,KAAK,CAAC,CAAD,CAAtB;EACA,MAAI,UAAU,CAAC,CAAD,CAAV,KAAkB,QAAtB,EAAgC,UAAU,cAAO,UAAU,CAAC,KAAX,CAAiB,CAAjB,CAAP,CAAV;EAChC,MAAI,UAAU,KAAK,SAAnB,EAA8B,MAAM,IAAI,UAAJ,oCAA2C,SAA3C,EAAN;EAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,UAAD,CAAtB;EACA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,CAAD,CAAlB,CAAvB;EACA,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,CAAD,CAAlB,CAArB;EACA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAtB;EACA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAD,CAAL,KAAa,SAA7B;EACA,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,EAAD,CAAlB,CAAxB;EACA,MAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,EAAD,CAAlB,CAAtB;EACA,MAAI,MAAM,KAAK,EAAf,EAAmB,MAAM,GAAG,EAAT;EACnB,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,EAAD,CAAlB,IAA0B,WAA3C;EACA,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAA7B;EACA,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAA7B;EACA,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAA5B;EACA,MAAI,MAAJ;EACA,MAAI,CAAC,GAAG,KAAR;;EACA,MAAI,KAAK,CAAC,EAAD,CAAT,EAAe;EACb,IAAA,MAAM,GAAG,SAAT;EACA,IAAA,CAAC,GAAG,IAAJ;EACD,GAHD,MAGO,IAAI,KAAK,CAAC,EAAD,CAAL,IAAa,KAAK,CAAC,EAAD,CAAtB,EAA4B;EACjC,QAAM,UAAU,GAAG,KAAK,CAAC,EAAD,CAAL,KAAc,GAAd,IAAqB,KAAK,CAAC,EAAD,CAAL,KAAc,QAAnC,GAA8C,GAA9C,GAAoD,GAAvE;EACA,QAAM,WAAW,GAAG,KAAK,CAAC,EAAD,CAAL,IAAa,IAAjC;EACA,QAAM,aAAa,GAAG,KAAK,CAAC,EAAD,CAAL,IAAa,IAAnC;EACA,QAAM,aAAa,GAAG,KAAK,CAAC,EAAD,CAAL,IAAa,IAAnC;EACA,QAAI,cAAc,GAAG,KAAK,CAAC,EAAD,CAAL,IAAa,GAAlC;EACA,IAAA,MAAM,aAAM,UAAN,SAAmB,WAAnB,cAAkC,aAAlC,CAAN;;EACA,QAAI,CAAC,cAAL,EAAqB;EACnB,aAAO,cAAc,CAAC,QAAf,CAAwB,GAAxB,CAAP;EAAqC,QAAA,cAAc,GAAG,cAAc,CAAC,KAAf,CAAqB,CAArB,EAAwB,CAAC,CAAzB,CAAjB;EAArC;;EACA,MAAA,MAAM,eAAQ,aAAR,cAAyB,cAAzB,CAAN;EACD,KAHD,MAGO,IAAI,CAAC,aAAL,EAAoB;EACzB,MAAA,MAAM,eAAQ,aAAR,CAAN;EACD;;EACD,QAAI,MAAM,KAAK,QAAf,EAAyB,MAAM,GAAG,QAAT;EAC1B;;EACD,MAAI,QAAQ,GAAG,KAAK,CAAC,EAAD,CAApB;;EACA,MAAI,QAAJ,EAAc;EACZ,QAAI;EACF;EACA,MAAA,QAAQ,GAAG,8BAA8B,CAAC,QAAD,CAA9B,CAAyC,QAAzC,EAAX;EACD,KAHD,CAGE,gBAAM;EAEP;EACF;;EACD,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAD,CAAtB;EACA,EAAA,cAAc,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAAd;EACA,SAAO;EACL,IAAA,IAAI,EAAJ,IADK;EAEL,IAAA,KAAK,EAAL,KAFK;EAGL,IAAA,GAAG,EAAH,GAHK;EAIL,IAAA,OAAO,EAAP,OAJK;EAKL,IAAA,IAAI,EAAJ,IALK;EAML,IAAA,MAAM,EAAN,MANK;EAOL,IAAA,MAAM,EAAN,MAPK;EAQL,IAAA,WAAW,EAAX,WARK;EASL,IAAA,WAAW,EAAX,WATK;EAUL,IAAA,UAAU,EAAV,UAVK;EAWL,IAAA,QAAQ,EAAR,QAXK;EAYL,IAAA,MAAM,EAAN,MAZK;EAaL,IAAA,CAAC,EAAD,CAbK;EAcL,IAAA,QAAQ,EAAR;EAdK,GAAP;EAgBD;;;EAGK,SAAU,0BAAV,CAAqC,SAArC,EAAsD;EAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAD,CAA/B;EACA,MAAI,CAAC,MAAM,CAAC,CAAR,IAAa,CAAC,MAAM,CAAC,MAAzB,EAAiC,MAAM,IAAI,UAAJ,CAAe,8CAAf,CAAN;EACjC,SAAO,MAAP;EACD;;EAGK,SAAU,gCAAV,CAA2C,SAA3C,EAA4D;EAChE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAD,CAA/B;EACA,MAAI,CAAC,MAAM,CAAC,QAAZ,EAAsB,MAAM,IAAI,UAAJ,CAAe,4DAAf,CAAN;EACtB,SAAO,MAAP;EACD;;EAGK,SAAU,2BAAV,CAAsC,SAAtC,EAAuD;EAC3D,SAAO,gBAAgB,CAAC,SAAD,CAAvB;EACD;;EAGK,SAAU,uBAAV,CAAkC,SAAlC,EAAmD;EACvD,SAAO,gBAAgB,CAAC,SAAD,CAAvB;EACD;;EAGK,SAAU,uBAAV,CAAkC,SAAlC,EAAmD;EACvD,MAAM,KAAK,GAAGC,IAAA,CAAW,IAAX,CAAgB,SAAhB,CAAd;EACA,MAAI,IAAJ,EAAU,MAAV,EAAkB,MAAlB,EAA0B,WAA1B,EAAuC,WAAvC,EAAoD,UAApD,EAAgE,QAAhE;;EACA,MAAI,KAAJ,EAAW;EACT,IAAA,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAhB;EACA,IAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,CAAD,CAAlB,CAAlB;EACA,IAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,CAAD,CAAlB,CAAlB;EACA,QAAI,MAAM,KAAK,EAAf,EAAmB,MAAM,GAAG,EAAT;EACnB,QAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,CAAD,CAAlB,IAAyB,WAA1C;EACA,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAAvB;EACA,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAAvB;EACA,IAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAAtB;EACA,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAD,CAAhB;EACD,GAVD,MAUO;EACL,QAAI,CAAJ,EAAO,OAAP;;EADK,4BAGH,gBAAgB,CAAC,SAAD,CAHb;;EAEF,IAAA,OAFE,qBAEF,OAFE;EAEO,IAAA,IAFP,qBAEO,IAFP;EAEa,IAAA,MAFb,qBAEa,MAFb;EAEqB,IAAA,MAFrB,qBAEqB,MAFrB;EAE6B,IAAA,WAF7B,qBAE6B,WAF7B;EAE0C,IAAA,WAF1C,qBAE0C,WAF1C;EAEuD,IAAA,UAFvD,qBAEuD,UAFvD;EAEmE,IAAA,QAFnE,qBAEmE,QAFnE;EAE6E,IAAA,CAF7E,qBAE6E,CAF7E;EAIL,QAAI,CAAC,OAAL,EAAc,MAAM,IAAI,UAAJ,sCAA6C,SAA7C,EAAN;EACd,QAAI,CAAJ,EAAO,MAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EACR,GAnBsD;;;EAqBvD,MAAI,kBAAkB,IAAlB,CAAuB,SAAvB,CAAJ,EAAuC;EACrC,WAAO;EAAE,MAAA,IAAI,EAAJ,IAAF;EAAQ,MAAA,MAAM,EAAN,MAAR;EAAgB,MAAA,MAAM,EAAN,MAAhB;EAAwB,MAAA,WAAW,EAAX,WAAxB;EAAqC,MAAA,WAAW,EAAX,WAArC;EAAkD,MAAA,UAAU,EAAV,UAAlD;EAA8D,MAAA,QAAQ,EAAR;EAA9D,KAAP;EACD,GAvBsD;EAyBvD;EACA;;;EACA,MAAI;EACF,gCAAuB,2BAA2B,CAAC,SAAD,CAAlD;EAAA,QAAQ,KAAR,yBAAQ,KAAR;EAAA,QAAe,GAAf,yBAAe,GAAf;;EACA,IAAA,aAAa,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAAb;EACD,GAHD,CAGE,iBAAM;EACN,QAAI;EACF,kCAAwB,4BAA4B,CAAC,SAAD,CAApD;EAAA,UAAQ,IAAR,yBAAQ,IAAR;EAAA,UAAc,MAAd,yBAAc,KAAd;;EACA,MAAA,aAAa,CAAC,IAAD,EAAO,MAAP,EAAc,CAAd,CAAb;EACD,KAHD,CAGE,iBAAM;EACN,aAAO;EAAE,QAAA,IAAI,EAAJ,IAAF;EAAQ,QAAA,MAAM,EAAN,MAAR;EAAgB,QAAA,MAAM,EAAN,MAAhB;EAAwB,QAAA,WAAW,EAAX,WAAxB;EAAqC,QAAA,WAAW,EAAX,WAArC;EAAkD,QAAA,UAAU,EAAV,UAAlD;EAA8D,QAAA,QAAQ,EAAR;EAA9D,OAAP;EACD;EACF;;EACD,QAAM,IAAI,UAAJ,6CAAoD,SAApD,2BAAN;EACD;;EAGK,SAAU,4BAAV,CAAuC,SAAvC,EAAwD;EAC5D,MAAM,KAAK,GAAGC,SAAA,CAAgB,IAAhB,CAAqB,SAArB,CAAd;EACA,MAAI,IAAJ,EAAU,KAAV,EAAiB,QAAjB,EAA2B,eAA3B;;EACA,MAAI,KAAJ,EAAW;EACT,QAAI,UAAU,GAAG,KAAK,CAAC,CAAD,CAAtB;EACA,QAAI,UAAU,CAAC,CAAD,CAAV,KAAkB,QAAtB,EAAgC,UAAU,cAAO,UAAU,CAAC,KAAX,CAAiB,CAAjB,CAAP,CAAV;EAChC,QAAI,UAAU,KAAK,SAAnB,EAA8B,MAAM,IAAI,UAAJ,oCAA2C,SAA3C,EAAN;EAC9B,IAAA,IAAI,GAAG,SAAS,CAAC,UAAD,CAAhB;EACA,IAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAjB;EACA,IAAA,QAAQ,GAAG,KAAK,CAAC,CAAD,CAAhB;EACD,GAPD,MAOO;EACL,QAAI,CAAJ;;EADK,6BAEiD,gBAAgB,CAAC,SAAD,CAFjE;;EAEF,IAAA,IAFE,sBAEF,IAFE;EAEI,IAAA,KAFJ,sBAEI,KAFJ;EAEW,IAAA,QAFX,sBAEW,QAFX;EAE0B,IAAA,eAF1B,sBAEqB,GAFrB;EAE2C,IAAA,CAF3C,sBAE2C,CAF3C;EAGL,QAAI,CAAJ,EAAO,MAAM,IAAI,UAAJ,CAAe,+CAAf,CAAN;EACR;;EACD,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,QAAQ,EAAR,QAAf;EAAyB,IAAA,eAAe,EAAf;EAAzB,GAAP;EACD;;EAGK,SAAU,2BAAV,CAAsC,SAAtC,EAAuD;EAC3D,MAAM,KAAK,GAAGC,QAAA,CAAe,IAAf,CAAoB,SAApB,CAAd;EACA,MAAI,KAAJ,EAAW,GAAX,EAAgB,QAAhB,EAA0B,gBAA1B;;EACA,MAAI,KAAJ,EAAW;EACT,IAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAjB;EACA,IAAA,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAf;EACD,GAHD,MAGO;EACL,QAAI,CAAJ;;EADK,6BAEkD,gBAAgB,CAAC,SAAD,CAFlE;;EAEF,IAAA,KAFE,sBAEF,KAFE;EAEK,IAAA,GAFL,sBAEK,GAFL;EAEU,IAAA,QAFV,sBAEU,QAFV;EAE0B,IAAA,gBAF1B,sBAEoB,IAFpB;EAE4C,IAAA,CAF5C,sBAE4C,CAF5C;EAGL,QAAI,CAAJ,EAAO,MAAM,IAAI,UAAJ,CAAe,8CAAf,CAAN;EACR;;EACD,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,GAAG,EAAH,GAAT;EAAc,IAAA,QAAQ,EAAR,QAAd;EAAwB,IAAA,gBAAgB,EAAhB;EAAxB,GAAP;EACD;;EAGK,SAAU,2BAAV,CAAsC,WAAtC,EAAyD;EAK7D,MAAI;EACF,QAAI,cAAc,GAAG,8BAA8B,CAAC,WAAD,CAAnD;EACA,QAAI,cAAJ,EAAoB,OAAO;EAAE,MAAA,QAAQ,EAAE,cAAc,CAAC,QAAf;EAAZ,KAAP;EACrB,GAHD,CAGE,iBAAM;EAEP;;EACD,MAAI;EACF;EACA,QAAM,MAAM,GAAG,gBAAgB,CAAC,WAAD,CAA/B;;EACA,QAAI,MAAM,CAAC,CAAP,IAAY,MAAM,CAAC,MAAnB,IAA6B,MAAM,CAAC,QAAxC,EAAkD;EAChD,aAAO,MAAP;EACD;EACF,GAND,CAME,iBAAM;EAEP;;EACD,QAAM,IAAI,UAAJ,8BAAqC,WAArC,EAAN;EACD;;EAGK,SAAU,2BAAV,CAAsC,SAAtC,EAAuD;EAC3D,MAAM,KAAK,GAAGC,QAAA,CAAe,IAAf,CAAoB,SAApB,CAAd;EACA,MAAI,CAAC,KAAL,EAAY,MAAM,IAAI,UAAJ,6BAAoC,SAApC,EAAN;;EACZ,MAAI,KAAK,CAAC,KAAN,CAAY,CAAZ,EAAe,KAAf,CAAqB,UAAC,OAAD;EAAA,WAAa,OAAO,KAAK,SAAzB;EAAA,GAArB,CAAJ,EAA8D;EAC5D,UAAM,IAAI,UAAJ,6BAAoC,SAApC,EAAN;EACD;;EACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAD,CAAL,KAAa,GAAb,IAAoB,KAAK,CAAC,CAAD,CAAL,KAAa,QAAjC,GAA4C,CAAC,CAA7C,GAAiD,CAA9D;EACA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAT,GAAsB,IAApC;EACA,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAT,GAAsB,IAArC;EACA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAT,GAAsB,IAApC;EACA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAT,GAAsB,IAAnC;EACA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAT,GAAsB,IAApC;EACA,MAAI,MAAM,GAAoB,KAAK,CAAC,CAAD,CAAnC;EACA,MAAI,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAD,CAAN,CAAT,GAAsB,IAApC;EACA,MAAI,QAAQ,GAAoB,KAAK,CAAC,CAAD,CAArC;EACA,MAAI,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,EAAD,CAAN,CAAT,GAAuB,IAArC;EACA,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAD,CAAL,GAAY,WAA7B;EACA,MAAI,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAAT,GAAkC,IAArD;EACA,MAAI,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAAT,GAAkC,IAArD;EACA,MAAI,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAD,CAAT,GAAkC,IAApD;EAEA,EAAA,MAAM,GAAG,MAAM,GAAI,IAAI,GAAG,SAAS,CAAC,MAAD,CAAjB,YAA6B,EAA7B,EAAmC,MAAM,CAAC,MAA1C,CAAH,GAAsD,CAArE;EACA,EAAA,QAAQ,GAAG,QAAQ,GAAI,IAAI,GAAG,SAAS,CAAC,QAAD,CAAjB,YAA+B,EAA/B,EAAqC,QAAQ,CAAC,MAA9C,CAAH,GAA0D,CAA7E;;EAtB2D,8BAwBM,uBAAuB,CACtF,MADsF,EAEtF,OAFsF,EAGtF,QAHsF,EAItF,OAJsF,EAKtF,YALsF,EAMtF,YANsF,EAOtF,WAPsF,CAxB7B;;EAwBxD,EAAA,OAxBwD,yBAwBxD,OAxBwD;EAwB/C,EAAA,OAxB+C,yBAwB/C,OAxB+C;EAwBtC,EAAA,YAxBsC,yBAwBtC,YAxBsC;EAwBxB,EAAA,YAxBwB,yBAwBxB,YAxBwB;EAwBV,EAAA,WAxBU,yBAwBV,WAxBU;EAiC3D,EAAA,cAAc,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,KAA7B,EAAoC,OAApC,EAA6C,OAA7C,EAAsD,YAAtD,EAAoE,YAApE,EAAkF,WAAlF,CAAd;EACA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ,IAAxB;EAA8B,IAAA,KAAK,EAAL,KAA9B;EAAqC,IAAA,OAAO,EAAP,OAArC;EAA8C,IAAA,OAAO,EAAP,OAA9C;EAAuD,IAAA,YAAY,EAAZ,YAAvD;EAAqE,IAAA,YAAY,EAAZ,YAArE;EAAmF,IAAA,WAAW,EAAX;EAAnF,GAAP;EACD;;EAGK,SAAU,oBAAV,CAA+B,SAA/B,EAAgD;EACpD,8BACE,0BAA0B,CAAC,SAAD,CAD5B;EAAA,MAAM,IAAN,yBAAM,IAAN;EAAA,MAAY,KAAZ,yBAAY,KAAZ;EAAA,MAAmB,GAAnB,yBAAmB,GAAnB;EAAA,MAAwB,IAAxB,yBAAwB,IAAxB;EAAA,MAA8B,MAA9B,yBAA8B,MAA9B;EAAA,MAAsC,MAAtC,yBAAsC,MAAtC;EAAA,MAA8C,WAA9C,yBAA8C,WAA9C;EAAA,MAA2D,WAA3D,yBAA2D,WAA3D;EAAA,MAAwE,UAAxE,yBAAwE,UAAxE;EAAA,MAAoF,MAApF,yBAAoF,MAApF;EAAA,MAA4F,CAA5F,yBAA4F,CAA5F;;EAGA,MAAI,CAAC,CAAD,IAAM,CAAC,MAAX,EAAmB,MAAM,IAAI,UAAJ,CAAe,8CAAf,CAAN,CAJiC;EAMpD;EACA;;EACA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAH,GAAO,yBAAyB,CAAC,MAAD,CAAlD;;EARoD,4BASgC,kBAAkB,CACpG,IADoG,EAEpG,KAFoG,EAGpG,GAHoG,EAIpG,IAJoG,EAKpG,MALoG,EAMpG,MANoG,EAOpG,WAPoG,EAQpG,WARoG,EASpG,UAAU,GAAG,QATuF,CATlD;;EASjD,EAAA,IATiD,uBASjD,IATiD;EAS3C,EAAA,KAT2C,uBAS3C,KAT2C;EASpC,EAAA,GAToC,uBASpC,GAToC;EAS/B,EAAA,IAT+B,uBAS/B,IAT+B;EASzB,EAAA,MATyB,uBASzB,MATyB;EASjB,EAAA,MATiB,uBASjB,MATiB;EAST,EAAA,WATS,uBAST,WATS;EASI,EAAA,WATJ,uBASI,WATJ;EASiB,EAAA,UATjB,uBASiB,UATjB;EAqBpD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAApC;EACA,MAAI,OAAO,KAAK,IAAhB,EAAsB,MAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EACtB,SAAO,OAAP;EACD;EAEK,SAAU,eAAV,CACJ,SADI,EAEJ,UAFI,EAGJ,QAHI,EAIJ,QAJI,EAI4C;EAEhD,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,GAAG,GAAG,QAAV;;EACA,UAAQ,QAAR;EACE,SAAK,QAAL;EACE,MAAA,aAAa,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAAb;EACA;;EACF,SAAK,WAAL;EAAA,8BAC0B,gBAAgB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAD1C;;EACK,MAAA,IADL,qBACK,IADL;EACW,MAAA,KADX,qBACW,KADX;EACkB,MAAA,GADlB,qBACkB,GADlB;EAEE;EANJ;;EAQA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH;EAAf,GAAP;EACD;EAEK,SAAU,YAAV,CACJ,SADI,EAEJ,WAFI,EAGJ,WAHI,EAIJ,gBAJI,EAKJ,gBALI,EAMJ,eANI,EAOJ,QAPI,EAO4C;EAEhD,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,WAAW,GAAG,gBAAlB;EACA,MAAI,WAAW,GAAG,gBAAlB;EACA,MAAI,UAAU,GAAG,eAAjB;;EAEA,UAAQ,QAAR;EACE,SAAK,QAAL;EACE,MAAA,UAAU,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,WAAvB,EAAoC,WAApC,EAAiD,UAAjD,CAAV;EACA;;EACF,SAAK,WAAL;EAAA,2BACoE,aAAa,CAC7E,IAD6E,EAE7E,MAF6E,EAG7E,MAH6E,EAI7E,WAJ6E,EAK7E,WAL6E,EAM7E,UAN6E,CADjF;;EACK,MAAA,IADL,kBACK,IADL;EACW,MAAA,MADX,kBACW,MADX;EACmB,MAAA,MADnB,kBACmB,MADnB;EAC2B,MAAA,WAD3B,kBAC2B,WAD3B;EACwC,MAAA,WADxC,kBACwC,WADxC;EACqD,MAAA,UADrD,kBACqD,UADrD;EASE;EAbJ;;EAeA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,MAAM,EAAN,MAAR;EAAgB,IAAA,MAAM,EAAN,MAAhB;EAAwB,IAAA,WAAW,EAAX,WAAxB;EAAqC,IAAA,WAAW,EAAX,WAArC;EAAkD,IAAA,UAAU,EAAV;EAAlD,GAAP;EACD;EAEK,SAAU,oBAAV,CACJ,SADI,EAEJ,UAFI,EAGJ,QAHI,EAG4C;EAEhD,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAM,eAAe,GAAG,CAAxB;;EACA,UAAQ,QAAR;EACE,SAAK,QAAL;EACE,MAAA,aAAa,CAAC,IAAD,EAAO,KAAP,EAAc,eAAd,CAAb;EACA;;EACF,SAAK,WAAL;EAAA,+BACqB,gBAAgB,CAAC,IAAD,EAAO,KAAP,CADrC;;EACK,MAAA,IADL,sBACK,IADL;EACW,MAAA,KADX,sBACW,KADX;EAEE;EANJ;;EAQA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL;EAAR,GAAP;EACD;;EAED,SAAS,uBAAT,CACE,WADF,EAEE,YAFF,EAGE,aAHF,EAIE,YAJF,EAKE,iBALF,EAME,iBANF,EAOE,gBAPF,EAO0B;EAExB,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,QAAQ,GAAG,aAAf;EACA,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,YAAY,GAAG,iBAAnB;EACA,MAAI,YAAY,GAAG,iBAAnB;EACA,MAAI,WAAW,GAAG,gBAAlB;;EAEA,MAAI,MAAM,KAAK,CAAf,EAAkB;EAChB,KAAC,OAAD,EAAU,QAAV,EAAoB,OAApB,EAA6B,YAA7B,EAA2C,YAA3C,EAAyD,WAAzD,EAAsE,OAAtE,CAA8E,UAAC,GAAD,EAAQ;EACpF,UAAI,GAAG,KAAK,CAAZ,EAAe,MAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EAChB,KAFD;EAGA,QAAM,IAAI,GAAG,MAAM,GAAG,EAAtB;EACA,IAAA,OAAO,GAAG,SAAS,CAAC,IAAD,CAAnB;EACA,IAAA,QAAQ,GAAG,IAAI,GAAG,CAAlB;EACD;;EAED,MAAI,QAAQ,KAAK,CAAjB,EAAoB;EAClB,KAAC,OAAD,EAAU,YAAV,EAAwB,YAAxB,EAAsC,WAAtC,EAAmD,OAAnD,CAA2D,UAAC,GAAD,EAAQ;EACjE,UAAI,GAAG,KAAK,CAAZ,EAAe,MAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EAChB,KAFD;EAGA,QAAM,IAAI,GAAG,QAAQ,GAAG,EAAxB;EACA,IAAA,OAAO,GAAG,SAAS,CAAC,IAAD,CAAnB;EACA,QAAM,QAAQ,GAAG,IAAI,GAAG,CAAxB;;EAEA,QAAI,QAAQ,KAAK,CAAjB,EAAoB;EAClB,UAAM,IAAI,GAAG,QAAQ,GAAG,IAAxB;EACA,MAAA,YAAY,GAAG,SAAS,CAAC,IAAD,CAAxB;EACA,UAAM,aAAa,GAAG,IAAI,GAAG,CAA7B;;EAEA,UAAI,aAAa,KAAK,CAAtB,EAAyB;EACvB,YAAM,IAAI,GAAG,aAAa,GAAG,IAA7B;EACA,QAAA,YAAY,GAAG,SAAS,CAAC,IAAD,CAAxB;EACA,YAAM,aAAa,GAAG,IAAI,GAAG,CAA7B;;EAEA,YAAI,aAAa,KAAK,CAAtB,EAAyB;EACvB,cAAM,IAAI,GAAG,aAAa,GAAG,IAA7B;EACA,UAAA,WAAW,GAAG,SAAS,CAAC,IAAD,CAAvB;EACD;EACF;EACF;EACF;;EAED,SAAO;EAAE,IAAA,OAAO,EAAP,OAAF;EAAW,IAAA,OAAO,EAAP,OAAX;EAAoB,IAAA,YAAY,EAAZ,YAApB;EAAkC,IAAA,YAAY,EAAZ,YAAlC;EAAgD,IAAA,WAAW,EAAX;EAAhD,GAAP;EACD;;EAED,SAAS,wBAAT,CAAkC,IAAlC,EAAsE;EACpE,MAAI,CAAC,QAAQ,CAAC,IAAD,CAAb,EAAqB;EACnB,WAAO,2BAA2B,CAAC,QAAQ,CAAC,IAAD,CAAT,CAAlC;EACD;;EACD,MAAI,kBAAkB,CAAC,IAAD,CAAtB,EAA8B;EAC5B,WAAO;EACL,MAAA,KAAK,EAAE,OAAO,CAAC,IAAD,EAAO,KAAP,CADT;EAEL,MAAA,MAAM,EAAE,OAAO,CAAC,IAAD,EAAO,MAAP,CAFV;EAGL,MAAA,KAAK,EAAE,OAAO,CAAC,IAAD,EAAO,KAAP,CAHT;EAIL,MAAA,IAAI,EAAE,OAAO,CAAC,IAAD,EAAO,IAAP,CAJR;EAKL,MAAA,KAAK,EAAE,OAAO,CAAC,IAAD,EAAO,KAAP,CALT;EAML,MAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP,CANX;EAOL,MAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP,CAPX;EAQL,MAAA,YAAY,EAAE,OAAO,CAAC,IAAD,EAAO,YAAP,CARhB;EASL,MAAA,YAAY,EAAE,OAAO,CAAC,IAAD,EAAO,YAAP,CAThB;EAUL,MAAA,WAAW,EAAE,OAAO,CAAC,IAAD,EAAO,WAAP;EAVf,KAAP;EAYD;;EACD,MAAM,MAAM,GAAG;EACb,IAAA,KAAK,EAAE,CADM;EAEb,IAAA,MAAM,EAAE,CAFK;EAGb,IAAA,KAAK,EAAE,CAHM;EAIb,IAAA,IAAI,EAAE,CAJO;EAKb,IAAA,KAAK,EAAE,CALM;EAMb,IAAA,OAAO,EAAE,CANI;EAOb,IAAA,OAAO,EAAE,CAPI;EAQb,IAAA,YAAY,EAAE,CARD;EASb,IAAA,YAAY,EAAE,CATD;EAUb,IAAA,WAAW,EAAE;EAVA,GAAf;EAYA,MAAI,OAAO,GAAG,+BAA+B,CAAC,IAAD,CAA7C;;EA9BoE,6CA+B7C,eA/B6C;EAAA;;EAAA;EA+BpE,wDAAwC;EAAA,UAA7B,QAA6B;EACtC,UAAM,KAAK,GAAG,OAAO,CAAC,QAAD,CAArB;;EACA,UAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,QAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,KAAnB;EACD;EACF;EApCmE;EAAA;EAAA;EAAA;EAAA;;EAqCpE,MAAM,KAAN,GAAuG,MAAvG,CAAM,KAAN;EAAA,MAAa,MAAb,GAAuG,MAAvG,CAAa,MAAb;EAAA,MAAqB,KAArB,GAAuG,MAAvG,CAAqB,KAArB;EAAA,MAA4B,IAA5B,GAAuG,MAAvG,CAA4B,IAA5B;EAAA,MAAkC,KAAlC,GAAuG,MAAvG,CAAkC,KAAlC;EAAA,MAAyC,OAAzC,GAAuG,MAAvG,CAAyC,OAAzC;EAAA,MAAkD,OAAlD,GAAuG,MAAvG,CAAkD,OAAlD;EAAA,MAA2D,YAA3D,GAAuG,MAAvG,CAA2D,YAA3D;EAAA,MAAyE,YAAzE,GAAuG,MAAvG,CAAyE,YAAzE;EAAA,MAAuF,WAAvF,GAAuG,MAAvG,CAAuF,WAAvF;EACA,EAAA,cAAc,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,KAA7B,EAAoC,OAApC,EAA6C,OAA7C,EAAsD,YAAtD,EAAoE,YAApE,EAAkF,WAAlF,CAAd;EACA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ,IAAxB;EAA8B,IAAA,KAAK,EAAL,KAA9B;EAAqC,IAAA,OAAO,EAAP,OAArC;EAA8C,IAAA,OAAO,EAAP,OAA9C;EAAuD,IAAA,YAAY,EAAZ,YAAvD;EAAqE,IAAA,YAAY,EAAZ,YAArE;EAAmF,IAAA,WAAW,EAAX;EAAnF,GAAP;EACD;;EAED,SAAS,+BAAT,CAAyC,oBAAzC,EAA6F;EAC3F,MAAI,CAAC,QAAQ,CAAC,oBAAD,CAAb,EAAqC;EACnC,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,MAAM,MAAM,GAA+D;EACzE,IAAA,KAAK,EAAE,SADkE;EAEzE,IAAA,MAAM,EAAE,SAFiE;EAGzE,IAAA,KAAK,EAAE,SAHkE;EAIzE,IAAA,IAAI,EAAE,SAJmE;EAKzE,IAAA,KAAK,EAAE,SALkE;EAMzE,IAAA,OAAO,EAAE,SANgE;EAOzE,IAAA,OAAO,EAAE,SAPgE;EAQzE,IAAA,YAAY,EAAE,SAR2D;EASzE,IAAA,YAAY,EAAE,SAT2D;EAUzE,IAAA,WAAW,EAAE;EAV4D,GAA3E;EAYA,MAAI,GAAG,GAAG,KAAV;;EAhB2F,8CAiBpE,eAjBoE;EAAA;;EAAA;EAiB3F,2DAAwC;EAAA,UAA7B,QAA6B;EACtC,UAAM,KAAK,GAAG,oBAAoB,CAAC,QAAD,CAAlC;;EACA,UAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,QAAA,GAAG,GAAG,IAAN;EACA,QAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,wBAAwB,CAAC,KAAD,CAA3C;EACD;EACF;EAvB0F;EAAA;EAAA;EAAA;EAAA;;EAwB3F,MAAI,CAAC,GAAL,EAAU;EACR,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,SAAO,MAAP;EACD;;EAED,SAAS,yBAAT,CACE,IADF,EAEE,oBAFF,EAEuD;EAErD,MAAI,MAAM,GAAG,wBAAwB,CAAC,IAAD,CAArC;;EAFqD,8CAG9B,oBAH8B;EAAA;;EAAA;EAGrD,2DAA6C;EAAA,UAAlC,QAAkC;;EAC3C,UAAI,MAAM,CAAC,QAAD,CAAN,KAAqB,CAAzB,EAA4B;EAC1B,cAAM,IAAI,UAAJ,0BACc,QADd,6EAAN;EAGD;EACF;EAToD;EAAA;EAAA;EAAA;EAAA;;EAUrD,SAAO,MAAP;EACD;;EAEK,SAAU,kBAAV,CAA6B,OAA7B,EAA4E;EAChF,MAAI,OAAO,KAAK,SAAhB,EAA2B,OAAO,WAAP;EAC3B,SAAO,SAAS,CAAC,OAAD,EAAU,UAAV,EAAsB,CAAC,WAAD,EAAc,QAAd,CAAtB,EAA+C,WAA/C,CAAhB;EACD;EAEK,SAAU,wBAAV,CAAmC,OAAnC,EAAiF;EACrF,MAAI,OAAO,KAAK,SAAhB,EAA2B,OAAO,YAAP;EAC3B,SAAO,SAAS,CAAC,OAAD,EAAU,gBAAV,EAA4B,CAAC,YAAD,EAAe,SAAf,EAA0B,OAA1B,EAAmC,QAAnC,CAA5B,EAA0E,YAA1E,CAAhB;EACD;EAEK,SAAU,sBAAV,CACJ,OADI,EAEJ,QAFI,EAE2B;EAE/B,SAAO,SAAS,CAAC,OAAD,EAAU,cAAV,EAA0B,CAAC,MAAD,EAAS,OAAT,EAAkB,OAAlB,EAA2B,YAA3B,CAA1B,EAAoE,QAApE,CAAhB;EACD;;EAED,SAAS,0BAAT,CAAoC,YAApC,EAAuE;EACrE,UAAQ,YAAR;EACE,SAAK,MAAL;EACE,aAAO,OAAP;;EACF,SAAK,OAAL;EACE,aAAO,MAAP;;EACF;EACE,aAAO,YAAP;EANJ;EAQD;;EAEK,SAAU,gBAAV,CACJ,OADI,EAEJ,QAFI,EAE8D;EAElE,MAAI,OAAO,KAAK,SAAhB,EAA2B,OAAO,QAAP;EAC3B,SAAO,SAAS,CAAC,OAAD,EAAU,QAAV,EAAoB,CAAC,QAAD,EAAW,KAAX,EAAkB,QAAlB,EAA4B,QAA5B,CAApB,EAA2D,QAA3D,CAAhB;EACD;EAEK,SAAU,oBAAV,CAA+B,OAA/B,EAAmE;EACvE,SAAO,SAAS,CAAC,OAAD,EAAU,cAAV,EAA0B,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,CAA1B,EAAuD,MAAvD,CAAhB;EACD;EAEK,SAAU,wBAAV,CAAmC,OAAnC,EAAiF;EACrF,SAAO,SAAS,CAAC,OAAD,EAAU,cAAV,EAA0B,CAAC,MAAD,EAAS,OAAT,CAA1B,EAA6C,MAA7C,CAAhB;EACD;EAEK,SAAU,kBAAV,CAA6B,OAA7B,EAA2E;EAC/E,SAAO,SAAS,CAAC,OAAD,EAAU,QAAV,EAAoB,CAAC,MAAD,EAAS,OAAT,CAApB,EAAuC,MAAvC,CAAhB;EACD;EAEK,SAAU,2BAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,SAHI,EAGe;EAEnB,MAAI,OAAO,GAAG,QAAd;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B,OAAO,GAAG,QAAV;EAC5B,MAAI,CAAC,SAAD,IAAc,QAAQ,KAAK,SAA/B,EAA0C,OAAO,GAAG,QAAQ,GAAG,CAAX,GAAe,QAAQ,GAAG,CAA1B,GAA8B,CAAxC;EAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,OAAD,EAAU,mBAAV,EAA+B,CAA/B,EAAkC,OAAlC,EAA2C,CAA3C,CAAjC;;EACA,MAAI,QAAQ,KAAK,SAAb,IAA0B,QAAQ,GAAG,SAAX,KAAyB,CAAvD,EAA0D;EACxD,UAAM,IAAI,UAAJ,sDAA6D,QAA7D,EAAN;EACD;;EACD,SAAO,SAAP;EACD;EAeK,SAAU,mCAAV,CACJ,OADI,EAEJ,YAFI,EAEyD;EAE7D,MAAM,iBAAiB,GAA8C;EACnE,IAAA,IAAI,EAAE,SAD6D;EAEnE,IAAA,KAAK,EAAE,SAF4D;EAGnE,IAAA,IAAI,EAAE,SAH6D;EAInE,IAAA,GAAG,EAAE,SAJ8D;EAKnE,IAAA,IAAI,EAAE,EAL6D;EAMnE,IAAA,MAAM,EAAE,EAN2D;EAOnE,IAAA,MAAM,EAAE,EAP2D;EAQnE,IAAA,WAAW,EAAE,IARsD;EASnE,IAAA,WAAW,EAAE,IATsD;EAUnE,IAAA,UAAU,EAAE;EAVuD,GAArE;EAYA,SAAO,2BAA2B,CAAC,OAAD,EAAU,iBAAiB,CAAC,YAAD,CAA3B,EAA2C,KAA3C,CAAlC;EACD;EAEK,SAAU,wBAAV,CAAmC,OAAnC,EAA6E;EAKjF,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B,EAAkC,SAAlC,CAApC;;EACA,MAAI,YAAY,KAAK,MAArB,EAA6B;EAC3B,QAAM,aAAa,GAAG,qBAAqB,CAAC,MAAtB,CAA6B,UAAC,OAAD,SAAuB;EAAA;EAAA,UAAZ,CAAY;EAAA,UAAT,CAAS;EAAA,UAAN,CAAM;;EACxE;EACA;EACA,UAAI,CAAC,KAAK,MAAN,IAAgB,CAAC,KAAK,MAA1B,EAAkC;EAChC,QAAA,OAAO,CAAC,IAAR,CAAa,CAAb,EAAqC,CAArC;EACD;;EACD,aAAO,OAAP;EACD,KAPqB,EAOnB,EAPmB,CAAtB;EAQA,UAAM,IAAI,UAAJ,uCAA8C,aAAa,CAAC,IAAd,CAAmB,IAAnB,CAA9C,mBAA+E,YAA/E,EAAN;EACD;;EACD,UAAQ,YAAR;EACE,SAAK,QAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAE,QAAb;EAAuB,QAAA,IAAI,EAAE,QAA7B;EAAuC,QAAA,SAAS,EAAE;EAAlD,OAAP;;EACF,SAAK,QAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAE,CAAb;EAAgB,QAAA,IAAI,EAAE,QAAtB;EAAgC,QAAA,SAAS,EAAE;EAA3C,OAAP;;EACF,SAAK,aAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAE,CAAb;EAAgB,QAAA,IAAI,EAAE,aAAtB;EAAqC,QAAA,SAAS,EAAE;EAAhD,OAAP;;EACF,SAAK,aAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAE,CAAb;EAAgB,QAAA,IAAI,EAAE,aAAtB;EAAqC,QAAA,SAAS,EAAE;EAAhD,OAAP;;EACF,SAAK,YAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAE,CAAb;EAAgB,QAAA,IAAI,EAAE,YAAtB;EAAoC,QAAA,SAAS,EAAE;EAA/C,OAAP;;EAVJ;;EAaA,MAAI,MAAM,GAAG,OAAO,CAAC,sBAArB;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B,MAAM,GAAG,MAAT;;EAC1B,MAAI,OAAO,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,QAAM,YAAY,GAAG,QAAQ,CAAC,MAAD,CAA7B;EACA,QAAI,YAAY,KAAK,MAArB,EAA6B,OAAO;EAAE,MAAA,SAAS,EAAE,MAAb;EAAqB,MAAA,IAAI,EAAE,YAA3B;EAAyC,MAAA,SAAS,EAAE;EAApD,KAAP;EAC7B,UAAM,IAAI,UAAJ,qEAA4E,YAA5E,EAAN;EACD;;EACD,MAAI,WAAW,CAAC,MAAD,CAAX,IAAuB,MAAM,GAAG,CAAhC,IAAqC,MAAM,GAAG,CAAlD,EAAqD;EACnD,UAAM,IAAI,UAAJ,qEAA4E,MAA5E,EAAN;EACD;;EACD,MAAM,SAAS,GAAGR,WAAS,CAAC,MAAD,CAA3B;;EACA,UAAQ,SAAR;EACE,SAAK,CAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAT,SAAF;EAAa,QAAA,IAAI,EAAE,QAAnB;EAA6B,QAAA,SAAS,EAAE;EAAxC,OAAP;;EACF,SAAK,CAAL;EACA,SAAK,CAAL;EACA,SAAK,CAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAT,SAAF;EAAa,QAAA,IAAI,EAAE,aAAnB;EAAkC,QAAA,SAAS,WAAE,EAAF,EAAS,IAAI,SAAb;EAA3C,OAAP;;EACF,SAAK,CAAL;EACA,SAAK,CAAL;EACA,SAAK,CAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAT,SAAF;EAAa,QAAA,IAAI,EAAE,aAAnB;EAAkC,QAAA,SAAS,WAAE,EAAF,EAAS,IAAI,SAAb;EAA3C,OAAP;;EACF,SAAK,CAAL;EACA,SAAK,CAAL;EACA,SAAK,CAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAT,SAAF;EAAa,QAAA,IAAI,EAAE,YAAnB;EAAiC,QAAA,SAAS,WAAE,EAAF,EAAS,IAAI,SAAb;EAA1C,OAAP;;EACF;EACE,YAAM,IAAI,UAAJ,qEAA4E,MAA5E,EAAN;EAhBJ;EAkBD;EAEM,IAAM,QAAQ,GAAG,MAAM,CAAC,YAAD,CAAvB;EAiCP;EACA;;EACM,SAAU,eAAV,CAMJ,OANI,EAOJ,GAPI,EAQJ,SARI,EASJ,iBATI,EAUwC;EAAA,MAA5C,WAA4C,uEAAF,EAAE;EAE5C,MAAM,eAAe,GAA0C,EAA/D;;EAF4C,8CAGP,qBAHO;EAAA;;EAAA;EAG5C,2DAA4D;EAAA;EAAA,UAA9C,SAA8C;EAAA,UAApC,QAAoC;;EAC1D,UAAI,SAAS,KAAK,UAAd,IAA4B,SAAS,KAAK,QAA9C,EAAwD;EACtD,QAAA,eAAe,CAAC,IAAhB,CAAqB,SAArB;EACD;EACF;EAP2C;EAAA;EAAA;EAAA;EAAA;;EAQ5C,EAAA,eAAe,CAAC,IAAhB,OAAA,eAAe,qBAAS,WAAT,EAAf;EACA,MAAI,UAAU,GAAiE,iBAA/E;;EACA,MAAI,UAAU,KAAK,QAAnB,EAA6B;EAC3B,IAAA,UAAU,GAAG,SAAb;EACD,GAFD,MAEO,IAAI,UAAU,KAAK,SAAnB,EAA8B;EACnC,IAAA,eAAe,CAAC,IAAhB,CAAqB,UAArB;EACD;;EACD,MAAM,aAAa,aACd,eADc,CAAnB;;EAGA,sCAAuB,eAAvB,sCAAwC;EAAnC,QAAM,QAAQ,uBAAd;EACH,QAAM,MAAM,GAAG,UAAU,CAAC,GAAX,CAAe,QAAf,CAAf;EACA,QAAI,MAAM,KAAK,SAAf,EAA0B,aAAa,CAAC,IAAd,CAAmB,MAAnB;EAC3B;;EACD,MAAI,MAAM,GAAG,SAAS,CAAC,OAAD,EAAU,GAAV,EAAe,aAAf,EAA8B,UAA9B,CAAtB;;EACA,MAAI,MAAM,KAAK,SAAX,IAAwB,iBAAiB,KAAK,QAAlD,EAA4D;EAC1D,UAAM,IAAI,UAAJ,WAAkB,GAAlB,kBAAN;EACD,GAzB2C;;;EA2B5C,MAAI,YAAY,CAAC,GAAb,CAAiB,MAAjB,CAAJ,EAA4E;EAC1E;EACA;EACA,WAAO,YAAY,CAAC,GAAb,CAAiB,MAAjB,CAAP;EACD;;EACD,SAAO,MAAP;EACD;EAEK,SAAU,wBAAV,CAAmC,OAAnC,EAQL;EACC,MAAM,UAAU,GAAG,OAAO,CAAC,UAA3B;EACA,MAAI,UAAU,KAAK,SAAnB,EAA8B,OAAO,UAAP;EAE9B,MAAI,eAAe,GAAoB,QAAvC;EACA,MAAI,YAAY,GAAG,KAAnB;EACA,MAAI,IAAJ,EAAU,KAAV,EAAiB,GAAjB,EAAsB,IAAtB,EAA4B,MAA5B,EAAoC,MAApC,EAA4C,WAA5C,EAAyD,WAAzD,EAAsE,UAAtE,EAAkF,QAAlF,EAA4F,QAA5F,EAAsG,MAAtG;;EACA,MAAI,QAAQ,CAAC,UAAD,CAAZ,EAA0B;EACxB,QAAI,uBAAuB,CAAC,UAAD,CAAvB,IAAuC,cAAc,CAAC,UAAD,CAAzD,EAAuE,OAAO,UAAP;EACvE,QAAI,kBAAkB,CAAC,UAAD,CAAtB,EAAoC,OAAO,sBAAsB,CAAC,UAAD,CAA7B;EACpC,IAAA,QAAQ,GAAG,iCAAiC,CAAC,UAAD,CAA5C;EACA,QAAM,UAAU,GAAG,cAAc,CAAC,QAAD,EAAW,CAC1C,KAD0C,EAE1C,MAF0C,EAG1C,aAH0C,EAI1C,aAJ0C,EAK1C,QAL0C,EAM1C,OAN0C,EAO1C,WAP0C,EAQ1C,YAR0C,EAS1C,QAT0C,EAU1C,MAV0C,CAAX,CAAjC;EAYA,QAAM,MAAM,GAAG,qBAAqB,CAAC,UAAD,EAAa,UAAb,EAAyB,EAAzB,CAApC;EACA,QAAM,WAAW,GAAGE,cAAY,CAAC,IAAD,CAAhC;EACA,IAAA,WAAW,CAAC,QAAZ,GAAuB,WAAvB;;EAlBwB,gCAmB4D,+BAA+B,CACjH,QADiH,EAEjH,MAFiH,EAGjH,WAHiH,CAnB3F;;EAmBrB,IAAA,IAnBqB,yBAmBrB,IAnBqB;EAmBf,IAAA,KAnBe,yBAmBf,KAnBe;EAmBR,IAAA,GAnBQ,yBAmBR,GAnBQ;EAmBH,IAAA,IAnBG,yBAmBH,IAnBG;EAmBG,IAAA,MAnBH,yBAmBG,MAnBH;EAmBW,IAAA,MAnBX,yBAmBW,MAnBX;EAmBmB,IAAA,WAnBnB,yBAmBmB,WAnBnB;EAmBgC,IAAA,WAnBhC,yBAmBgC,WAnBhC;EAmB6C,IAAA,UAnB7C,yBAmB6C,UAnB7C;EAwBxB;EACA;EACA;EACA,IAAA,MAAM,GAAI,UAAyC,CAAC,MAApD;EACA,QAAI,MAAM,KAAK,SAAf,EAA0B,eAAe,GAAG,MAAlB;EAC1B,IAAA,QAAQ,GAAI,UAAyC,CAAC,QAAtD;EACD,GA9BD,MA8BO;EACL,QAAI,QAAJ,EAAc,CAAd;;EADK,6BAGH,gBAAgB,CAAC,QAAQ,CAAC,UAAD,CAAT,CAHb;;EAEF,IAAA,IAFE,sBAEF,IAFE;EAEI,IAAA,KAFJ,sBAEI,KAFJ;EAEW,IAAA,GAFX,sBAEW,GAFX;EAEgB,IAAA,IAFhB,sBAEgB,IAFhB;EAEsB,IAAA,MAFtB,sBAEsB,MAFtB;EAE8B,IAAA,MAF9B,sBAE8B,MAF9B;EAEsC,IAAA,WAFtC,sBAEsC,WAFtC;EAEmD,IAAA,WAFnD,sBAEmD,WAFnD;EAEgE,IAAA,UAFhE,sBAEgE,UAFhE;EAE4E,IAAA,QAF5E,sBAE4E,QAF5E;EAEsF,IAAA,QAFtF,sBAEsF,QAFtF;EAEgG,IAAA,MAFhG,sBAEgG,MAFhG;EAEwG,IAAA,CAFxG,sBAEwG,CAFxG;EAIL,QAAI,QAAJ,EAAc,QAAQ,GAAG,QAAX;;EACd,QAAI,CAAJ,EAAO;EACL,MAAA,eAAe,GAAG,OAAlB;EACD,KAFD,MAEO,IAAI,CAAC,MAAL,EAAa;EAClB,MAAA,eAAe,GAAG,MAAlB;EACD;;EACD,QAAI,CAAC,QAAL,EAAe,QAAQ,GAAG,kBAAkB,EAA7B;EACf,IAAA,QAAQ,GAAG,kBAAkB,CAAC,QAAD,CAA7B;EACA,IAAA,YAAY,GAAG,IAAf;EACD;;EACD,MAAI,QAAQ,KAAK,SAAjB,EAA4B;EAC1B,IAAA,QAAQ,GAAG,kBAAkB,CAAC,QAAD,CAA7B;EACA,QAAI,QAAQ,GAAG,CAAf;EACA,QAAI,eAAe,KAAK,QAAxB,EAAkC,QAAQ,GAAG,yBAAyB,CAAC,QAAQ,CAAC,MAAD,CAAT,CAApC;EAClC,QAAM,gBAAgB,GAAG,0BAA0B,CACjD,IADiD,EAEjD,KAFiD,EAGjD,GAHiD,EAIjD,IAJiD,EAKjD,MALiD,EAMjD,MANiD,EAOjD,WAPiD,EAQjD,WARiD,EASjD,UATiD,EAUjD,eAViD,EAWjD,QAXiD,EAYjD,QAZiD,EAajD,YAbiD,EAcjD,QAdiD,EAejD,YAfiD,CAAnD;EAiBA,WAAO,2BAA2B,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,QAA7B,CAAlC;EACD;;EACD,SAAO,kBAAkB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,QAAnB,CAAzB;EACD;EAEK,SAAU,0BAAV,CACJ,KADI,EAEJ,MAFI,EAGJ,KAHI,EAIJ,IAJI,EAKJ,KALI,EAMJ,OANI,EAOJ,OAPI,EAQJ,YARI,EASJ,YATI,EAUJ,WAVI,EAUe;EAEnB,2BAAwB,CACtB,CAAC,OAAD,EAAU,KAAV,CADsB,EAEtB,CAAC,QAAD,EAAW,MAAX,CAFsB,EAGtB,CAAC,OAAD,EAAU,KAAV,CAHsB,EAItB,CAAC,MAAD,EAAS,IAAT,CAJsB,EAKtB,CAAC,OAAD,EAAU,KAAV,CALsB,EAMtB,CAAC,SAAD,EAAY,OAAZ,CANsB,EAOtB,CAAC,SAAD,EAAY,OAAZ,CAPsB,EAQtB,CAAC,cAAD,EAAiB,YAAjB,CARsB,EAStB,CAAC,cAAD,EAAiB,YAAjB,CATsB,EAUtB,CAAC,aAAD,EAAgB,WAAhB,CAVsB,CAAxB,4BAWY;EAXP;EAAA,QAAO,IAAP;EAAA,QAAa,CAAb;;EAYH,QAAI,CAAC,KAAK,CAAV,EAAa;EACX;EACA;EACA,aAAO,YAAY,CAAC,GAAb,CAAiB,IAAjB,CAAP;EACD;EACF;;EACD,SAAO,YAAP;EACD;EAEK,SAAU,wBAAV,CACJ,KADI,EAEJ,KAFI,EAEK;EAET,MAAI,gBAAgB,CAAC,OAAjB,CAAyB,KAAzB,IAAkC,gBAAgB,CAAC,OAAjB,CAAyB,KAAzB,CAAtC,EAAuE,OAAO,KAAP;EACvE,SAAO,KAAP;EACD;;EAED,SAAS,sBAAT,CACE,YADF,EAEE,WAFF,EAEgB;EAEd,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,OAAO,KAAK,SAAhB,EAA2B,OAAO,GAAGA,cAAY,CAAC,IAAD,CAAtB;EAC3B,SAAOD,cAAY,CAACC,cAAY,CAAC,IAAD,CAAb,EAAqB,OAArB,EAA8B;EAAE,IAAA,WAAW,EAAX;EAAF,GAA9B,CAAnB;EACD;;EA6EK,SAAU,qBAAV,CASJ,GATI,EAUJ,MAVI,EAWJ,cAXI,EAY2G;EAAA,kFAA5D;EAAE,IAAA,uBAAuB,EAAE;EAA3B,GAA4D;EAAA,MAA7G,uBAA6G,SAA7G,uBAA6G;;EAE/G,MAAM,MAAM,GAA6CA,cAAY,CAAC,IAAD,CAArE;EACA,MAAI,GAAG,GAAG,KAAV;;EAH+G,8CAIxF,MAJwF;EAAA;;EAAA;EAI/G,2DAA+B;EAAA,UAApB,QAAoB;EAC7B,UAAI,KAAK,GAAG,GAAG,CAAC,QAAD,CAAf;;EACA,UAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,QAAA,GAAG,GAAG,IAAN;;EACA,YAAI,aAAa,CAAC,GAAd,CAAkB,QAAlB,CAAJ,EAAiC;EAC/B;EACA;EACA;EACA,UAAA,KAAK,GAAG,aAAa,CAAC,GAAd,CAAkB,QAAlB,EAA6B,KAA7B,CAAR;EACD;;EACD,QAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,KAAnB;EACD,OATD,MASO,IAAI,cAAc,KAAK,SAAvB,EAAkC;EACvC;EACA;EACA,YAAIN,eAAa,CAAC,IAAd,CAAmB,cAAnB,EAAmC,QAAnC,CAAJ,EAAkD;EAChD,gBAAM,IAAI,SAAJ,8BAAoC,QAApC,4BAAN;EACD;;EACD,QAAA,KAAK,GAAG,gBAAgB,CAAC,GAAjB,CAAqB,QAArB,CAAR;EACA,QAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,KAAnB;EACD;EACF;EAxB8G;EAAA;EAAA;EAAA;EAAA;;EAyB/G,MAAI,cAAc,KAAK,SAAnB,IAAgC,CAAC,GAArC,EAA0C;EACxC,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,MAAK,MAAM,CAAC,GAAP,KAAe,SAAhB,MAAgC,MAAM,CAAC,OAAP,KAAmB,SAAnD,CAAJ,EAAmE;EACjE,UAAM,IAAI,UAAJ,CAAe,0DAAf,CAAN;EACD;;EACD,SAAO,MAAP;EACD;EAmBK,SAAU,oBAAV,CACJ,GADI,EAEwC;EAAA,MAA5C,YAA4C,uEAAV,UAAU;EAE5C;EACA,MAAM,MAAM,GAAG,CAAC,MAAD,EAAS,aAAT,EAAwB,aAAxB,EAAuC,QAAvC,EAAiD,YAAjD,EAA+D,QAA/D,CAAf;EACA,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAD,EAAM,MAAN,EAAc,SAAd,EAAyB;EAAE,IAAA,uBAAuB,EAAE;EAA3B,GAAzB,CAArC;EACA,MAAM,MAAM,GAAwB,EAApC;;EACA,8BAAoB,MAApB,+BAA4B;EAAvB,QAAM,KAAK,eAAX;EACH,QAAM,SAAS,GAAG,8BAA8B,CAAC,OAAD,EAAU,KAAV,CAAhD;;EACA,QAAI,SAAS,KAAK,SAAlB,EAA6B;EAC3B,MAAA,MAAM,CAAC,KAAD,CAAN,GAAgB,SAAS,CAAC,KAA1B;EACD,KAFD,MAEO,IAAI,YAAY,KAAK,UAArB,EAAiC;EACtC,MAAA,MAAM,CAAC,KAAD,CAAN,GAAgB,CAAhB;EACD;EACF;;EACD,SAAO,MAAP;EACD;EAEK,SAAU,cAAV,CACJ,SADI,EAEJ,OAFI,EAEgC;EAEpC,MAAI,IAAI,GAAG,SAAX;;EACA,MAAI,QAAQ,CAAC,IAAD,CAAZ,EAAoB;EAClB,QAAI,cAAc,CAAC,IAAD,CAAlB,EAA0B,OAAO,IAAP;;EAC1B,QAAI,uBAAuB,CAAC,IAAD,CAA3B,EAAmC;EACjC,MAAA,kBAAkB,CAAC,OAAD,CAAlB,CADiC;;EAEjC,MAAA,IAAI,GAAG,kCAAkC,CACvC,OAAO,CAAC,IAAD,EAAO,SAAP,CADgC,EAEvC,OAAO,CAAC,IAAD,EAAO,OAAP,CAFgC,EAGvC,OAAO,CAAC,IAAD,EAAO,QAAP,CAHgC,CAAzC;EAKD;;EACD,QAAI,kBAAkB,CAAC,IAAD,CAAtB,EAA8B;EAC5B,MAAA,kBAAkB,CAAC,OAAD,CAAlB,CAD4B;;EAE5B,aAAO,kBAAkB,CACvB,OAAO,CAAC,IAAD,EAAO,QAAP,CADgB,EAEvB,OAAO,CAAC,IAAD,EAAO,SAAP,CAFgB,EAGvB,OAAO,CAAC,IAAD,EAAO,OAAP,CAHgB,EAIvB,OAAO,CAAC,IAAD,EAAO,QAAP,CAJgB,CAAzB;EAMD;;EACD,QAAM,SAAQ,GAAG,iCAAiC,CAAC,IAAD,CAAlD;;EACA,QAAM,UAAU,GAAG,cAAc,CAAC,SAAD,EAAW,CAAC,KAAD,EAAQ,OAAR,EAAiB,WAAjB,EAA8B,MAA9B,CAAX,CAAjC;EACA,QAAM,MAAM,GAAG,qBAAqB,CAAC,IAAD,EAAO,UAAP,EAAmB,EAAnB,CAApC;EACA,WAAO,sBAAsB,CAAC,SAAD,EAAW,MAAX,EAAmB,OAAnB,CAA7B;EACD;;EACD,EAAA,kBAAkB,CAAC,OAAD,CAAlB,CA3BoC;;EA4BpC,8BAA0C,uBAAuB,CAAC,QAAQ,CAAC,IAAD,CAAT,CAAjE;EAAA,MAAQ,IAAR,yBAAQ,IAAR;EAAA,MAAc,KAAd,yBAAc,KAAd;EAAA,MAAqB,GAArB,yBAAqB,GAArB;EAAA,MAA0B,QAA1B,yBAA0B,QAA1B;EAAA,MAAoC,CAApC,yBAAoC,CAApC;;EACA,MAAI,CAAJ,EAAO,MAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EACP,MAAM,iBAAiB,GAAG,YAAY,CAAC,sBAAD,CAAtC;EACA,SAAO,IAAI,iBAAJ,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC,GAAnC,EAAwC,QAAxC,CAAP,CA/BoC;EAgCrC;EAEK,SAAU,+BAAV,CACJ,QADI,EAEJ,MAFI,EAGJ,OAHI,EAGgC;EAEpC,8BAAqE,oBAAoB,CAAC,MAAD,CAAzF;EAAA,MAAM,IAAN,yBAAM,IAAN;EAAA,MAAY,MAAZ,yBAAY,MAAZ;EAAA,MAAoB,MAApB,yBAAoB,MAApB;EAAA,MAA4B,WAA5B,yBAA4B,WAA5B;EAAA,MAAyC,WAAzC,yBAAyC,WAAzC;EAAA,MAAsD,UAAtD,yBAAsD,UAAtD;;EACA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAD,CAAnC;EACA,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAD,EAAW,MAAX,EAAmB,OAAnB,CAAnC;EACA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAArB;EACA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAAnB;;EAPoC,sBAQ8B,YAAY,CAC5E,IAD4E,EAE5E,MAF4E,EAG5E,MAH4E,EAI5E,WAJ4E,EAK5E,WAL4E,EAM5E,UAN4E,EAO5E,QAP4E,CAR1C;;EAQjC,EAAA,IARiC,iBAQjC,IARiC;EAQ3B,EAAA,MAR2B,iBAQ3B,MAR2B;EAQnB,EAAA,MARmB,iBAQnB,MARmB;EAQX,EAAA,WARW,iBAQX,WARW;EAQE,EAAA,WARF,iBAQE,WARF;EAQe,EAAA,UARf,iBAQe,UARf;EAiBpC,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH,GAAf;EAAoB,IAAA,IAAI,EAAJ,IAApB;EAA0B,IAAA,MAAM,EAAN,MAA1B;EAAkC,IAAA,MAAM,EAAN,MAAlC;EAA0C,IAAA,WAAW,EAAX,WAA1C;EAAuD,IAAA,WAAW,EAAX,WAAvD;EAAoE,IAAA,UAAU,EAAV;EAApE,GAAP;EACD;EAEK,SAAU,kBAAV,CAA6B,IAA7B,EAAmE,OAAnE,EAA2G;EAC/G,MAAI,IAAJ,EACE,KADF,EAEE,GAFF,EAGE,IAHF,EAIE,MAJF,EAKE,MALF,EAME,WANF,EAOE,WAPF,EAQE,UARF,EASE,QATF;;EAUA,MAAI,QAAQ,CAAC,IAAD,CAAZ,EAAoB;EAClB,QAAI,kBAAkB,CAAC,IAAD,CAAtB,EAA8B,OAAO,IAAP;;EAC9B,QAAI,uBAAuB,CAAC,IAAD,CAA3B,EAAmC;EACjC,MAAA,kBAAkB,CAAC,OAAD,CAAlB,CADiC;;EAEjC,aAAO,kCAAkC,CACvC,OAAO,CAAC,IAAD,EAAO,SAAP,CADgC,EAEvC,OAAO,CAAC,IAAD,EAAO,OAAP,CAFgC,EAGvC,OAAO,CAAC,IAAD,EAAO,QAAP,CAHgC,CAAzC;EAKD;;EACD,QAAI,cAAc,CAAC,IAAD,CAAlB,EAA0B;EACxB,MAAA,kBAAkB,CAAC,OAAD,CAAlB,CADwB;;EAExB,aAAO,sBAAsB,CAC3B,OAAO,CAAC,IAAD,EAAO,QAAP,CADoB,EAE3B,OAAO,CAAC,IAAD,EAAO,SAAP,CAFoB,EAG3B,OAAO,CAAC,IAAD,EAAO,OAAP,CAHoB,EAI3B,CAJ2B,EAK3B,CAL2B,EAM3B,CAN2B,EAO3B,CAP2B,EAQ3B,CAR2B,EAS3B,CAT2B,EAU3B,OAAO,CAAC,IAAD,EAAO,QAAP,CAVoB,CAA7B;EAYD;;EAED,IAAA,QAAQ,GAAG,iCAAiC,CAAC,IAAD,CAA5C;EACA,QAAM,UAAU,GAAG,cAAc,CAAC,QAAD,EAAW,CAC1C,KAD0C,EAE1C,MAF0C,EAG1C,aAH0C,EAI1C,aAJ0C,EAK1C,QAL0C,EAM1C,OAN0C,EAO1C,WAP0C,EAQ1C,YAR0C,EAS1C,QAT0C,EAU1C,MAV0C,CAAX,CAAjC;EAYA,QAAM,MAAM,GAAG,qBAAqB,CAAC,IAAD,EAAO,UAAP,EAAmB,EAAnB,CAApC;;EAvCkB,iCAwCkE,+BAA+B,CACjH,QADiH,EAEjH,MAFiH,EAGjH,OAHiH,CAxCjG;;EAwCf,IAAA,IAxCe,0BAwCf,IAxCe;EAwCT,IAAA,KAxCS,0BAwCT,KAxCS;EAwCF,IAAA,GAxCE,0BAwCF,GAxCE;EAwCG,IAAA,IAxCH,0BAwCG,IAxCH;EAwCS,IAAA,MAxCT,0BAwCS,MAxCT;EAwCiB,IAAA,MAxCjB,0BAwCiB,MAxCjB;EAwCyB,IAAA,WAxCzB,0BAwCyB,WAxCzB;EAwCsC,IAAA,WAxCtC,0BAwCsC,WAxCtC;EAwCmD,IAAA,UAxCnD,0BAwCmD,UAxCnD;EA6CnB,GA7CD,MA6CO;EACL,IAAA,kBAAkB,CAAC,OAAD,CAAlB,CADK;;EAEL,QAAI,CAAJ;;EAFK,gCAIH,2BAA2B,CAAC,QAAQ,CAAC,IAAD,CAAT,CAJxB;;EAGF,IAAA,IAHE,yBAGF,IAHE;EAGI,IAAA,KAHJ,yBAGI,KAHJ;EAGW,IAAA,GAHX,yBAGW,GAHX;EAGgB,IAAA,IAHhB,yBAGgB,IAHhB;EAGsB,IAAA,MAHtB,yBAGsB,MAHtB;EAG8B,IAAA,MAH9B,yBAG8B,MAH9B;EAGsC,IAAA,WAHtC,yBAGsC,WAHtC;EAGmD,IAAA,WAHnD,yBAGmD,WAHnD;EAGgE,IAAA,UAHhE,yBAGgE,UAHhE;EAG4E,IAAA,QAH5E,yBAG4E,QAH5E;EAGsF,IAAA,CAHtF,yBAGsF,CAHtF;EAKL,QAAI,CAAJ,EAAO,MAAM,IAAI,UAAJ,CAAe,8CAAf,CAAN;EACP,IAAA,cAAc,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAAd;EACA,QAAI,QAAQ,KAAK,SAAjB,EAA4B,QAAQ,GAAG,kBAAkB,EAA7B;EAC5B,IAAA,QAAQ,GAAG,kBAAkB,CAAC,QAAD,CAA7B;EACD;;EACD,SAAO,sBAAsB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,EAA+E,QAA/E,CAA7B;EACD;EAEK,SAAU,kBAAV,CAA6B,IAA7B,EAA4D;EAChE,MAAI,kBAAkB,CAAC,IAAD,CAAtB,EAA8B,OAAO,IAAP;;EAC9B,8BACE,wBAAwB,CAAC,IAAD,CAD1B;EAAA,MAAM,KAAN,yBAAM,KAAN;EAAA,MAAa,MAAb,yBAAa,MAAb;EAAA,MAAqB,KAArB,yBAAqB,KAArB;EAAA,MAA4B,IAA5B,yBAA4B,IAA5B;EAAA,MAAkC,KAAlC,yBAAkC,KAAlC;EAAA,MAAyC,OAAzC,yBAAyC,OAAzC;EAAA,MAAkD,OAAlD,yBAAkD,OAAlD;EAAA,MAA2D,YAA3D,yBAA2D,YAA3D;EAAA,MAAyE,YAAzE,yBAAyE,YAAzE;EAAA,MAAuF,WAAvF,yBAAuF,WAAvF;;EAEA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,SAAO,IAAI,gBAAJ,CACL,KADK,EAEL,MAFK,EAGL,KAHK,EAIL,IAJK,EAKL,KALK,EAML,OANK,EAOL,OAPK,EAQL,YARK,EASL,YATK,EAUL,WAVK,CAAP;EAYD;EAEK,SAAU,iBAAV,CAA4B,IAA5B,EAA0D;EAC9D,MAAI,iBAAiB,CAAC,IAAD,CAArB,EAA6B,OAAO,IAAP;;EAC7B,MAAI,uBAAuB,CAAC,IAAD,CAA3B,EAAmC;EACjC,QAAM,gBAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;;EACA,WAAO,IAAI,gBAAJ,CAAoB,OAAO,CAAC,IAAD,EAAO,gBAAP,CAA3B,CAAP;EACD;;EACD,MAAM,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAD,CAAT,CAA/B;EACA,MAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,SAAO,IAAI,eAAJ,CAAoB,EAApB,CAAP;EACD;EAEK,SAAU,kBAAV,CACJ,SADI,EAEJ,OAFI,EAEoC;EAExC,MAAI,IAAI,GAAG,SAAX;;EACA,MAAI,QAAQ,CAAC,IAAD,CAAZ,EAAoB;EAClB,QAAI,kBAAkB,CAAC,IAAD,CAAtB,EAA8B,OAAO,IAAP;;EAC9B,QAAI,UAAJ,EAAyC,cAAzC;;EACA,QAAI,OAAO,CAAC,IAAD,EAAO,QAAP,CAAX,EAA6B;EAC3B,MAAA,UAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlB;EACA,MAAA,cAAc,GAAG,KAAjB;EACD,KAHD,MAGO;EACL,UAAI,oBAAmB,GAAG,IAAI,CAAC,QAA/B;EACA,MAAA,cAAc,GAAG,oBAAmB,KAAK,SAAzC;EACA,UAAI,oBAAmB,KAAK,SAA5B,EAAuC,oBAAmB,GAAG,kBAAkB,EAAxC;EACvC,MAAA,UAAQ,GAAG,kBAAkB,CAAC,oBAAD,CAA7B;EACD,KAXiB;EAalB;EACA;;;EACA,IAAA,IAAI,GAAG,IAAP;EACA,QAAM,UAAU,GAAG,cAAc,CAAC,UAAD,EAAW,CAAC,KAAD,EAAQ,OAAR,EAAiB,WAAjB,EAA8B,MAA9B,CAAX,CAAjC;EACA,QAAM,MAAM,GAAG,qBAAqB,CAAC,IAAD,EAAO,UAAP,EAAmB,EAAnB,CAApC,CAjBkB;EAmBlB;EACA;;EACA,QAAI,cAAc,IAAI,MAAM,CAAC,KAAP,KAAiB,SAAnC,IAAgD,MAAM,CAAC,SAAP,KAAqB,SAArE,IAAkF,MAAM,CAAC,IAAP,KAAgB,SAAtG,EAAiH;EAC/G,MAAA,MAAM,CAAC,IAAP,GAAc,IAAd;EACD;;EACD,WAAO,0BAA0B,CAAC,UAAD,EAAW,MAAX,EAAmB,OAAnB,CAAjC;EACD;;EAED,EAAA,kBAAkB,CAAC,OAAD,CAAlB,CA9BwC;;EA+BxC,+BAAsE,2BAA2B,CAAC,QAAQ,CAAC,IAAD,CAAT,CAAjG;EAAA,MAAM,KAAN,0BAAM,KAAN;EAAA,MAAa,GAAb,0BAAa,GAAb;EAAA,MAAkB,gBAAlB,0BAAkB,gBAAlB;EAAA,MAA8C,mBAA9C,0BAAoC,QAApC;;EACA,MAAI,QAAQ,GAAmD,mBAA/D;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B,QAAQ,GAAG,kBAAkB,EAA7B;EAC5B,EAAA,QAAQ,GAAG,kBAAkB,CAAC,QAAD,CAA7B;;EAEA,MAAI,gBAAgB,KAAK,SAAzB,EAAoC;EAClC,IAAA,aAAa,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAAb;EACA,WAAO,sBAAsB,CAAC,KAAD,EAAQ,GAAR,EAAa,QAAb,CAA7B;EACD;;EACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAD,EAAQ,GAAR,EAAa,QAAb,EAAuB,gBAAvB,CAArC;EACA,SAAO,0BAA0B,CAAC,QAAD,EAAW,MAAX,CAAjC;EACD;EAEK,SAAU,cAAV,CACJ,SADI,EAEuE;EAAA,MAA3E,QAA2E,uEAAX,WAAW;EAE3E,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,IAAJ,EAAU,MAAV,EAAkB,MAAlB,EAA0B,WAA1B,EAAuC,WAAvC,EAAoD,UAApD,EAAgE,QAAhE;;EACA,MAAI,QAAQ,CAAC,IAAD,CAAZ,EAAoB;EAClB,QAAI,cAAc,CAAC,IAAD,CAAlB,EAA0B,OAAO,IAAP;;EAC1B,QAAI,uBAAuB,CAAC,IAAD,CAA3B,EAAmC;EACjC,MAAA,IAAI,GAAG,kCAAkC,CACvC,OAAO,CAAC,IAAD,EAAO,SAAP,CADgC,EAEvC,OAAO,CAAC,IAAD,EAAO,OAAP,CAFgC,EAGvC,OAAO,CAAC,IAAD,EAAO,QAAP,CAHgC,CAAzC;EAKD;;EACD,QAAI,kBAAkB,CAAC,IAAD,CAAtB,EAA8B;EAC5B,UAAM,kBAAiB,GAAG,YAAY,CAAC,sBAAD,CAAtC;;EACA,aAAO,IAAI,kBAAJ,CACL,OAAO,CAAC,IAAD,EAAO,QAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,UAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,UAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,eAAP,CAJF,EAKL,OAAO,CAAC,IAAD,EAAO,eAAP,CALF,EAML,OAAO,CAAC,IAAD,EAAO,cAAP,CANF,CAAP;EAQD;;EACD,IAAA,QAAQ,GAAG,iCAAiC,CAAC,IAAD,CAA5C;;EACA,QAAI,QAAQ,CAAC,QAAD,CAAR,KAAuB,SAA3B,EAAsC;EACpC,YAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EACD;;EAvBiB,iCAwBgD,oBAAoB,CAAC,IAAD,CAxBpE;;EAwBf,IAAA,IAxBe,0BAwBf,IAxBe;EAwBT,IAAA,MAxBS,0BAwBT,MAxBS;EAwBD,IAAA,MAxBC,0BAwBD,MAxBC;EAwBO,IAAA,WAxBP,0BAwBO,WAxBP;EAwBoB,IAAA,WAxBpB,0BAwBoB,WAxBpB;EAwBiC,IAAA,UAxBjC,0BAwBiC,UAxBjC;;EAAA,yBAyBgD,YAAY,CAC5E,IAD4E,EAE5E,MAF4E,EAG5E,MAH4E,EAI5E,WAJ4E,EAK5E,WAL4E,EAM5E,UAN4E,EAO5E,QAP4E,CAzB5D;;EAyBf,IAAA,IAzBe,kBAyBf,IAzBe;EAyBT,IAAA,MAzBS,kBAyBT,MAzBS;EAyBD,IAAA,MAzBC,kBAyBD,MAzBC;EAyBO,IAAA,WAzBP,kBAyBO,WAzBP;EAyBoB,IAAA,WAzBpB,kBAyBoB,WAzBpB;EAyBiC,IAAA,UAzBjC,kBAyBiC,UAzBjC;EAkCnB,GAlCD,MAkCO;EAAA,gCACuE,uBAAuB,CACjG,QAAQ,CAAC,IAAD,CADyF,CAD9F;;EACF,IAAA,IADE,yBACF,IADE;EACI,IAAA,MADJ,yBACI,MADJ;EACY,IAAA,MADZ,yBACY,MADZ;EACoB,IAAA,WADpB,yBACoB,WADpB;EACiC,IAAA,WADjC,yBACiC,WADjC;EAC8C,IAAA,UAD9C,yBAC8C,UAD9C;EAC0D,IAAA,QAD1D,yBAC0D,QAD1D;EAIL,IAAA,UAAU,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,WAAvB,EAAoC,WAApC,EAAiD,UAAjD,CAAV;;EACA,QAAI,QAAQ,KAAK,SAAb,IAA0B,QAAQ,KAAK,SAA3C,EAAsD;EACpD,YAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EACD;EACF;;EACD,MAAM,iBAAiB,GAAG,YAAY,CAAC,sBAAD,CAAtC;EACA,SAAO,IAAI,iBAAJ,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,MAApC,EAA4C,WAA5C,EAAyD,WAAzD,EAAsE,UAAtE,CAAP;EACD;EAEK,SAAU,mBAAV,CACJ,IADI,EAEJ,OAFI,EAEqC;EAEzC,MAAI,QAAQ,CAAC,IAAD,CAAZ,EAAoB;EAClB,QAAI,mBAAmB,CAAC,IAAD,CAAvB,EAA+B,OAAO,IAAP;;EAC/B,QAAM,UAAQ,GAAG,iCAAiC,CAAC,IAAD,CAAlD;;EACA,QAAM,UAAU,GAAG,cAAc,CAAC,UAAD,EAAW,CAAC,OAAD,EAAU,WAAV,EAAuB,MAAvB,CAAX,CAAjC;EACA,QAAM,MAAM,GAAG,qBAAqB,CAAC,IAAD,EAAO,UAAP,EAAmB,EAAnB,CAApC;EACA,WAAO,2BAA2B,CAAC,UAAD,EAAW,MAAX,EAAmB,OAAnB,CAAlC;EACD;;EAED,EAAA,kBAAkB,CAAC,OAAD,CAAlB,CAVyC;;EAWzC,+BAAsE,4BAA4B,CAAC,QAAQ,CAAC,IAAD,CAAT,CAAlG;EAAA,MAAM,IAAN,0BAAM,IAAN;EAAA,MAAY,KAAZ,0BAAY,KAAZ;EAAA,MAAmB,eAAnB,0BAAmB,eAAnB;EAAA,MAA8C,mBAA9C,0BAAoC,QAApC,CAXyC;;;EAazC,MAAI,QAAQ,GAAuC,mBAAnD;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B,QAAQ,GAAG,kBAAkB,EAA7B;EAC5B,EAAA,QAAQ,GAAG,kBAAkB,CAAC,QAAD,CAA7B;;EAEA,MAAI,eAAe,KAAK,SAAxB,EAAmC;EACjC,IAAA,aAAa,CAAC,IAAD,EAAO,KAAP,EAAc,CAAd,CAAb;EACA,WAAO,uBAAuB,CAAC,IAAD,EAAO,KAAP,EAAc,QAAd,CAA9B;EACD;;EACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAD,EAAO,KAAP,EAAc,QAAd,EAAwB,eAAxB,CAAtC;EACA,SAAO,2BAA2B,CAAC,QAAD,EAAW,MAAX,CAAlC;EACD;EAIK,SAAU,0BAAV,CACJ,IADI,EAEJ,KAFI,EAGJ,GAHI,EAIJ,IAJI,EAKJ,MALI,EAMJ,MANI,EAOJ,WAPI,EAQJ,WARI,EASJ,UATI,EAUJ,eAVI,EAWJ,QAXI,EAYJ,QAZI,EAaJ,cAbI,EAcJ,SAdI,EAeJ,WAfI,EAegB;EAEpB,MAAM,QAAQ,GAAG,YAAY,CAAC,0BAAD,CAA7B;EACA,MAAM,EAAE,GAAG,IAAI,QAAJ,CAAa,IAAb,EAAmB,KAAnB,EAA0B,GAA1B,EAA+B,IAA/B,EAAqC,MAArC,EAA6C,MAA7C,EAAqD,WAArD,EAAkE,WAAlE,EAA+E,UAA/E,CAAX;;EAEA,MAAI,eAAe,KAAK,MAApB,IAA8B,SAAS,KAAK,QAAhD,EAA0D;EACxD;EACA;EACA,QAAM,QAAO,GAAG,4BAA4B,CAAC,QAAD,EAAW,EAAX,EAAe,cAAf,CAA5C;;EACA,WAAO,OAAO,CAAC,QAAD,EAAU,gBAAV,CAAd;EACD,GAVmB;EAapB;EACA;;;EACA,MAAI,eAAe,KAAK,OAApB,IAA+B,SAAS,KAAK,KAAjD,EAAwD;EACtD;EACA,QAAM,OAAO,GAAG,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAApC;EACA,QAAI,OAAO,KAAK,IAAhB,EAAsB,MAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EACtB,WAAO,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,QAAZ,CAAvB,CAAP;EACD,GApBmB;;;EAuBpB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,QAAD,EAAW,EAAX,CAA/C;;EAvBoB,8CAwBI,gBAxBJ;EAAA;;EAAA;EAwBpB,2DAA0C;EAAA,UAA/B,SAA+B;EACxC,UAAM,eAAe,GAAG,uBAAuB,CAAC,QAAD,EAAW,SAAX,CAA/C;EACA,UAAM,sBAAsB,GAAG,IAAI,CAAC,QAAL,CAC7B,sBAAsB,CAAC,IAAI,CAAC,MAAL,CAAY,eAAZ,CAAD,EAA+B,IAA/B,EAAqC,YAArC,CADO,CAA/B;;EAGA,UAAI,eAAe,KAAK,QAApB,IAAiC,WAAW,IAAI,sBAAsB,KAAK,QAA/E,EAA0F;EACxF,eAAO,OAAO,CAAC,SAAD,EAAY,gBAAZ,CAAd;EACD;EACF,KAhCmB;EAmCpB;;EAnCoB;EAAA;EAAA;EAAA;EAAA;;EAoCpB,MAAI,SAAS,KAAK,QAAlB,EAA4B;EAC1B,QAAM,SAAS,GAAG,0BAA0B,CAAC,QAAD,CAA5C;EACA,QAAM,cAAc,GAAG,kBAAkB,CAAC,QAAD,CAAlB,GAA+B,OAAO,CAAC,QAAD,EAAW,WAAX,CAAtC,GAAgE,WAAvF,CAF0B;EAI1B;EACA;;EACA,UAAM,IAAI,UAAJ,kBAAyB,SAAzB,6BAAqD,EAAE,CAAC,QAAH,EAArD,iBAAyE,cAAzE,EAAN;EACD,GA3CmB;EA6CpB;;;EACA,MAAM,OAAO,GAAG,4BAA4B,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,EAA7B,EAAiC,cAAjC,CAA5C;EACA,SAAO,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAd;EACD;EAEK,SAAU,uBAAV,CACJ,IADI,EAEJ,OAFI,EAEoC;EAExC,MAAI,IAAJ,EACE,KADF,EAEE,GAFF,EAGE,IAHF,EAIE,MAJF,EAKE,MALF,EAME,WANF,EAOE,WAPF,EAQE,UARF,EASE,QATF,EAUE,MAVF,EAWE,QAXF;EAYA,MAAI,WAAW,GAAG,KAAlB;EACA,MAAI,eAAe,GAAoB,QAAvC;;EACA,MAAI,QAAQ,CAAC,IAAD,CAAZ,EAAoB;EAClB,QAAI,uBAAuB,CAAC,IAAD,CAA3B,EAAmC,OAAO,IAAP;EACnC,IAAA,QAAQ,GAAG,iCAAiC,CAAC,IAAD,CAA5C;EACA,QAAM,UAAU,GAAG,cAAc,CAAC,QAAD,EAAW,CAC1C,KAD0C,EAE1C,MAF0C,EAG1C,aAH0C,EAI1C,aAJ0C,EAK1C,QAL0C,EAM1C,OAN0C,EAO1C,WAP0C,EAQ1C,YAR0C,EAS1C,QAT0C,EAU1C,MAV0C,CAAX,CAAjC;EAYA,QAAM,yBAAyB,GAAG,SAAS,CAAC,UAAD,EAAa,UAAb,EAAyB,QAAzB,CAA3C;EACA,QAAM,MAAM,GAAG,qBAAqB,CAAC,IAAD,EAAO,yBAAP,EAAkC,CAAC,UAAD,CAAlC,CAApC;;EAhBkB,iCAiBkE,+BAA+B,CACjH,QADiH,EAEjH,MAFiH,EAGjH,OAHiH,CAjBjG;;EAiBf,IAAA,IAjBe,0BAiBf,IAjBe;EAiBT,IAAA,KAjBS,0BAiBT,KAjBS;EAiBF,IAAA,GAjBE,0BAiBF,GAjBE;EAiBG,IAAA,IAjBH,0BAiBG,IAjBH;EAiBS,IAAA,MAjBT,0BAiBS,MAjBT;EAiBiB,IAAA,MAjBjB,0BAiBiB,MAjBjB;EAiByB,IAAA,WAjBzB,0BAiByB,WAjBzB;EAiBsC,IAAA,WAjBtC,0BAiBsC,WAjBtC;EAiBmD,IAAA,UAjBnD,0BAiBmD,UAjBnD;EAsBlB,IAAA,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAR,CAA7B;EACA,IAAA,MAAM,GAAG,MAAM,CAAC,MAAhB;;EACA,QAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,MAAA,eAAe,GAAG,MAAlB;EACD,KAFD,MAEO;EACL,MAAA,MAAM,GAAG,QAAQ,CAAC,MAAD,CAAjB;EACD;EACF,GA7BD,MA6BO;EACL,IAAA,kBAAkB,CAAC,OAAD,CAAlB,CADK;;EAEL,QAAI,QAAJ,EAAc,CAAd;;EAFK,gCAIH,gCAAgC,CAAC,QAAQ,CAAC,IAAD,CAAT,CAJ7B;;EAGF,IAAA,IAHE,yBAGF,IAHE;EAGI,IAAA,KAHJ,yBAGI,KAHJ;EAGW,IAAA,GAHX,yBAGW,GAHX;EAGgB,IAAA,IAHhB,yBAGgB,IAHhB;EAGsB,IAAA,MAHtB,yBAGsB,MAHtB;EAG8B,IAAA,MAH9B,yBAG8B,MAH9B;EAGsC,IAAA,WAHtC,yBAGsC,WAHtC;EAGmD,IAAA,WAHnD,yBAGmD,WAHnD;EAGgE,IAAA,UAHhE,yBAGgE,UAHhE;EAG4E,IAAA,QAH5E,yBAG4E,QAH5E;EAGsF,IAAA,MAHtF,yBAGsF,MAHtF;EAG8F,IAAA,CAH9F,yBAG8F,CAH9F;EAGiG,IAAA,QAHjG,yBAGiG,QAHjG;EAKL,QAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,mCAAf,CAAN;;EACf,QAAI,CAAJ,EAAO;EACL,MAAA,eAAe,GAAG,OAAlB;EACD,KAFD,MAEO,IAAI,CAAC,MAAL,EAAa;EAClB,MAAA,eAAe,GAAG,MAAlB;EACD;;EACD,QAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,IAAA,QAAQ,GAAG,IAAI,gBAAJ,CAAqB,QAArB,CAAX;EACA,QAAI,CAAC,QAAL,EAAe,QAAQ,GAAG,kBAAkB,EAA7B;EACf,IAAA,QAAQ,GAAG,kBAAkB,CAAC,QAAD,CAA7B;EACA,IAAA,WAAW,GAAG,IAAd,CAfK;EAgBN;;EACD,MAAI,QAAQ,GAAG,CAAf,CA9DwC;EAgExC;;EACA,MAAI,eAAe,KAAK,QAAxB,EAAkC,QAAQ,GAAG,yBAAyB,CAAC,MAAD,CAApC;EAClC,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAD,CAA/C;EACA,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAD,EAAU,QAAV,CAAlC;EACA,MAAM,gBAAgB,GAAG,0BAA0B,CACjD,IADiD,EAEjD,KAFiD,EAGjD,GAHiD,EAIjD,IAJiD,EAKjD,MALiD,EAMjD,MANiD,EAOjD,WAPiD,EAQjD,WARiD,EASjD,UATiD,EAUjD,eAViD,EAWjD,QAXiD,EAYjD,QAZiD,EAajD,cAbiD,EAcjD,SAdiD,EAejD,WAfiD,CAAnD;EAiBA,SAAO,2BAA2B,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,QAA7B,CAAlC;EACD;EAEK,SAAU,uBAAV,CACJ,MADI,EAEJ,OAFI,EAGJ,QAHI,EAIJ,MAJI,EAKJ,QALI,EAK+B;EAEnC,EAAA,aAAa,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,CAAb;EACA,EAAA,eAAe,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,CAAf;EAEA,EAAA,WAAW,CAAC,MAAD,CAAX;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,SAAT,EAAoB,QAApB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,OAAT,EAAkB,MAAlB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,UAAT,EAAqB,IAArB,CAAP;;EAEA,EAAW;EACT,IAAA,oBAAoB,CAAC,MAAD,EAAS,QAAT,EAAmB;EACrC,MAAA,KAAK,YAAK,MAAM,CAAC,MAAM,CAAC,WAAR,CAAX,eAAoC,oBAAoB,CAAC,MAAD,CAAxD,MADgC;EAErC,MAAA,QAAQ,EAAE,KAF2B;EAGrC,MAAA,UAAU,EAAE,KAHyB;EAIrC,MAAA,YAAY,EAAE;EAJuB,KAAnB,CAApB;EAMD;EACF;EAEK,SAAU,kBAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,MAHI,EAIsD;EAAA,MAA1D,QAA0D,uEAApB,kBAAkB,EAAE;EAE1D,MAAM,iBAAiB,GAAG,YAAY,CAAC,sBAAD,CAAtC;EACA,MAAM,MAAM,GAAGM,cAAY,CAAC,iBAAiB,CAAC,SAAnB,CAA3B;EACA,EAAA,uBAAuB,CAAC,MAAD,EAAS,OAAT,EAAkB,QAAlB,EAA4B,MAA5B,EAAoC,QAApC,CAAvB;EACA,SAAO,MAAP;EACD;EAEK,SAAU,2BAAV,CACJ,MADI,EAEJ,OAFI,EAGJ,QAHI,EAIJ,MAJI,EAKJ,CALI,EAMJ,GANI,EAOJ,CAPI,EAQJ,EARI,EASJ,EATI,EAUJ,EAVI,EAWJ,QAXI,EAW+B;EAEnC,EAAA,cAAc,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,EAA4B,CAA5B,EAA+B,GAA/B,EAAoC,CAApC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,CAAd;EACA,EAAA,mBAAmB,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,EAA4B,CAA5B,EAA+B,GAA/B,EAAoC,CAApC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,CAAnB;EAEA,EAAA,WAAW,CAAC,MAAD,CAAX;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,SAAT,EAAoB,QAApB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,OAAT,EAAkB,MAAlB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,CAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,UAAT,EAAqB,GAArB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,UAAT,EAAqB,CAArB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,eAAT,EAA0B,EAA1B,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,eAAT,EAA0B,EAA1B,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,cAAT,EAAyB,EAAzB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,CAAP;;EAEA,EAAW;EACT,IAAA,MAAM,CAAC,cAAP,CAAsB,MAAtB,EAA8B,QAA9B,EAAwC;EACtC,MAAA,KAAK,YAAK,MAAM,CAAC,MAAM,CAAC,WAAR,CAAX,eAAoC,wBAAwB,CAAC,MAAD,EAAS,MAAT,CAA5D,MADiC;EAEtC,MAAA,QAAQ,EAAE,KAF4B;EAGtC,MAAA,UAAU,EAAE,KAH0B;EAItC,MAAA,YAAY,EAAE;EAJwB,KAAxC;EAMD;EACF;EAEK,SAAU,sBAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,MAHI,EAIJ,CAJI,EAKJ,GALI,EAMJ,CANI,EAOJ,EAPI,EAQJ,EARI,EASJ,EATI,EAUsD;EAAA,MAA1D,QAA0D,uEAApB,kBAAkB,EAAE;EAE1D,MAAM,qBAAqB,GAAG,YAAY,CAAC,0BAAD,CAA1C;EACA,MAAM,MAAM,GAAGA,cAAY,CAAC,qBAAqB,CAAC,SAAvB,CAA3B;EACA,EAAA,2BAA2B,CAAC,MAAD,EAAS,OAAT,EAAkB,QAAlB,EAA4B,MAA5B,EAAoC,CAApC,EAAuC,GAAvC,EAA4C,CAA5C,EAA+C,EAA/C,EAAmD,EAAnD,EAAuD,EAAvD,EAA2D,QAA3D,CAA3B;EACA,SAAO,MAAP;EACD;EAEK,SAAU,2BAAV,CACJ,MADI,EAEJ,QAFI,EAGJ,MAHI,EAIJ,QAJI,EAKJ,gBALI,EAKoB;EAExB,EAAA,aAAa,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,MAA7B,CAAb;EACA,EAAA,eAAe,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,MAA7B,CAAf;EAEA,EAAA,WAAW,CAAC,MAAD,CAAX;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,SAAT,EAAoB,QAApB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,OAAT,EAAkB,MAAlB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,gBAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,eAAT,EAA0B,IAA1B,CAAP;;EAEA,EAAW;EACT,IAAA,MAAM,CAAC,cAAP,CAAsB,MAAtB,EAA8B,QAA9B,EAAwC;EACtC,MAAA,KAAK,YAAK,MAAM,CAAC,MAAM,CAAC,WAAR,CAAX,eAAoC,wBAAwB,CAAC,MAAD,CAA5D,MADiC;EAEtC,MAAA,QAAQ,EAAE,KAF4B;EAGtC,MAAA,UAAU,EAAE,KAH0B;EAItC,MAAA,YAAY,EAAE;EAJwB,KAAxC;EAMD;EACF;EAEK,SAAU,sBAAV,CACJ,QADI,EAEJ,MAFI,EAImB;EAAA,MADvB,QACuB,uEADe,kBAAkB,EACjC;EAAA,MAAvB,gBAAuB,uEAAJ,IAAI;EAEvB,MAAM,qBAAqB,GAAG,YAAY,CAAC,0BAAD,CAA1C;EACA,MAAM,MAAM,GAAGA,cAAY,CAAC,qBAAqB,CAAC,SAAvB,CAA3B;EACA,EAAA,2BAA2B,CAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB,EAA2B,QAA3B,EAAqC,gBAArC,CAA3B;EACA,SAAO,MAAP;EACD;EAEK,SAAU,4BAAV,CACJ,MADI,EAEJ,OAFI,EAGJ,QAHI,EAIJ,QAJI,EAKJ,eALI,EAKmB;EAEvB,EAAA,aAAa,CAAC,OAAD,EAAU,QAAV,EAAoB,eAApB,CAAb;EACA,EAAA,oBAAoB,CAAC,OAAD,EAAU,QAAV,CAApB;EAEA,EAAA,WAAW,CAAC,MAAD,CAAX;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,SAAT,EAAoB,QAApB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,OAAT,EAAkB,eAAlB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,gBAAT,EAA2B,IAA3B,CAAP;;EAEA,EAAW;EACT,IAAA,MAAM,CAAC,cAAP,CAAsB,MAAtB,EAA8B,QAA9B,EAAwC;EACtC,MAAA,KAAK,YAAK,MAAM,CAAC,MAAM,CAAC,WAAR,CAAX,eAAoC,yBAAyB,CAAC,MAAD,CAA7D,MADiC;EAEtC,MAAA,QAAQ,EAAE,KAF4B;EAGtC,MAAA,UAAU,EAAE,KAH0B;EAItC,MAAA,YAAY,EAAE;EAJwB,KAAxC;EAMD;EACF;EAEK,SAAU,uBAAV,CACJ,OADI,EAEJ,QAFI,EAIe;EAAA,MADnB,QACmB,uEADmB,kBAAkB,EACrC;EAAA,MAAnB,eAAmB,uEAAD,CAAC;EAEnB,MAAM,sBAAsB,GAAG,YAAY,CAAC,2BAAD,CAA3C;EACA,MAAM,MAAM,GAAGA,cAAY,CAAC,sBAAsB,CAAC,SAAxB,CAA3B;EACA,EAAA,4BAA4B,CAAC,MAAD,EAAS,OAAT,EAAkB,QAAlB,EAA4B,QAA5B,EAAsC,eAAtC,CAA5B;EACA,SAAO,MAAP;EACD;EAEK,SAAU,gCAAV,CACJ,MADI,EAEJ,gBAFI,EAGJ,QAHI,EAIJ,QAJI,EAI+B;EAEnC,EAAA,wBAAwB,CAAC,gBAAD,CAAxB;EAEA,EAAA,WAAW,CAAC,MAAD,CAAX;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,gBAAT,EAA2B,gBAA3B,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,SAAT,EAAoB,QAApB,CAAP;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,CAAP;EAEA,MAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,MAAM,OAAO,GAAG,IAAI,eAAJ,CAAoB,OAAO,CAAC,MAAD,EAAS,gBAAT,CAA3B,CAAhB;EACA,EAAA,OAAO,CAAC,MAAD,EAAS,OAAT,EAAkB,OAAlB,CAAP;;EAEA,EAAW;EACT,IAAA,MAAM,CAAC,cAAP,CAAsB,MAAtB,EAA8B,QAA9B,EAAwC;EACtC,MAAA,KAAK,YAAK,MAAM,CAAC,MAAM,CAAC,WAAR,CAAX,eAAoC,6BAA6B,CAAC,MAAD,EAAS,MAAT,CAAjE,MADiC;EAEtC,MAAA,QAAQ,EAAE,KAF4B;EAGtC,MAAA,UAAU,EAAE,KAH0B;EAItC,MAAA,YAAY,EAAE;EAJwB,KAAxC;EAMD;EACF;EAEK,SAAU,2BAAV,CACJ,gBADI,EAEJ,QAFI,EAGsD;EAAA,MAA1D,QAA0D,uEAApB,kBAAkB,EAAE;EAE1D,MAAM,qBAAqB,GAAG,YAAY,CAAC,0BAAD,CAA1C;EACA,MAAM,MAAM,GAAGA,cAAY,CAAC,qBAAqB,CAAC,SAAvB,CAA3B;EACA,EAAA,gCAAgC,CAAC,MAAD,EAAS,gBAAT,EAA2B,QAA3B,EAAqC,QAArC,CAAhC;EACA,SAAO,MAAP;EACD;EAEK,SAAU,kBAAV,GAA4B;EAChC,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,SAAO,IAAI,gBAAJ,CAAqB,SAArB,CAAP;EACD;EAGD;;EACM,SAAU,cAAV,CAAqD,QAArD,EAA0F,eAA1F,EAA4G;EAChH,MAAI,UAAU,GAAG,eAAjB;;EACA,MAAI,QAAQ,CAAC,MAAb,EAAqB;EACnB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAT,CAAgB,UAAhB,CAAb;EACD;;EACD,MAAM,MAAM,GAAa,EAAzB;;EALgH,8CAM7F,UAN6F;EAAA;;EAAA;EAMhH,2DAA+B;EAAA,UAApB,IAAoB;EAC7B,UAAI,OAAO,IAAP,KAAgB,QAApB,EAA8B,MAAM,IAAI,SAAJ,CAAc,mCAAd,CAAN;EAC9B,MAAAL,oBAAkB,CAAC,IAAnB,CAAwB,MAAxB,EAAgC,IAAhC;EACD;EAT+G;EAAA;EAAA;EAAA;EAAA;;EAUhH,SAAO,MAAP;EACD;EAEK,SAAU,mBAAV,CACJ,QADI,EAEJ,MAFI,EAGJ,gBAHI,EAGqC;EAEzC,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAhC;;EACA,MAAI,CAAC,cAAL,EAAqB;EACnB,6CAAY,MAAZ,GAAuB,gBAAvB;EACD;;EACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAR,CAAc,cAAd,EAA8B,QAA9B,EAAwC,CAAC,MAAD,EAAS,gBAAT,CAAxC,CAAf;EACA,MAAI,CAAC,QAAQ,CAAC,MAAD,CAAb,EAAuB,MAAM,IAAI,SAAJ,CAAc,wCAAd,CAAN;EACvB,SAAO,MAAP;EACD;EAEK,SAAU,eAAV,CACJ,QADI,EAEJ,IAFI,EAGJ,QAHI,EAIJ,OAJI,EAKJ,YALI,EAK+C;EAEnD,MAAI,OAAO,GAAG,YAAd;;EACA,MAAI,OAAO,KAAK,SAAhB,EAA2B;EACzB,IAAA,OAAO,GAAG,QAAQ,CAAC,OAAnB;EACD;;EACD,MAAM,MAAM,GAAGM,cAAY,CAAC,OAAD,EAAU,QAAV,EAAoB,CAAC,IAAD,EAAO,QAAP,EAAiB,OAAjB,CAApB,CAA3B;EACA,MAAI,CAAC,cAAc,CAAC,MAAD,CAAnB,EAA6B,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAC7B,SAAO,MAAP;EACD;;EAED,SAAS,iBAAT,CACE,QADF,EAEE,IAFF,EAGE,SAHF,EAIE,OAJF,EAKE,cALF,EAKyD;EAEvD,MAAI,SAAS,GAAG,cAAhB;;EACA,MAAI,SAAS,KAAK,SAAlB,EAA6B;EAC3B,IAAA,SAAS,GAAG,QAAQ,CAAC,SAArB;EACD;;EACD,MAAM,MAAM,GAAGA,cAAY,CAAC,SAAD,EAAY,QAAZ,EAAsB,CAAC,IAAD,EAAO,SAAP,EAAkB,OAAlB,CAAtB,CAA3B;EACA,MAAI,CAAC,kBAAkB,CAAC,MAAD,CAAvB,EAAiC,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EACjC,SAAO,MAAP;EACD;;EAEK,SAAU,YAAV,CAAuB,QAAvB,EAA4D,QAA5D,EAAuG;EAC3G,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAT,CAAc,QAAd,CAAf;;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,UAAM,IAAI,UAAJ,CAAe,yCAAf,CAAN;EACD;;EACD,SAAO,wBAAwB,CAAC,MAAD,CAA/B;EACD;EAEK,SAAU,aAAV,CAAwB,QAAxB,EAA6D,QAA7D,EAAyG;EAC7G,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAT,CAAe,QAAf,CAAf;;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,UAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN;EACD;;EACD,SAAO,iBAAiB,CAAC,MAAD,CAAxB;EACD;EAEK,SAAU,iBAAV,CACJ,QADI,EAEJ,QAFI,EAE4C;EAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAT,CAAmB,QAAnB,CAAf;;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,UAAM,IAAI,UAAJ,CAAe,4CAAf,CAAN;EACD;;EACD,SAAO,QAAQ,CAAC,MAAD,CAAf;EACD;EAEK,SAAU,WAAV,CAAsB,QAAtB,EAA2D,QAA3D,EAAqG;EACzG,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAT,CAAa,QAAb,CAAf;;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,UAAM,IAAI,UAAJ,CAAe,gDAAf,CAAN;EACD;;EACD,SAAO,iBAAiB,CAAC,MAAD,CAAxB;EACD;EAEK,SAAU,WAAV,CAAsB,QAAtB,EAA2D,QAA3D,EAAqG;EACzG,MAAI,MAAM,GAAG,QAAQ,CAAC,GAAT,CAAa,QAAb,CAAb;;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAD,CAAjB;EACD;;EACD,SAAO,MAAP;EACD;EAEK,SAAU,eAAV,CAA0B,QAA1B,EAA+D,QAA/D,EAA6G;EACjH,MAAI,MAAM,GAAG,QAAQ,CAAC,OAAT,CAAiB,QAAjB,CAAb;;EACA,MAAI,MAAM,KAAK,SAAf,EAA0B;EACxB,IAAA,MAAM,GAAG,wBAAwB,CAAC,MAAD,CAAjC;EACD;;EACD,SAAO,MAAP;EACD;EAEK,SAAU,iBAAV,CACJ,QADI,EAEJ,QAFI,EAE4C;EAEhD,SAAO,QAAQ,CAAC,SAAT,CAAmB,QAAnB,CAAP;EACD;EAEK,SAAU,iBAAV,CACJ,QADI,EAEJ,QAFI,EAE4C;EAEhD,SAAO,QAAQ,CAAC,SAAT,CAAmB,QAAnB,CAAP;EACD;EAEK,SAAU,kBAAV,CACJ,QADI,EAEJ,QAFI,EAE6C;EAEjD,SAAO,QAAQ,CAAC,UAAT,CAAoB,QAApB,CAAP;EACD;EAEK,SAAU,kBAAV,CACJ,QADI,EAEJ,QAFI,EAE6C;EAEjD,SAAO,QAAQ,CAAC,UAAT,CAAoB,QAApB,CAAP;EACD;EAEK,SAAU,mBAAV,CACJ,QADI,EAEJ,QAFI,EAE8C;EAElD,SAAO,QAAQ,CAAC,WAAT,CAAqB,QAArB,CAAP;EACD;EAEK,SAAU,kBAAV,CACJ,QADI,EAEJ,QAFI,EAE6C;EAEjD,SAAO,QAAQ,CAAC,UAAT,CAAoB,QAApB,CAAP;EACD;EAEK,SAAU,oBAAV,CACJ,QADI,EAEJ,QAFI,EAE+C;EAEnD,SAAO,QAAQ,CAAC,YAAT,CAAsB,QAAtB,CAAP;EACD;EAEK,SAAU,kBAAV,CACJ,QADI,EAEJ,QAFI,EAE6C;EAEjD,SAAO,QAAQ,CAAC,UAAT,CAAoB,QAApB,CAAP;EACD;EAEK,SAAU,kBAAV,CAA6B,iBAA7B,EAAyE;EAC7E,MAAI,YAAY,GAAG,iBAAnB;;EACA,MAAI,QAAQ,CAAC,YAAD,CAAZ,EAA4B;EAC1B,QAAI,OAAO,CAAC,YAAD,EAAe,QAAf,CAAX,EAAqC,OAAO,OAAO,CAAC,YAAD,EAAe,QAAf,CAAd;EACrC,QAAI,EAAE,cAAc,YAAhB,CAAJ,EAAmC,OAAO,YAAP;EACnC,IAAA,YAAY,GAAI,YAAiE,CAAC,QAAlF;EACA,QAAI,QAAQ,CAAC,YAAD,CAAR,IAA0B,EAAE,cAAc,YAAhB,CAA9B,EAA6D,OAAO,YAAP;EAC9D;;EACD,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAD,CAA3B;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,MAAI,iBAAiB,CAAC,UAAD,CAArB,EAAmC,OAAO,IAAI,gBAAJ,CAAqB,UAArB,CAAP;EACnC,MAAI,QAAJ;;EACA,MAAI;EAAA,6BACc,gBAAgB,CAAC,UAAD,CAD9B;;EACC,IAAA,QADD,sBACC,QADD;EAEH,GAFD,CAEE,iBAAM;EACN,UAAM,IAAI,UAAJ,6BAAoC,UAApC,EAAN;EACD;;EACD,MAAI,CAAC,QAAL,EAAe,QAAQ,GAAG,SAAX;EACf,SAAO,IAAI,gBAAJ,CAAqB,QAArB,CAAP;EACD;;EAED,SAAS,iCAAT,CACE,IADF,EACqF;EAEnF,MAAI,OAAO,CAAC,IAAD,EAAO,QAAP,CAAX,EAA6B,OAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EAC7B,MAAQ,QAAR,GAAqB,IAArB,CAAQ,QAAR;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B,OAAO,kBAAkB,EAAzB;EAC5B,SAAO,kBAAkB,CAAC,QAAD,CAAzB;EACD;;EAEK,SAAU,cAAV,CAAyB,GAAzB,EAAyD,GAAzD,EAAuF;EAC3F,MAAI,GAAG,KAAK,GAAZ,EAAiB,OAAO,IAAP;EACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAD,CAArB;EACA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAD,CAArB;EACA,SAAO,IAAI,KAAK,IAAhB;EACD;EAEK,SAAU,oBAAV,CAA+B,GAA/B,EAA+D,GAA/D,EAA6F;EACjG,MAAI,GAAG,KAAK,GAAZ,EAAiB,OAAO,GAAP;EACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAD,CAArB;EACA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAD,CAArB;;EACA,MAAI,IAAI,KAAK,IAAT,IAAiB,IAAI,KAAK,SAA9B,EAAyC;EACvC,WAAO,GAAP;EACD,GAFD,MAEO,IAAI,IAAI,KAAK,SAAb,EAAwB;EAC7B,WAAO,GAAP;EACD,GAFM,MAEA;EACL,UAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;EACD;EACF;EAEK,SAAU,sBAAV,CACJ,QADI,EAEJ,MAFI,EAGJ,OAHI,EAG0D;EAE9D,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAT,CAAwB,MAAxB,EAAgC,OAAhC,CAAf;EACA,MAAI,CAAC,cAAc,CAAC,MAAD,CAAnB,EAA6B,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAC7B,SAAO,MAAP;EACD;EAEK,SAAU,2BAAV,CACJ,QADI,EAEJ,MAFI,EAGJ,OAHI,EAGsD;EAE1D,MAAM,MAAM,GAAG,QAAQ,CAAC,mBAAT,CAA6B,MAA7B,EAAqC,OAArC,CAAf;EACA,MAAI,CAAC,mBAAmB,CAAC,MAAD,CAAxB,EAAkC,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAClC,SAAO,MAAP;EACD;EAEK,SAAU,0BAAV,CACJ,QADI,EAEJ,MAFI,EAGJ,OAHI,EAGqD;EAEzD,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAT,CAA4B,MAA5B,EAAoC,OAApC,CAAf;EACA,MAAI,CAAC,kBAAkB,CAAC,MAAD,CAAvB,EAAiC,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EACjC,SAAO,MAAP;EACD;EAEK,SAAU,kBAAV,CAA6B,yBAA7B,EAAiF;EACrF,MAAI,oBAAoB,GAAG,yBAA3B;;EACA,MAAI,QAAQ,CAAC,oBAAD,CAAZ,EAAoC;EAClC,QAAI,uBAAuB,CAAC,oBAAD,CAA3B,EAAmD,OAAO,OAAO,CAAC,oBAAD,EAAuB,SAAvB,CAAd;EACnD,QAAI,EAAE,cAAc,oBAAhB,CAAJ,EAA2C,OAAO,oBAAP;EAC3C,IAAA,oBAAoB,GAAI,oBAAyE,CAAC,QAAlG;;EACA,QAAI,QAAQ,CAAC,oBAAD,CAAR,IAAkC,EAAE,cAAc,oBAAhB,CAAtC,EAA6E;EAC3E,aAAO,oBAAP;EACD;EACF;;EACD,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAD,CAA3B;EACA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAD,CAAtC;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,SAAO,IAAI,gBAAJ,CAAqB,QAArB,CAAP;EACD;EAEK,SAAU,cAAV,CAAyB,GAAzB,EAAyD,GAAzD,EAAuF;EAC3F,MAAI,GAAG,KAAK,GAAZ,EAAiB,OAAO,IAAP;EACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAD,CAApB;EACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAD,CAApB;EACA,SAAO,GAAG,KAAK,GAAf;EACD;EAEK,SAAU,sBAAV,CAAiC,QAAjC,EAAiE;EACrE,SAAO,kBAAkB,CACvB,OAAO,CAAC,QAAD,EAAW,QAAX,CADgB,EAEvB,OAAO,CAAC,QAAD,EAAW,SAAX,CAFgB,EAGvB,OAAO,CAAC,QAAD,EAAW,OAAX,CAHgB,EAIvB,OAAO,CAAC,QAAD,EAAW,QAAX,CAJgB,CAAzB;EAMD;EAEK,SAAU,sBAAV,CAAiC,QAAjC,EAAiE;EACrE,MAAM,IAAI,GAAG,YAAY,CAAC,sBAAD,CAAzB;EACA,SAAO,IAAI,IAAJ,CACL,OAAO,CAAC,QAAD,EAAW,QAAX,CADF,EAEL,OAAO,CAAC,QAAD,EAAW,UAAX,CAFF,EAGL,OAAO,CAAC,QAAD,EAAW,UAAX,CAHF,EAIL,OAAO,CAAC,QAAD,EAAW,eAAX,CAJF,EAKL,OAAO,CAAC,QAAD,EAAW,eAAX,CALF,EAML,OAAO,CAAC,QAAD,EAAW,cAAX,CANF,CAAP;EAQD;EAEK,SAAU,uBAAV,CACJ,QADI,EAEJ,OAFI,EAEyD;EAE7D,MAAI,uBAAuB,GAAG,QAAQ,CAAC,uBAAvC;;EACA,MAAI,OAAO,uBAAP,KAAmC,UAAvC,EAAmD;EACjD,UAAM,IAAI,SAAJ,CAAc,sCAAd,CAAN;EACD;;EACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAR,CAAc,uBAAd,EAAuC,QAAvC,EAAiD,CAAC,OAAD,CAAjD,CAAjB;;EACA,MAAI,OAAO,QAAP,KAAoB,QAAxB,EAAkC;EAChC,UAAM,IAAI,SAAJ,CAAc,yCAAd,CAAN;EACD;;EACD,MAAI,CAAC,SAAS,CAAC,QAAD,CAAV,IAAwBJ,SAAO,CAAC,QAAD,CAAP,GAAoB,OAAhD,EAAyD;EACvD,UAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN;EACD;;EACD,SAAO,QAAP;EACD;EAEK,SAAU,iCAAV,CAA4C,QAA5C,EAAiF,OAAjF,EAA0G;EAC9G,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAD,EAAW,OAAX,CAAxC;EACA,SAAO,0BAA0B,CAAC,QAAD,CAAjC;EACD;EAEK,SAAU,kCAAV,CACJ,QADI,EAEJ,OAFI,EAGJ,QAHI,EAG+B;EAEnC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAlB;EACA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAD,EAAW,OAAX,CAAxC;;EACA,8BAAuF,oBAAoB,CAAC,EAAD,CAA3G;EAAA,MAAM,IAAN,yBAAM,IAAN;EAAA,MAAY,KAAZ,yBAAY,KAAZ;EAAA,MAAmB,GAAnB,yBAAmB,GAAnB;EAAA,MAAwB,IAAxB,yBAAwB,IAAxB;EAAA,MAA8B,MAA9B,yBAA8B,MAA9B;EAAA,MAAsC,MAAtC,yBAAsC,MAAtC;EAAA,MAA8C,WAA9C,yBAA8C,WAA9C;EAAA,MAA2D,WAA3D,yBAA2D,WAA3D;EAAA,MAAwE,UAAxE,yBAAwE,UAAxE;;EAJmC,6BAKiD,kBAAkB,CACpG,IADoG,EAEpG,KAFoG,EAGpG,GAHoG,EAIpG,IAJoG,EAKpG,MALoG,EAMpG,MANoG,EAOpG,WAPoG,EAQpG,WARoG,EASpG,UAAU,GAAG,QATuF,CALnE;;EAKhC,EAAA,IALgC,wBAKhC,IALgC;EAK1B,EAAA,KAL0B,wBAK1B,KAL0B;EAKnB,EAAA,GALmB,wBAKnB,GALmB;EAKd,EAAA,IALc,wBAKd,IALc;EAKR,EAAA,MALQ,wBAKR,MALQ;EAKA,EAAA,MALA,wBAKA,MALA;EAKQ,EAAA,WALR,wBAKQ,WALR;EAKqB,EAAA,WALrB,wBAKqB,WALrB;EAKkC,EAAA,UALlC,wBAKkC,UALlC;EAgBnC,SAAO,sBAAsB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,EAA+E,QAA/E,CAA7B;EACD;EAEK,SAAU,4BAAV,CACJ,QADI,EAEJ,QAFI,EAGJ,cAHI,EAGoE;EAExE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,QAAD,EAAW,QAAX,CAA/C;EACA,SAAO,4BAA4B,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,QAA7B,EAAuC,cAAvC,CAAnC;EACD;;EAED,SAAS,4BAAT,CACE,gBADF,EAEE,QAFF,EAGE,QAHF,EAIE,cAJF,EAI0E;EAExE,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAD,CAA5B;EACA,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAArC;EAEA,MAAI,WAAW,KAAK,CAApB,EAAuB,OAAO,gBAAgB,CAAC,CAAD,CAAvB;;EACvB,MAAI,WAAJ,EAAiB;EACf,YAAQ,cAAR;EACE,WAAK,YAAL,CADF;;EAGE,WAAK,SAAL;EACE,eAAO,gBAAgB,CAAC,CAAD,CAAvB;;EACF,WAAK,OAAL;EACE,eAAO,gBAAgB,CAAC,WAAW,GAAG,CAAf,CAAvB;;EACF,WAAK,QAAL;EAAe;EACb,gBAAM,IAAI,UAAJ,CAAe,yBAAf,CAAN;EACD;EATH;EAWD;;EAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAApB;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAD,EAAW,SAAX,CAArB;EACA,MAAM,GAAG,GAAG,OAAO,CAAC,QAAD,EAAW,OAAX,CAAnB;EACA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAApB;EACA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAD,EAAW,UAAX,CAAtB;EACA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAD,EAAW,UAAX,CAAtB;EACA,MAAM,WAAW,GAAG,OAAO,CAAC,QAAD,EAAW,eAAX,CAA3B;EACA,MAAM,WAAW,GAAG,OAAO,CAAC,QAAD,EAAW,eAAX,CAA3B;EACA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAD,EAAW,cAAX,CAA1B;EACA,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAAlC;EACA,MAAI,KAAK,KAAK,IAAd,EAAoB,MAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EACpB,MAAM,SAAS,GAAG,IAAI,OAAJ,CAAY,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,SAArB,CAAZ,CAAlB;EACA,MAAM,QAAQ,GAAG,IAAI,OAAJ,CAAY,IAAI,CAAC,GAAL,CAAS,KAAT,EAAgB,SAAhB,CAAZ,CAAjB;EACA,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAD,EAAW,SAAX,CAA5C;EACA,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAD,EAAW,QAAX,CAA3C;EACA,MAAM,WAAW,GAAG,WAAW,GAAG,YAAlC;;EACA,UAAQ,cAAR;EACE,SAAK,SAAL;EAAgB;EACd,YAAM,QAAQ,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAAxB;EACA,YAAM,aAAa,GAAG,YAAY,CAAC,0BAAD,CAAlC;EACA,YAAM,OAAO,GAAG,WAAW,CACzB,IADyB,EAEzB,KAFyB,EAGzB,GAHyB,EAIzB,IAJyB,EAKzB,MALyB,EAMzB,MANyB,EAOzB,WAPyB,EAQzB,WARyB,EASzB,UATyB,EAUzB,QAVyB,EAWzB,CAXyB,EAYzB,CAZyB,EAazB,CAbyB,EAczB,CAdyB,EAezB,CAfyB,EAgBzB,CAhByB,EAiBzB,CAjByB,EAkBzB,CAlByB,EAmBzB,CAnByB,EAoBzB,CAAC,WApBwB,EAqBzB,SArByB,CAA3B;EAuBA,YAAM,oBAAoB,GAAG,IAAI,aAAJ,CAC3B,OAAO,CAAC,IADmB,EAE3B,OAAO,CAAC,KAFmB,EAG3B,OAAO,CAAC,GAHmB,EAI3B,OAAO,CAAC,IAJmB,EAK3B,OAAO,CAAC,MALmB,EAM3B,OAAO,CAAC,MANmB,EAO3B,OAAO,CAAC,WAPmB,EAQ3B,OAAO,CAAC,WARmB,EAS3B,OAAO,CAAC,UATmB,EAU3B,QAV2B,CAA7B;EAYA,eAAO,sBAAsB,CAAC,QAAD,EAAW,oBAAX,CAAtB,CAAuD,CAAvD,CAAP;EACD;;EACD,SAAK,YAAL,CAzCF;;EA2CE,SAAK,OAAL;EAAc;EACZ,YAAM,UAAQ,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAAxB;;EACA,YAAM,cAAa,GAAG,YAAY,CAAC,0BAAD,CAAlC;;EACA,YAAM,KAAK,GAAG,WAAW,CACvB,IADuB,EAEvB,KAFuB,EAGvB,GAHuB,EAIvB,IAJuB,EAKvB,MALuB,EAMvB,MANuB,EAOvB,WAPuB,EAQvB,WARuB,EASvB,UATuB,EAUvB,UAVuB,EAWvB,CAXuB,EAYvB,CAZuB,EAavB,CAbuB,EAcvB,CAduB,EAevB,CAfuB,EAgBvB,CAhBuB,EAiBvB,CAjBuB,EAkBvB,CAlBuB,EAmBvB,CAnBuB,EAoBvB,WApBuB,EAqBvB,SArBuB,CAAzB;EAuBA,YAAM,kBAAkB,GAAG,IAAI,cAAJ,CACzB,KAAK,CAAC,IADmB,EAEzB,KAAK,CAAC,KAFmB,EAGzB,KAAK,CAAC,GAHmB,EAIzB,KAAK,CAAC,IAJmB,EAKzB,KAAK,CAAC,MALmB,EAMzB,KAAK,CAAC,MANmB,EAOzB,KAAK,CAAC,WAPmB,EAQzB,KAAK,CAAC,WARmB,EASzB,KAAK,CAAC,UATmB,EAUzB,UAVyB,CAA3B;EAYA,YAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAD,EAAW,kBAAX,CAAvC;EACA,eAAO,QAAQ,CAAC,QAAQ,CAAC,MAAT,GAAkB,CAAnB,CAAf;EACD;;EACD,SAAK,QAAL;EAAe;EACb,cAAM,IAAI,UAAJ,CAAe,uBAAf,CAAN;EACD;EAtFH;EAwFD;;EAED,SAAS,sBAAT,CACE,QADF,EAEE,QAFF,EAE+D;EAE7D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,sBAAT,CAAgC,QAAhC,CAAzB;EACA,MAAM,MAAM,GAAuB,EAAnC;;EAH6D,8CAIvC,gBAJuC;EAAA;;EAAA;EAI7D,2DAAwC;EAAA,UAA7B,OAA6B;;EACtC,UAAI,CAAC,iBAAiB,CAAC,OAAD,CAAtB,EAAiC;EAC/B,cAAM,IAAI,SAAJ,CAAc,wCAAd,CAAN;EACD;;EACD,MAAAF,oBAAkB,CAAC,IAAnB,CAAwB,MAAxB,EAAgC,OAAhC;EACD;EAT4D;EAAA;EAAA;EAAA;EAAA;;EAU7D,SAAO,MAAP;EACD;;EAEK,SAAU,aAAV,CAAwB,IAAxB,EAAoC;EACxC,MAAI,UAAJ;;EACA,MAAI,IAAI,GAAG,CAAP,IAAY,IAAI,GAAG,IAAvB,EAA6B;EAC3B,QAAM,IAAI,GAAG,IAAI,GAAG,CAAP,GAAW,GAAX,GAAiB,GAA9B;EACA,QAAM,UAAU,GAAGE,SAAO,CAAC,IAAD,CAA1B;EACA,IAAA,UAAU,GAAG,IAAI,GAAG,gBAAS,UAAT,EAAsB,KAAtB,CAA4B,CAAC,CAA7B,CAApB;EACD,GAJD,MAIO;EACL,IAAA,UAAU,GAAG,cAAO,IAAP,EAAc,KAAd,CAAoB,CAAC,CAArB,CAAb;EACD;;EACD,SAAO,UAAP;EACD;EAEK,SAAU,qBAAV,CAAgC,IAAhC,EAA4C;EAChD,SAAO,YAAK,IAAL,EAAY,KAAZ,CAAkB,CAAC,CAAnB,CAAP;EACD;EACK,SAAU,uBAAV,CACJ,MADI,EAEJ,WAFI,EAGJ,WAHI,EAIJ,UAJI,EAKJ,SALI,EAK+D;EAEnE,MAAI,SAAS,KAAK,QAAlB,EAA4B,OAAO,EAAP;EAE5B,MAAM,IAAI,cAAO,qBAAqB,CAAC,MAAD,CAA5B,CAAV;EACA,MAAI,cAAc,GAAG,WAAW,GAAG,GAAd,GAAoB,WAAW,GAAG,GAAlC,GAAwC,UAA7D;EACA,MAAI,QAAJ;;EAEA,MAAI,SAAS,KAAK,MAAlB,EAA0B;EACxB,QAAI,cAAc,KAAK,CAAvB,EAA0B,OAAO,IAAP;EAC1B,IAAA,QAAQ,GAAG,UAAG,cAAH,EAAoB,QAApB,CAA6B,CAA7B,EAAgC,GAAhC,CAAX;;EACA,WAAO,QAAQ,CAAC,QAAQ,CAAC,MAAT,GAAkB,CAAnB,CAAR,KAAkC,GAAzC;EAA8C,MAAA,QAAQ,GAAG,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAC,CAAnB,CAAX;EAA9C;EACD,GAJD,MAIO;EACL,QAAI,SAAS,KAAK,CAAlB,EAAqB,OAAO,IAAP;EACrB,IAAA,QAAQ,GAAG,UAAG,cAAH,EAAoB,QAApB,CAA6B,CAA7B,EAAgC,GAAhC,EAAqC,KAArC,CAA2C,CAA3C,EAA8C,SAA9C,CAAX;EACD;;EACD,mBAAU,IAAV,cAAkB,QAAlB;EACD;EAEK,SAAU,uBAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,SAHI,EAG+D;EAEnE,MAAI,cAAc,GAAG,QAArB;;EACA,MAAI,cAAc,KAAK,SAAvB,EAAkC;EAChC,QAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,IAAA,cAAc,GAAG,IAAI,gBAAJ,CAAqB,KAArB,CAAjB;EACD;;EACD,MAAM,GAAG,GAAG,kBAAkB,EAA9B;EACA,MAAM,QAAQ,GAAG,kCAAkC,CAAC,cAAD,EAAiB,OAAjB,EAA0B,GAA1B,CAAnD;EACA,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,QAAD,EAAW,QAAX,CAAR,CAA1B;EACA,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,SAAX,CAAR,CAAnC;EACA,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,OAAX,CAAR,CAAjC;EACA,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,QAAX,CAAR,CAAlC;EACA,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,UAAX,CAAR,CAApC;EACA,MAAM,OAAO,GAAG,uBAAuB,CACrC,OAAO,CAAC,QAAD,EAAW,UAAX,CAD8B,EAErC,OAAO,CAAC,QAAD,EAAW,eAAX,CAF8B,EAGrC,OAAO,CAAC,QAAD,EAAW,eAAX,CAH8B,EAIrC,OAAO,CAAC,QAAD,EAAW,cAAX,CAJ8B,EAKrC,SALqC,CAAvC;EAOA,MAAI,cAAc,GAAG,GAArB;;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B;EAC1B,QAAM,QAAQ,GAAG,uBAAuB,CAAC,cAAD,EAAiB,OAAjB,CAAxC;EACA,IAAA,cAAc,GAAG,6BAA6B,CAAC,QAAD,CAA9C;EACD;;EACD,mBAAU,IAAV,cAAkB,KAAlB,cAA2B,GAA3B,cAAkC,IAAlC,cAA0C,MAA1C,SAAmD,OAAnD,SAA6D,cAA7D;EACD;EAQK,SAAU,wBAAV,CACJ,QADI,EAG4C;EAAA,MADhD,SACgD,uEADyB,MACzB;EAAA,MAAhD,OAAgD,uEAAT,SAAS;;EAEhD,WAAS,YAAT,CAAsB,GAAtB,EAAiC;EAC/B,QAAI,GAAG,IAAI,oBAAX,EAAiC,OAAO,GAAG,CAAC,QAAJ,CAAa,EAAb,CAAP;EACjC,WAAO,IAAI,CAAC,MAAL,CAAY,GAAZ,EAAiB,QAAjB,CAA0B,EAA1B,CAAP;EACD;;EAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAD,EAAW,KAAX,CAArB;EACA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAD,EAAW,MAAX,CAAtB;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAD,EAAW,KAAX,CAArB;EACA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAD,EAAW,IAAX,CAApB;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAD,EAAW,KAAX,CAArB;EACA,MAAM,OAAO,GAAG,OAAO,CAAC,QAAD,EAAW,OAAX,CAAvB;EACA,MAAI,OAAO,GAAG,OAAO,CAAC,QAAD,EAAW,OAAX,CAArB;EACA,MAAI,EAAE,GAAG,OAAO,CAAC,QAAD,EAAW,YAAX,CAAhB;EACA,MAAI,EAAE,GAAG,OAAO,CAAC,QAAD,EAAW,YAAX,CAAhB;EACA,MAAI,EAAE,GAAG,OAAO,CAAC,QAAD,EAAW,WAAX,CAAhB;EACA,MAAM,IAAI,GAAG,YAAY,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,KAA7B,EAAoC,OAApC,EAA6C,OAA7C,EAAsD,EAAtD,EAA0D,EAA1D,EAA8D,EAA9D,CAAzB;;EAEA,MAAI,OAAJ,EAAa;EACX,QAAQ,IAAR,GAA0C,OAA1C,CAAQ,IAAR;EAAA,QAAc,SAAd,GAA0C,OAA1C,CAAc,SAAd;EAAA,QAAyB,YAAzB,GAA0C,OAA1C,CAAyB,YAAzB;;EADW,yBAOP,aAAa,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,OAAnB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,SAAxC,EAAmD,IAAnD,EAAyD,YAAzD,CAPN;;EAGT,IAAA,OAHS,kBAGT,OAHS;EAIK,IAAA,EAJL,kBAIT,YAJS;EAKK,IAAA,EALL,kBAKT,YALS;EAMI,IAAA,EANJ,kBAMT,WANS;EAQZ;;EAED,MAAM,SAAS,GAAG,EAAlB;EACA,MAAI,KAAJ,EAAW,SAAS,CAAC,IAAV,WAAkB,YAAY,CAACA,SAAO,CAAC,KAAD,CAAR,CAA9B;EACX,MAAI,MAAJ,EAAY,SAAS,CAAC,IAAV,WAAkB,YAAY,CAACA,SAAO,CAAC,MAAD,CAAR,CAA9B;EACZ,MAAI,KAAJ,EAAW,SAAS,CAAC,IAAV,WAAkB,YAAY,CAACA,SAAO,CAAC,KAAD,CAAR,CAA9B;EACX,MAAI,IAAJ,EAAU,SAAS,CAAC,IAAV,WAAkB,YAAY,CAACA,SAAO,CAAC,IAAD,CAAR,CAA9B;EAEV,MAAM,SAAS,GAAG,EAAlB;EACA,MAAI,KAAJ,EAAW,SAAS,CAAC,IAAV,WAAkB,YAAY,CAACA,SAAO,CAAC,KAAD,CAAR,CAA9B;EACX,MAAI,OAAJ,EAAa,SAAS,CAAC,IAAV,WAAkB,YAAY,CAACA,SAAO,CAAC,OAAD,CAAR,CAA9B;EAEb,MAAM,WAAW,GAAG,EAApB;EACA,MAAI,KAAK,GAAG,wBAAwB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,OAAV,EAAmB,EAAnB,EAAuB,EAAvB,EAA2B,EAA3B,EAA+B,CAA/B,CAApC;EACA,MAAI,QAAJ,EAAoB,QAApB,EAAoC,QAApC,EAAoD,aAApD;;EAzCgD,gBA0CJ,MAAM,CAAC,KAAD,EAAQ,QAAR,CA1CF;;EA0CnC,EAAA,KA1CmC,WA0C7C,QA1C6C;EA0CjB,EAAA,QA1CiB,WA0C5B,SA1C4B;;EAAA,iBA2CJ,MAAM,CAAC,KAAD,EAAQ,QAAR,CA3CF;;EA2CnC,EAAA,KA3CmC,YA2C7C,QA3C6C;EA2CjB,EAAA,QA3CiB,YA2C5B,SA3C4B;;EAAA,iBA4CI,MAAM,CAAC,KAAD,EAAQ,QAAR,CA5CV;;EA4CnC,EAAA,aA5CmC,YA4C7C,QA5C6C;EA4CT,EAAA,QA5CS,YA4CpB,SA5CoB;EA6ChD,MAAM,QAAQ,GACZA,SAAO,CAAC,IAAI,CAAC,QAAL,CAAc,QAAd,CAAD,CAAP,GAAmC,GAAnC,GAAyCA,SAAO,CAAC,IAAI,CAAC,QAAL,CAAc,QAAd,CAAD,CAAP,GAAmC,GAA5E,GAAkFA,SAAO,CAAC,IAAI,CAAC,QAAL,CAAc,QAAd,CAAD,CAD3F;EAEA,MAAI,WAAJ;;EACA,MAAI,SAAS,KAAK,MAAlB,EAA0B;EACxB,QAAI,QAAQ,KAAK,CAAjB,EAAoB;EAClB,MAAA,WAAW,GAAG,UAAG,QAAH,EAAc,QAAd,CAAuB,CAAvB,EAA0B,GAA1B,CAAd;;EACA,aAAO,WAAW,CAAC,WAAW,CAAC,MAAZ,GAAqB,CAAtB,CAAX,KAAwC,GAA/C,EAAoD;EAClD,QAAA,WAAW,GAAG,WAAW,CAAC,KAAZ,CAAkB,CAAlB,EAAqB,CAAC,CAAtB,CAAd;EACD;EACF;EACF,GAPD,MAOO,IAAI,SAAS,KAAK,CAAlB,EAAqB;EAC1B,IAAA,WAAW,GAAG,UAAG,QAAH,EAAc,QAAd,CAAuB,CAAvB,EAA0B,GAA1B,EAA+B,KAA/B,CAAqC,CAArC,EAAwC,SAAxC,CAAd;EACD;;EACD,MAAI,WAAJ,EAAiB,WAAW,CAAC,OAAZ,CAAoB,GAApB,EAAyB,WAAzB;;EACjB,MAAI,CAAC,IAAI,CAAC,KAAL,CAAW,aAAX,EAA0B,IAA1B,CAAD,IAAoC,WAAW,CAAC,MAAhD,IAA0D,SAAS,KAAK,MAA5E,EAAoF;EAClF,IAAA,WAAW,CAAC,OAAZ,CAAoB,GAAG,CAAC,aAAD,CAAH,CAAmB,QAAnB,EAApB;EACD;;EACD,MAAI,WAAW,CAAC,MAAhB,EAAwB,SAAS,CAAC,IAAV,WAAkB,WAAW,CAAC,IAAZ,CAAiB,EAAjB,CAAlB;EACxB,MAAI,SAAS,CAAC,MAAd,EAAsB,SAAS,CAAC,OAAV,CAAkB,GAAlB;EACtB,MAAI,CAAC,SAAS,CAAC,MAAX,IAAqB,CAAC,SAAS,CAAC,MAApC,EAA4C,OAAO,MAAP;EAC5C,mBAAU,IAAI,GAAG,CAAP,GAAW,GAAX,GAAiB,EAA3B,cAAiC,SAAS,CAAC,IAAV,CAAe,EAAf,CAAjC,SAAsD,SAAS,CAAC,IAAV,CAAe,EAAf,CAAtD;EACD;EAEK,SAAU,oBAAV,CACJ,IADI,EAE8D;EAAA,MAAlE,YAAkE,uEAAN,MAAM;EAElE,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,CAAR,CAA1B;EACA,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAD,EAAO,SAAP,CAAR,CAAnC;EACA,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAD,EAAO,OAAP,CAAR,CAAjC;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,CAAR,CAA3B;EACA,MAAM,QAAQ,GAAG,wBAAwB,CAAC,UAAD,EAAa,YAAb,CAAzC;EACA,mBAAU,IAAV,cAAkB,KAAlB,cAA2B,GAA3B,SAAiC,QAAjC;EACD;EAEK,SAAU,wBAAV,CACJ,QADI,EAEJ,SAFI,EAI4C;EAAA,MADhD,YACgD,uEADQ,MACR;EAAA,MAAhD,OAAgD,uEAAT,SAAS;EAEhD,MAAI,IAAI,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAAlB;EACA,MAAI,KAAK,GAAG,OAAO,CAAC,QAAD,EAAW,SAAX,CAAnB;EACA,MAAI,GAAG,GAAG,OAAO,CAAC,QAAD,EAAW,OAAX,CAAjB;EACA,MAAI,IAAI,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAAlB;EACA,MAAI,MAAM,GAAG,OAAO,CAAC,QAAD,EAAW,UAAX,CAApB;EACA,MAAI,MAAM,GAAG,OAAO,CAAC,QAAD,EAAW,UAAX,CAApB;EACA,MAAI,WAAW,GAAG,OAAO,CAAC,QAAD,EAAW,eAAX,CAAzB;EACA,MAAI,WAAW,GAAG,OAAO,CAAC,QAAD,EAAW,eAAX,CAAzB;EACA,MAAI,UAAU,GAAG,OAAO,CAAC,QAAD,EAAW,cAAX,CAAxB;;EAEA,MAAI,OAAJ,EAAa;EACX,QAAQ,IAAR,GAA0C,OAA1C,CAAQ,IAAR;EAAA,QAAc,SAAd,GAA0C,OAA1C,CAAc,SAAd;EAAA,QAAyB,YAAzB,GAA0C,OAA1C,CAAyB,YAAzB;;EADW,4BAEyE,gBAAgB,CAClG,IADkG,EAElG,KAFkG,EAGlG,GAHkG,EAIlG,IAJkG,EAKlG,MALkG,EAMlG,MANkG,EAOlG,WAPkG,EAQlG,WARkG,EASlG,UATkG,EAUlG,SAVkG,EAWlG,IAXkG,EAYlG,YAZkG,CAFzF;;EAER,IAAA,IAFQ,qBAER,IAFQ;EAEF,IAAA,KAFE,qBAEF,KAFE;EAEK,IAAA,GAFL,qBAEK,GAFL;EAEU,IAAA,IAFV,qBAEU,IAFV;EAEgB,IAAA,MAFhB,qBAEgB,MAFhB;EAEwB,IAAA,MAFxB,qBAEwB,MAFxB;EAEgC,IAAA,WAFhC,qBAEgC,WAFhC;EAE6C,IAAA,WAF7C,qBAE6C,WAF7C;EAE0D,IAAA,UAF1D,qBAE0D,UAF1D;EAgBZ;;EAED,MAAM,UAAU,GAAG,aAAa,CAAC,IAAD,CAAhC;EACA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAD,CAAzC;EACA,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAD,CAAvC;EACA,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAD,CAAxC;EACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAD,CAA1C;EACA,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAD,EAAS,WAAT,EAAsB,WAAtB,EAAmC,UAAnC,EAA+C,SAA/C,CAA7C;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAD,EAAW,QAAX,CAAR,CAA3B;EACA,MAAM,QAAQ,GAAG,wBAAwB,CAAC,UAAD,EAAa,YAAb,CAAzC;EACA,mBAAU,UAAV,cAAwB,WAAxB,cAAuC,SAAvC,cAAoD,UAApD,cAAkE,YAAlE,SAAiF,aAAjF,SAAiG,QAAjG;EACD;EAEK,SAAU,wBAAV,CACJ,QADI,EAE8D;EAAA,MAAlE,YAAkE,uEAAN,MAAM;EAElE,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,SAAX,CAAR,CAAnC;EACA,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,OAAX,CAAR,CAAjC;EACA,MAAI,YAAY,aAAM,KAAN,cAAe,GAAf,CAAhB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAAxB;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAD,CAA3B;;EACA,MAAI,YAAY,KAAK,QAAjB,IAA6B,UAAU,KAAK,SAAhD,EAA2D;EACzD,QAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,QAAD,EAAW,QAAX,CAAR,CAA1B;EACA,IAAA,YAAY,aAAM,IAAN,cAAc,YAAd,CAAZ;EACD;;EACD,MAAM,cAAc,GAAG,wBAAwB,CAAC,UAAD,EAAa,YAAb,CAA/C;EACA,MAAI,cAAJ,EAAoB,YAAY,IAAI,cAAhB;EACpB,SAAO,YAAP;EACD;EAEK,SAAU,yBAAV,CACJ,SADI,EAE8D;EAAA,MAAlE,YAAkE,uEAAN,MAAM;EAElE,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,SAAD,EAAY,QAAZ,CAAR,CAA1B;EACA,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,SAAD,EAAY,SAAZ,CAAR,CAAnC;EACA,MAAI,YAAY,aAAM,IAAN,cAAc,KAAd,CAAhB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAD,EAAY,QAAZ,CAAxB;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAD,CAA3B;;EACA,MAAI,YAAY,KAAK,QAAjB,IAA6B,UAAU,KAAK,SAAhD,EAA2D;EACzD,QAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,SAAD,EAAY,OAAZ,CAAR,CAAjC;EACA,IAAA,YAAY,eAAQ,GAAR,CAAZ;EACD;;EACD,MAAM,cAAc,GAAG,wBAAwB,CAAC,UAAD,EAAa,YAAb,CAA/C;EACA,MAAI,cAAJ,EAAoB,YAAY,IAAI,cAAhB;EACpB,SAAO,YAAP;EACD;EAEK,SAAU,6BAAV,CACJ,GADI,EAEJ,SAFI,EAM4C;EAAA,MAHhD,YAGgD,uEAHQ,MAGR;EAAA,MAFhD,YAEgD,uEAFY,MAEZ;EAAA,MADhD,UACgD,uEADI,MACJ;EAAA,MAAhD,OAAgD,uEAAT,SAAS;EAEhD,MAAI,OAAO,GAAG,OAAO,CAAC,GAAD,EAAM,OAAN,CAArB;;EAEA,MAAI,OAAJ,EAAa;EACX,QAAQ,IAAR,GAA0C,OAA1C,CAAQ,IAAR;EAAA,QAAc,SAAd,GAA0C,OAA1C,CAAc,SAAd;EAAA,QAAyB,YAAzB,GAA0C,OAA1C,CAAyB,YAAzB;EACA,QAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,GAAD,EAAM,gBAAN,CAAR,EAAiC,SAAjC,EAA4C,IAA5C,EAAkD,YAAlD,CAAvB;EACA,QAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,IAAA,OAAO,GAAG,IAAI,eAAJ,CAAoB,EAApB,CAAV;EACD;;EAED,MAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,SAAN,CAAlB;EACA,MAAM,GAAG,GAAG,kBAAkB,EAA9B;EACA,MAAM,QAAQ,GAAG,kCAAkC,CAAC,EAAD,EAAK,OAAL,EAAc,GAAd,CAAnD;EAEA,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,QAAD,EAAW,QAAX,CAAR,CAA1B;EACA,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,SAAX,CAAR,CAAnC;EACA,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,OAAX,CAAR,CAAjC;EACA,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,QAAX,CAAR,CAAlC;EACA,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAD,EAAW,UAAX,CAAR,CAApC;EACA,MAAM,OAAO,GAAG,uBAAuB,CACrC,OAAO,CAAC,QAAD,EAAW,UAAX,CAD8B,EAErC,OAAO,CAAC,QAAD,EAAW,eAAX,CAF8B,EAGrC,OAAO,CAAC,QAAD,EAAW,eAAX,CAH8B,EAIrC,OAAO,CAAC,QAAD,EAAW,cAAX,CAJ8B,EAKrC,SALqC,CAAvC;EAOA,MAAI,MAAM,aAAM,IAAN,cAAc,KAAd,cAAuB,GAAvB,cAA8B,IAA9B,cAAsC,MAAtC,SAA+C,OAA/C,CAAV;;EACA,MAAI,UAAU,KAAK,OAAnB,EAA4B;EAC1B,QAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAD,EAAK,OAAL,CAAxC;EACA,IAAA,MAAM,IAAI,6BAA6B,CAAC,QAAD,CAAvC;EACD;;EACD,MAAI,YAAY,KAAK,OAArB,EAA8B,MAAM,eAAQ,EAAR,MAAN;EAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAD,EAAM,QAAN,CAAR,CAA3B;EACA,EAAA,MAAM,IAAI,wBAAwB,CAAC,UAAD,EAAa,YAAb,CAAlC;EACA,SAAO,MAAP;EACD;EAEK,SAAU,wBAAV,CAAmC,MAAnC,EAAiD;EACrD,SAAO,MAAM,CAAC,IAAP,CAAY,UAAU,CAAC,MAAD,CAAtB,CAAP;EACD;EAEK,SAAU,yBAAV,CAAoC,MAApC,EAAkD;EACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAP,CAAY,UAAU,CAAC,MAAD,CAAtB,CAAd;;EACA,MAAI,CAAC,KAAL,EAAY;EACV,UAAM,IAAI,UAAJ,qCAA4C,MAA5C,EAAN;EACD;;EACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAD,CAAL,KAAa,GAAb,IAAoB,KAAK,CAAC,CAAD,CAAL,KAAa,QAAjC,GAA4C,CAAC,CAA7C,GAAiD,CAAC,CAA/D;EACA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAD,CAApB;EACA,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,CAAD,CAAL,IAAY,CAAd,CAAhB;EACA,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,CAAD,CAAL,IAAY,CAAd,CAAhB;EACA,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,IAAkB,WAAnB,EAAgC,KAAhC,CAAsC,CAAtC,EAAyC,CAAzC,CAArB;EACA,SAAO,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,EAAR,GAAa,OAAd,IAAyB,EAAzB,GAA8B,OAA/B,IAA0C,GAA1C,GAAgD,WAApD,CAAX;EACD;EAEK,SAAU,8BAAV,CAAyC,kBAAzC,EAAmE;EACvE,MAAI,wBAAwB,CAAC,kBAAD,CAA5B,EAAkD;EAChD,QAAM,QAAQ,GAAG,yBAAyB,CAAC,kBAAD,CAA1C;EACA,WAAO,0BAA0B,CAAC,QAAD,CAAjC;EACD;;EACD,MAAM,SAAS,GAAG,oCAAoC,CAAC,UAAU,CAAC,kBAAD,CAAX,CAAtD;EACA,SAAO,SAAS,CAAC,eAAV,GAA4B,QAAnC;EACD;EAEK,SAAU,gCAAV,CAA2C,gBAA3C,EAAmE,EAAnE,EAA6E;EACjF,8BAAyF,4BAA4B,CACnH,gBADmH,EAEnH,EAFmH,CAArH;EAAA,MAAQ,IAAR,yBAAQ,IAAR;EAAA,MAAc,KAAd,yBAAc,KAAd;EAAA,MAAqB,GAArB,yBAAqB,GAArB;EAAA,MAA0B,IAA1B,yBAA0B,IAA1B;EAAA,MAAgC,MAAhC,yBAAgC,MAAhC;EAAA,MAAwC,MAAxC,yBAAwC,MAAxC;EAAA,MAAgD,WAAhD,yBAAgD,WAAhD;EAAA,MAA6D,WAA7D,yBAA6D,WAA7D;EAAA,MAA0E,UAA1E,yBAA0E,UAA1E;;EAIA,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAAhC;EACA,MAAI,GAAG,KAAK,IAAZ,EAAkB,MAAM,IAAI,UAAJ,CAAe,iCAAf,CAAN;EAClB,SAAO,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,GAAd,EAAmB,gBAAnB,CAAd,CAAP;EACD;;EAED,SAAS,0BAAT,CAAoC,sBAApC,EAAkE;EAChE,MAAM,IAAI,GAAG,sBAAsB,GAAG,CAAzB,GAA6B,GAA7B,GAAmC,GAAhD;EACA,MAAM,iBAAiB,GAAGA,SAAO,CAAC,sBAAD,CAAjC;EACA,MAAM,WAAW,GAAG,iBAAiB,GAAG,GAAxC;EACA,MAAM,OAAO,GAAGC,WAAS,CAAC,iBAAiB,GAAG,GAArB,CAAT,GAAqC,EAArD;EACA,MAAM,OAAO,GAAGA,WAAS,CAAC,iBAAiB,GAAG,IAArB,CAAT,GAAsC,EAAtD;EACA,MAAM,KAAK,GAAGA,WAAS,CAAC,iBAAiB,GAAG,MAArB,CAAvB;EAEA,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAD,CAAxC;EACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAD,CAA1C;EACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAD,CAA1C;EACA,MAAI,IAAI,GAAG,EAAX;;EACA,MAAI,WAAJ,EAAiB;EACf,QAAI,QAAQ,GAAG,UAAG,WAAH,EAAiB,QAAjB,CAA0B,CAA1B,EAA6B,GAA7B,CAAf;;EACA,WAAO,QAAQ,CAAC,QAAQ,CAAC,MAAT,GAAkB,CAAnB,CAAR,KAAkC,GAAzC;EAA8C,MAAA,QAAQ,GAAG,QAAQ,CAAC,KAAT,CAAe,CAAf,EAAkB,CAAC,CAAnB,CAAX;EAA9C;;EACA,IAAA,IAAI,cAAO,YAAP,cAAuB,QAAvB,CAAJ;EACD,GAJD,MAIO,IAAI,OAAJ,EAAa;EAClB,IAAA,IAAI,cAAO,YAAP,CAAJ;EACD;;EACD,mBAAU,IAAV,SAAiB,UAAjB,cAA+B,YAA/B,SAA8C,IAA9C;EACD;;EAED,SAAS,6BAAT,CAAuC,sBAAvC,EAAqE;EACnE,MAAI,iBAAiB,GAAG,IAAI,CAAC,QAAL,CACtB,sBAAsB,CAAC,IAAI,CAAC,MAAL,CAAY,sBAAZ,CAAD,EAAsC,IAAtC,EAA4C,YAA5C,CADA,CAAxB;EAGA,MAAM,IAAI,GAAG,iBAAiB,GAAG,CAApB,GAAwB,GAAxB,GAA8B,GAA3C;EACA,EAAA,iBAAiB,GAAGD,SAAO,CAAC,iBAAD,CAA3B;EACA,MAAM,OAAO,GAAI,iBAAiB,GAAG,IAArB,GAA6B,EAA7C;EACA,MAAM,KAAK,GAAGC,WAAS,CAAC,iBAAiB,GAAG,MAArB,CAAvB;EAEA,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAD,CAAxC;EACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAD,CAA1C;EACA,mBAAU,IAAV,SAAiB,UAAjB,cAA+B,YAA/B;EACD;;EACK,SAAU,oBAAV,CACJ,IADI,EAEJ,KAFI,EAGJ,GAHI,EAIJ,IAJI,EAKJ,MALI,EAMJ,MANI,EAOJ,WAPI,EAQJ,WARI,EASJ,UATI,EASc;EAElB;EACA;EACA,MAAM,UAAU,GAAG,IAAI,IAAJ,EAAnB;EACA,EAAA,UAAU,CAAC,WAAX,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,MAArC,EAA6C,WAA7C;EACA,EAAA,UAAU,CAAC,cAAX,CAA0B,IAA1B,EAAgC,KAAK,GAAG,CAAxC,EAA2C,GAA3C;EACA,MAAM,EAAE,GAAG,UAAU,CAAC,OAAX,EAAX;EACA,MAAI,WAAW,CAAC,EAAD,CAAf,EAAqB,OAAO,IAAP;EACrB,MAAI,EAAE,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,EAAZ,CAAd,EAA+B,OAA/B,CAAT;EACA,EAAA,EAAE,GAAG,IAAI,CAAC,GAAL,CAAS,EAAT,EAAa,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,WAAZ,CAAd,EAAwC,QAAxC,CAAb,CAAL;EACA,EAAA,EAAE,GAAG,IAAI,CAAC,GAAL,CAAS,EAAT,EAAa,IAAI,CAAC,MAAL,CAAY,UAAZ,CAAb,CAAL;EACA,MAAI,IAAI,CAAC,QAAL,CAAc,EAAd,EAAkB,MAAlB,KAA6B,IAAI,CAAC,WAAL,CAAiB,EAAjB,EAAqB,MAArB,CAAjC,EAA+D,OAAO,IAAP;EAC/D,SAAO,EAAP;EACD;;EAED,SAAS,oBAAT,CAA8B,gBAA9B,EAAoD;EAClD,iBAAgC,MAAM,CAAC,gBAAD,EAAmB,OAAnB,CAAtC;EAAA,MAAQ,QAAR,YAAQ,QAAR;EAAA,MAAkB,SAAlB,YAAkB,SAAlB;;EACA,MAAI,iBAAiB,GAAG,IAAI,CAAC,QAAL,CAAc,QAAd,CAAxB;EACA,MAAI,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,SAAd,CAAZ;;EACA,MAAI,KAAK,GAAG,CAAZ,EAAe;EACb,IAAA,KAAK,IAAI,GAAT;EACA,IAAA,iBAAiB,IAAI,CAArB;EACD;;EACD,MAAM,WAAW,GAAGA,WAAS,CAAC,KAAK,GAAG,GAAT,CAAT,GAAyB,GAA7C;EACA,MAAM,UAAU,GAAG,KAAK,GAAG,GAA3B;EAEA,MAAM,IAAI,GAAG,IAAI,IAAJ,CAAS,iBAAT,CAAb;EACA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAL,EAAb;EACA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAL,KAAqB,CAAnC;EACA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAL,EAAZ;EACA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAL,EAAb;EACA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAL,EAAf;EACA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAL,EAAf;EACA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAL,EAApB;EAEA,SAAO;EAAE,IAAA,iBAAiB,EAAjB,iBAAF;EAAqB,IAAA,IAAI,EAAJ,IAArB;EAA2B,IAAA,KAAK,EAAL,KAA3B;EAAkC,IAAA,GAAG,EAAH,GAAlC;EAAuC,IAAA,IAAI,EAAJ,IAAvC;EAA6C,IAAA,MAAM,EAAN,MAA7C;EAAqD,IAAA,MAAM,EAAN,MAArD;EAA6D,IAAA,WAAW,EAAX,WAA7D;EAA0E,IAAA,WAAW,EAAX,WAA1E;EAAuF,IAAA,UAAU,EAAV;EAAvF,GAAP;EACD;;;EAGK,SAAU,4BAAV,CAAuC,gBAAvC,EAA+D,EAA/D,EAAyE;EAC7E,+BAAoE,oBAAoB,CAAC,gBAAD,CAAxF;EAAA,MAAQ,iBAAR,0BAAQ,iBAAR;EAAA,MAA2B,WAA3B,0BAA2B,WAA3B;EAAA,MAAwC,WAAxC,0BAAwC,WAAxC;EAAA,MAAqD,UAArD,0BAAqD,UAArD;;EACA,2BAAmD,iBAAiB,CAAC,EAAD,EAAK,iBAAL,CAApE;EAAA,MAAQ,IAAR,sBAAQ,IAAR;EAAA,MAAc,KAAd,sBAAc,KAAd;EAAA,MAAqB,GAArB,sBAAqB,GAArB;EAAA,MAA0B,IAA1B,sBAA0B,IAA1B;EAAA,MAAgC,MAAhC,sBAAgC,MAAhC;EAAA,MAAwC,MAAxC,sBAAwC,MAAxC;;EACA,SAAO,kBAAkB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAAzB;EACD;;EAED,SAAS,OAAT,CAAiB,GAAjB,EAA4B,GAA5B,EAAqC;EACnC,SAAO,IAAI,CAAC,QAAL,CAAc,GAAd,EAAmB,GAAnB,IAA0B,GAA1B,GAAgC,GAAvC;EACD;EAED;;;;;EAKG;;;EACH,SAAS,iCAAT,GAA0C;EACxC,SAAO,IAAI,CAAC,GAAL,CAAS,yBAAyB,EAAlC,EAAsC,qBAAtC,CAAP;EACD;;EAEK,SAAU,6BAAV,CAAwC,gBAAxC,EAAgE,EAAhE,EAA0E;EAC9E;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAA2B,oBAA3B,CAArB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,iCAAiC,EAAlC,EAAsC,YAAtC,CAAxB,CAhB8E;EAkB9E;;EACA,MAAI,SAAS,GAAG,OAAO,CAAC,8BAAD,EAAiC,gBAAjC,CAAvB;EACA,MAAM,YAAY,GAAG,gCAAgC,CAAC,SAAD,EAAY,EAAZ,CAArD;EACA,MAAI,UAAU,GAAG,SAAjB;EACA,MAAI,aAAa,GAAG,YAApB;;EACA,SAAO,YAAY,KAAK,aAAjB,IAAkC,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAd,EAAsC,QAAtC,CAAzC,EAA0F;EACxF,IAAA,UAAU,GAAG,IAAI,CAAC,GAAL,CAAS,SAAT,EAAoB,eAApB,CAAb;EACA,IAAA,aAAa,GAAG,gCAAgC,CAAC,UAAD,EAAa,EAAb,CAAhD;;EACA,QAAI,YAAY,KAAK,aAArB,EAAoC;EAClC,MAAA,SAAS,GAAG,UAAZ;EACD;EACF;;EACD,MAAI,YAAY,KAAK,aAArB,EAAoC,OAAO,IAAP;EACpC,MAAM,MAAM,GAAG,MAAM,CACnB,UAAC,OAAD;EAAA,WAAmB,gCAAgC,CAAC,OAAD,EAAU,EAAV,CAAnD;EAAA,GADmB,EAEnB,SAFmB,EAGnB,UAHmB,EAInB,YAJmB,EAKnB,aALmB,CAArB;EAOA,SAAO,MAAP;EACD;EAEK,SAAU,iCAAV,CAA4C,gBAA5C,EAAoE,EAApE,EAA8E;EAClF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,eAAe,GAAG,iCAAiC,EAAzD;EACA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAL,CAAiB,gBAAjB,EAAmC,eAAnC,CAApB;EACA,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,gBAAd,EAAgC,oBAAhC,CAAH,GAA2D,8BAAvF;EACA,MAAI,UAAU,GAAG,IAAI,CAAC,QAAL,CAAc,gBAAd,EAAgC,GAAhC,CAAjB;EACA,MAAM,aAAa,GAAG,gCAAgC,CAAC,UAAD,EAAa,EAAb,CAAtD;EACA,MAAI,SAAS,GAAG,UAAhB;EACA,MAAI,YAAY,GAAG,aAAnB;;EACA,SAAO,aAAa,KAAK,YAAlB,IAAkC,IAAI,CAAC,WAAL,CAAiB,UAAjB,EAA6B,QAA7B,CAAzC,EAAiF;EAC/E,IAAA,SAAS,GAAG,IAAI,CAAC,QAAL,CAAc,UAAd,EAA0B,eAA1B,CAAZ;EACA,IAAA,YAAY,GAAG,gCAAgC,CAAC,SAAD,EAAY,EAAZ,CAA/C;;EACA,QAAI,aAAa,KAAK,YAAtB,EAAoC;EAClC,MAAA,UAAU,GAAG,SAAb;EACD;EACF;;EACD,MAAI,aAAa,KAAK,YAAtB,EAAoC;EAClC,QAAI,WAAJ,EAAiB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAM,cAAc,GAAG,IAAI,CAAC,QAAL,CAAc,eAAd,EAA+B,SAA/B,CAAvB;EACA,aAAO,iCAAiC,CAAC,cAAD,EAAiB,EAAjB,CAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EACD,MAAM,MAAM,GAAG,MAAM,CACnB,UAAC,OAAD;EAAA,WAAmB,gCAAgC,CAAC,OAAD,EAAU,EAAV,CAAnD;EAAA,GADmB,EAEnB,SAFmB,EAGnB,UAHmB,EAInB,YAJmB,EAKnB,aALmB,CAArB;EAOA,SAAO,MAAP;EACD;;EAGK,SAAU,mBAAV,CAA8B,QAA9B,EAA8C;EAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAT,CAAe,QAAf,CAAd;;EAEA,MAAI,KAAK,CAAC,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAI,UAAJ,iCAAuC,QAAvC,EAAN;EACD;;EAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAD,CAApB;EACA,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAD,CAAlB;EACA,MAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAD,CAAjB;EACA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAD,CAAL,CAAS,WAAT,EAAZ;;EACA,MAAI,GAAG,KAAK,GAAR,IAAe,GAAG,KAAK,IAA3B,EAAiC;EAC/B,IAAA,IAAI,GAAG,CAAC,IAAD,GAAQ,CAAf;EACD,GAFD,MAEO,IAAI,GAAG,KAAK,GAAR,IAAe,GAAG,KAAK,IAA3B,EAAiC;EACtC,UAAM,IAAI,UAAJ,uBAA8B,GAA9B,mBAAyC,QAAzC,EAAN;EACD;;EACD,MAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAD,CAAjB;;EACA,MAAI,IAAI,KAAK,EAAb,EAAiB;EACf;EACA,IAAA,IAAI,GAAG,CAAP;EACD;;EACD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAD,CAArB;EACA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAD,CAArB;;EAEA,MACE,CAAC,cAAc,CAAC,IAAD,CAAf,IACA,CAAC,cAAc,CAAC,KAAD,CADf,IAEA,CAAC,cAAc,CAAC,GAAD,CAFf,IAGA,CAAC,cAAc,CAAC,IAAD,CAHf,IAIA,CAAC,cAAc,CAAC,MAAD,CAJf,IAKA,CAAC,cAAc,CAAC,MAAD,CANjB,EAOE;EACA,UAAM,IAAI,UAAJ,+BAAqC,QAArC,EAAN;EACD;;EAED,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH,GAAf;EAAoB,IAAA,IAAI,EAAJ,IAApB;EAA0B,IAAA,MAAM,EAAN,MAA1B;EAAkC,IAAA,MAAM,EAAN;EAAlC,GAAP;EACD;;EAGK,SAAU,iBAAV,CAA4B,QAA5B,EAA8C,iBAA9C,EAAuE;EAC3E,MAAM,SAAS,GAAG,oCAAoC,CAAC,QAAD,CAAtD,CAD2E;;EAG3E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAV,CAAiB,IAAI,IAAJ,CAAS,iBAAT,CAAjB,CAAjB;EACA,SAAO,mBAAmB,CAAC,QAAD,CAA1B;EACD;EAEK,SAAU,yBAAV,CACJ,EADI,EAEJ,IAFI,EAGJ,KAHI,EAIJ,GAJI,EAKJ,IALI,EAMJ,MANI,EAOJ,MAPI,EAQJ,WARI,EASJ,WATI,EAUJ,UAVI,EAUc;EAElB,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,CAA/B;EACA,MAAI,EAAE,KAAK,IAAX,EAAiB,MAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EACjB,MAAI,SAAS,GAAG,IAAI,CAAC,QAAL,CAAc,EAAd,EAAkB,SAAlB,CAAhB;EACA,MAAI,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,MAAzB,CAAJ,EAAsC,SAAS,GAAG,EAAZ;EACtC,MAAI,OAAO,GAAG,IAAI,CAAC,GAAL,CAAS,EAAT,EAAa,SAAb,CAAd;EACA,MAAI,IAAI,CAAC,WAAL,CAAiB,OAAjB,EAA0B,MAA1B,CAAJ,EAAuC,OAAO,GAAG,EAAV;EACvC,MAAM,QAAQ,GAAG,gCAAgC,CAAC,SAAD,EAAY,EAAZ,CAAjD;EACA,MAAM,MAAM,GAAG,gCAAgC,CAAC,OAAD,EAAU,EAAV,CAA/C;EACA,MAAM,KAAK,GAAG,QAAQ,KAAK,MAAb,GAAsB,CAAC,QAAD,CAAtB,GAAmC,CAAC,QAAD,EAAW,MAAX,CAAjD;EACA,SAAO,KAAK,CACT,GADI,CACA,UAAC,iBAAD,EAAsB;EACzB,QAAM,gBAAgB,GAAG,IAAI,CAAC,QAAL,CAAc,EAAd,EAAkB,IAAI,CAAC,MAAL,CAAY,iBAAZ,CAAlB,CAAzB;EACA,QAAM,KAAK,GAAG,4BAA4B,CAAC,gBAAD,EAAmB,EAAnB,CAA1C;;EACA,QACE,IAAI,KAAK,KAAK,CAAC,IAAf,IACA,KAAK,KAAK,KAAK,CAAC,KADhB,IAEA,GAAG,KAAK,KAAK,CAAC,GAFd,IAGA,IAAI,KAAK,KAAK,CAAC,IAHf,IAIA,MAAM,KAAK,KAAK,CAAC,MAJjB,IAKA,MAAM,KAAK,KAAK,CAAC,MALjB,IAMA,WAAW,KAAK,KAAK,CAAC,WANtB,IAOA,WAAW,KAAK,KAAK,CAAC,WAPtB,IAQA,UAAU,KAAK,KAAK,CAAC,UATvB,EAUE;EACA,aAAO,SAAP;EACD;;EACD,WAAO,gBAAP;EACD,GAlBI,EAmBJ,MAnBI,CAmBG,UAAC,CAAD;EAAA,WAAO,CAAC,KAAK,SAAb;EAAA,GAnBH,CAAP;EAoBD;EAEK,SAAU,QAAV,CAAmB,IAAnB,EAA+B;EACnC,MAAI,SAAS,KAAK,IAAlB,EAAwB,OAAO,KAAP;EACxB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAP,KAAa,CAA5B;EACA,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAP,KAAe,CAAhC;EACA,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAP,KAAe,CAAhC;EACA,SAAO,MAAM,KAAK,CAAC,QAAD,IAAa,QAAlB,CAAb;EACD;EAEK,SAAU,cAAV,CAAyB,IAAzB,EAAuC,KAAvC,EAAoD;EACxD,MAAM,GAAG,GAAG;EACV,IAAA,QAAQ,EAAE,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,EAAyB,EAAzB,EAA6B,EAA7B,EAAiC,EAAjC,EAAqC,EAArC,EAAyC,EAAzC,EAA6C,EAA7C,CADA;EAEV,IAAA,QAAQ,EAAE,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,EAAyB,EAAzB,EAA6B,EAA7B,EAAiC,EAAjC,EAAqC,EAArC,EAAyC,EAAzC,EAA6C,EAA7C;EAFA,GAAZ;EAIA,SAAO,GAAG,CAAC,QAAQ,CAAC,IAAD,CAAR,GAAiB,UAAjB,GAA8B,UAA/B,CAAH,CAA8C,KAAK,GAAG,CAAtD,CAAP;EACD;EAEK,SAAU,SAAV,CAAoB,IAApB,EAAkC,KAAlC,EAAiD,GAAjD,EAA4D;EAChE,MAAM,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,CAAR,GAAY,EAAZ,GAAiB,CAAC,CAAtB,CAAf;EACA,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,CAAR,GAAY,CAAZ,GAAgB,CAApB,CAAd;EAEA,MAAM,CAAC,GAAGA,WAAS,CAAC,CAAC,GAAG,GAAL,CAAnB;EACA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAlB;EACA,MAAM,CAAC,GAAG,GAAV;EAEA,MAAM,EAAE,GAAG,CAAX;EACA,MAAM,EAAE,GAAGA,WAAS,CAAC,MAAM,CAAN,GAAU,GAAX,CAApB;EACA,MAAM,EAAE,GAAG,CAAC,GAAGA,WAAS,CAAC,CAAC,GAAG,CAAL,CAAxB;EACA,MAAM,EAAE,GAAGA,WAAS,CAAC,CAAC,GAAG,CAAL,CAAT,GAAmB,IAAI,CAAlC;EAEA,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAL,GAAU,EAAV,GAAe,EAAhB,IAAsB,CAAlC;EAEA,SAAO,GAAG,IAAI,GAAG,IAAI,CAAP,GAAW,CAAX,GAAe,CAAnB,CAAV;EACD;EAEK,SAAU,SAAV,CAAoB,IAApB,EAAkC,KAAlC,EAAiD,GAAjD,EAA4D;EAChE,MAAI,IAAI,GAAG,GAAX;;EACA,OAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAArB,EAAwB,CAAC,GAAG,CAA5B,EAA+B,CAAC,EAAhC,EAAoC;EAClC,IAAA,IAAI,IAAI,cAAc,CAAC,IAAD,EAAO,CAAP,CAAtB;EACD;;EACD,SAAO,IAAP;EACD;EAEK,SAAU,UAAV,CAAqB,IAArB,EAAmC,KAAnC,EAAkD,GAAlD,EAA6D;EACjE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAArB;EACA,MAAM,GAAG,GAAG,SAAS,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAAT,IAA+B,CAA3C;EACA,MAAM,GAAG,GAAG,SAAS,CAAC,IAAD,EAAO,CAAP,EAAU,CAAV,CAArB;EAEA,MAAM,IAAI,GAAGA,WAAS,CAAC,CAAC,GAAG,GAAG,GAAN,GAAY,EAAb,IAAmB,CAApB,CAAtB;;EAEA,MAAI,IAAI,GAAG,CAAX,EAAc;EACZ,QAAI,GAAG,KAAK,CAAR,IAAc,GAAG,KAAK,CAAR,IAAa,QAAQ,CAAC,IAAI,GAAG,CAAR,CAAvC,EAAoD;EAClD,aAAO,EAAP;EACD,KAFD,MAEO;EACL,aAAO,EAAP;EACD;EACF;;EACD,MAAI,IAAI,KAAK,EAAb,EAAiB;EACf,QAAI,CAAC,QAAQ,CAAC,IAAD,CAAR,GAAiB,GAAjB,GAAuB,GAAxB,IAA+B,GAA/B,GAAqC,IAAI,GAA7C,EAAkD;EAChD,aAAO,CAAP;EACD;EACF;;EAED,SAAO,IAAP;EACD;EAEK,SAAU,YAAV,CACJ,CADI,EAEJ,GAFI,EAGJ,CAHI,EAIJ,CAJI,EAKJ,CALI,EAMJ,GANI,EAOJ,CAPI,EAQJ,EARI,EASJ,EATI,EAUJ,EAVI,EAUM;EAEV,4BAAmB,CAAC,CAAD,EAAI,GAAJ,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,GAAlB,EAAuB,CAAvB,EAA0B,EAA1B,EAA8B,EAA9B,EAAkC,EAAlC,CAAnB,6BAA0D;EAArD,QAAM,IAAI,aAAV;EACH,QAAI,IAAI,KAAK,CAAb,EAAgB,OAAO,IAAI,GAAG,CAAP,GAAW,CAAC,CAAZ,GAAgB,CAAvB;EACjB;;EACD,SAAO,CAAP;EACD;;EAED,SAAS,mBAAT,CAA6B,SAA7B,EAAgD,UAAhD,EAAkE;EAChE,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,CAAC,cAAc,CAAC,IAAD,CAAf,IAAyB,CAAC,cAAc,CAAC,KAAD,CAA5C,EAAqD,MAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;EACrD,EAAA,KAAK,IAAI,CAAT;EACA,EAAA,IAAI,IAAIA,WAAS,CAAC,KAAK,GAAG,EAAT,CAAjB;EACA,EAAA,KAAK,IAAI,EAAT;EACA,MAAI,KAAK,GAAG,CAAZ,EAAe,KAAK,IAAI,EAAT;EACf,EAAA,KAAK,IAAI,CAAT;EACA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL;EAAR,GAAP;EACD;;EAED,SAAS,cAAT,CAAwB,SAAxB,EAA2C,UAA3C,EAA+D,QAA/D,EAA+E;EAC7E,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,GAAG,GAAG,QAAV;EACA,MAAI,CAAC,cAAc,CAAC,GAAD,CAAnB,EAA0B,MAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;;EAJmD,6BAK1D,mBAAmB,CAAC,IAAD,EAAO,KAAP,CALuC;;EAK1E,EAAA,IAL0E,wBAK1E,IAL0E;EAKpE,EAAA,KALoE,wBAKpE,KALoE;EAM7E,MAAI,UAAU,GAAG,CAAjB;EACA,MAAI,QAAQ,GAAG,KAAK,GAAG,CAAR,GAAY,IAAZ,GAAmB,IAAI,GAAG,CAAzC;;EACA,SAAS,UAAU,GAAG,QAAQ,CAAC,QAAD,CAAR,GAAqB,GAArB,GAA2B,GAAzC,EAA+C,GAAG,GAAG,CAAC,UAA9D,EAA2E;EACzE,IAAA,IAAI,IAAI,CAAR;EACA,IAAA,QAAQ,IAAI,CAAZ;EACA,IAAA,GAAG,IAAI,UAAP;EACD;;EACD,EAAA,QAAQ,IAAI,CAAZ;;EACA,SAAS,UAAU,GAAG,QAAQ,CAAC,QAAD,CAAR,GAAqB,GAArB,GAA2B,GAAzC,EAA+C,GAAG,GAAG,UAA7D,EAA0E;EACxE,IAAA,IAAI,IAAI,CAAR;EACA,IAAA,QAAQ,IAAI,CAAZ;EACA,IAAA,GAAG,IAAI,UAAP;EACD;;EAED,SAAO,GAAG,GAAG,CAAb,EAAgB;EAAA,gCACK,mBAAmB,CAAC,IAAD,EAAO,KAAK,GAAG,CAAf,CADxB;;EACX,IAAA,IADW,yBACX,IADW;EACL,IAAA,KADK,yBACL,KADK;EAEd,IAAA,GAAG,IAAI,cAAc,CAAC,IAAD,EAAO,KAAP,CAArB;EACD;;EACD,SAAO,GAAG,GAAG,cAAc,CAAC,IAAD,EAAO,KAAP,CAA3B,EAA0C;EACxC,IAAA,GAAG,IAAI,cAAc,CAAC,IAAD,EAAO,KAAP,CAArB;;EADwC,gCAErB,mBAAmB,CAAC,IAAD,EAAO,KAAK,GAAG,CAAf,CAFE;;EAErC,IAAA,IAFqC,yBAErC,IAFqC;EAE/B,IAAA,KAF+B,yBAE/B,KAF+B;EAGzC;;EAED,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH;EAAf,GAAP;EACD;;EAED,SAAS,kBAAT,CACE,SADF,EAEE,UAFF,EAGE,QAHF,EAIE,SAJF,EAKE,WALF,EAME,WANF,EAOE,gBAPF,EAQE,gBARF,EASE,eATF,EASyB;EAEvB,qBAAkF,WAAW,CAC3F,SAD2F,EAE3F,WAF2F,EAG3F,WAH2F,EAI3F,gBAJ2F,EAK3F,gBAL2F,EAM3F,eAN2F,CAA7F;EAAA,MAAQ,SAAR,gBAAQ,SAAR;EAAA,MAAmB,IAAnB,gBAAmB,IAAnB;EAAA,MAAyB,MAAzB,gBAAyB,MAAzB;EAAA,MAAiC,MAAjC,gBAAiC,MAAjC;EAAA,MAAyC,WAAzC,gBAAyC,WAAzC;EAAA,MAAsD,WAAtD,gBAAsD,WAAtD;EAAA,MAAmE,UAAnE,gBAAmE,UAAnE;;EAQA,wBAA6B,cAAc,CAAC,SAAD,EAAY,UAAZ,EAAwB,QAAQ,GAAG,SAAnC,CAA3C;EAAA,MAAQ,IAAR,mBAAQ,IAAR;EAAA,MAAc,KAAd,mBAAc,KAAd;EAAA,MAAqB,GAArB,mBAAqB,GAArB;;EACA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH,GAAf;EAAoB,IAAA,IAAI,EAAJ,IAApB;EAA0B,IAAA,MAAM,EAAN,MAA1B;EAAkC,IAAA,MAAM,EAAN,MAAlC;EAA0C,IAAA,WAAW,EAAX,WAA1C;EAAuD,IAAA,WAAW,EAAX,WAAvD;EAAoE,IAAA,UAAU,EAAV;EAApE,GAAP;EACD;;EAED,SAAS,WAAT,CACE,SADF,EAEE,WAFF,EAGE,WAHF,EAIE,gBAJF,EAKE,gBALF,EAME,eANF,EAMyB;EAEvB,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,WAAW,GAAG,gBAAlB;EACA,MAAI,WAAW,GAAG,gBAAlB;EACA,MAAI,UAAU,GAAG,eAAjB;;EACA,MACE,CAAC,cAAc,CAAC,IAAD,CAAf,IACA,CAAC,cAAc,CAAC,MAAD,CADf,IAEA,CAAC,cAAc,CAAC,MAAD,CAFf,IAGA,CAAC,cAAc,CAAC,WAAD,CAHf,IAIA,CAAC,cAAc,CAAC,WAAD,CAJf,IAKA,CAAC,cAAc,CAAC,UAAD,CANjB,EAOE;EACA,UAAM,IAAI,UAAJ,CAAe,0BAAf,CAAN;EACD;;EAED,EAAA,WAAW,IAAIA,WAAS,CAAC,UAAU,GAAG,IAAd,CAAxB;EACA,EAAA,UAAU,GAAG,iBAAiB,CAAC,UAAD,EAAa,IAAb,CAA9B;EAEA,EAAA,WAAW,IAAIA,WAAS,CAAC,WAAW,GAAG,IAAf,CAAxB;EACA,EAAA,WAAW,GAAG,iBAAiB,CAAC,WAAD,EAAc,IAAd,CAA/B;EAEA,EAAA,MAAM,IAAIA,WAAS,CAAC,WAAW,GAAG,IAAf,CAAnB;EACA,EAAA,WAAW,GAAG,iBAAiB,CAAC,WAAD,EAAc,IAAd,CAA/B;EAEA,EAAA,MAAM,IAAIA,WAAS,CAAC,MAAM,GAAG,EAAV,CAAnB;EACA,EAAA,MAAM,GAAG,iBAAiB,CAAC,MAAD,EAAS,EAAT,CAA1B;EAEA,EAAA,IAAI,IAAIA,WAAS,CAAC,MAAM,GAAG,EAAV,CAAjB;EACA,EAAA,MAAM,GAAG,iBAAiB,CAAC,MAAD,EAAS,EAAT,CAA1B;EAEA,MAAM,SAAS,GAAGA,WAAS,CAAC,IAAI,GAAG,EAAR,CAA3B;EACA,EAAA,IAAI,GAAG,iBAAiB,CAAC,IAAD,EAAO,EAAP,CAAxB;EAEA,SAAO;EAAE,IAAA,SAAS,EAAT,SAAF;EAAa,IAAA,IAAI,EAAJ,IAAb;EAAmB,IAAA,MAAM,EAAN,MAAnB;EAA2B,IAAA,MAAM,EAAN,MAA3B;EAAmC,IAAA,WAAW,EAAX,WAAnC;EAAgD,IAAA,WAAW,EAAX,WAAhD;EAA6D,IAAA,UAAU,EAAV;EAA7D,GAAP;EACD;;EAEK,SAAU,wBAAV,CACJ,SADI,EAEJ,UAFI,EAGJ,YAHI,EAIJ,YAJI,EAKJ,iBALI,EAMJ,iBANI,EAOJ,gBAPI,EAQJ,WARI,EAQe;EAEnB,MAAM,IAAI,GAAS,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAnB;EACA,MAAI,WAAW,GAAS,IAAI,CAAC,MAAL,CAAY,gBAAZ,CAAxB;EACA,MAAI,SAAS,KAAK,CAAlB,EAAqB,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,gBAAZ,CAAd,EAA6C,IAAI,CAAC,MAAL,CAAY,WAAZ,CAA7C,CAAd;EACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,MAAL,CAAY,UAAZ,CAAT,EAAkC,IAAI,CAAC,QAAL,CAAc,IAAd,EAAoB,IAAI,CAAC,MAAL,CAAY,EAAZ,CAApB,CAAlC,CAAd;EACA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAT,EAAoC,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,KAArB,CAApC,CAAhB;EACA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAT,EAAoC,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,KAAvB,CAApC,CAAhB;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,MAAL,CAAY,iBAAZ,CAAT,EAAyC,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,QAAvB,CAAzC,CAArB;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,MAAL,CAAY,iBAAZ,CAAT,EAAyC,IAAI,CAAC,QAAL,CAAc,YAAd,EAA4B,QAA5B,CAAzC,CAArB;EACA,SAAO,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,MAAL,CAAY,WAAZ,CAAT,EAAmC,IAAI,CAAC,QAAL,CAAc,YAAd,EAA4B,QAA5B,CAAnC,CAAP;EACD;;EAED,SAAS,iBAAT,CAA2B,gBAA3B,EAAmD,UAAnD,EAA0G;EACxG,MAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAL,CAAc,gBAAd,CAAD,CAArB;EACA,MAAI,WAAW,GAAG,IAAI,CAAC,MAAL,CAAY,gBAAZ,CAAlB;EACA,MAAI,WAAW,GAAG,OAAlB;EACA,MAAI,IAAI,KAAK,CAAb,EAAgB,OAAO;EAAE,IAAA,IAAI,EAAE,CAAR;EAAW,IAAA,WAAW,EAAE,IAAxB;EAA8B,IAAA,WAAW,EAAX;EAA9B,GAAP;;EAChB,MAAI,CAAC,uBAAuB,CAAC,UAAD,CAA5B,EAA0C;EACxC,QAAI,KAAJ;;EADwC,mBAEM,MAAM,CAAC,WAAD,EAAc,IAAI,CAAC,MAAL,CAAY,WAAZ,CAAd,CAFZ;;EAE3B,IAAA,KAF2B,YAErC,QAFqC;EAEV,IAAA,WAFU,YAErB,SAFqB;EAGxC,WAAO;EAAE,MAAA,IAAI,EAAE,IAAI,CAAC,QAAL,CAAc,KAAd,CAAR;EAA6B,MAAA,WAAW,EAAX,WAA7B;EAA0C,MAAA,WAAW,EAAX;EAA1C,KAAP;EACD;;EAED,MAAM,OAAO,GAAG,OAAO,CAAC,UAAD,EAAa,gBAAb,CAAvB;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,UAAD,EAAa,OAAb,CAArB;EACA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAL,CAAS,OAAT,EAAkB,WAAlB,CAAd;EACA,MAAM,GAAG,GAAG,IAAI,eAAJ,CAAoB,KAApB,CAAZ;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,SAAb,CAAxB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAxB,CAjBwG;;EAoBxG,MAAM,OAAO,GAAG,kCAAkC,CAAC,QAAD,EAAW,KAAX,EAAkB,QAAlB,CAAlD;EACA,MAAM,KAAK,GAAG,kCAAkC,CAAC,QAAD,EAAW,GAAX,EAAgB,QAAhB,CAAhD;;EACA,8BAAe,qBAAqB,CAClC,OAAO,CAAC,OAAD,EAAU,QAAV,CAD2B,EAElC,OAAO,CAAC,OAAD,EAAU,SAAV,CAF2B,EAGlC,OAAO,CAAC,OAAD,EAAU,OAAV,CAH2B,EAIlC,OAAO,CAAC,OAAD,EAAU,QAAV,CAJ2B,EAKlC,OAAO,CAAC,OAAD,EAAU,UAAV,CAL2B,EAMlC,OAAO,CAAC,OAAD,EAAU,UAAV,CAN2B,EAOlC,OAAO,CAAC,OAAD,EAAU,eAAV,CAP2B,EAQlC,OAAO,CAAC,OAAD,EAAU,eAAV,CAR2B,EASlC,OAAO,CAAC,OAAD,EAAU,cAAV,CAT2B,EAUlC,OAAO,CAAC,KAAD,EAAQ,QAAR,CAV2B,EAWlC,OAAO,CAAC,KAAD,EAAQ,SAAR,CAX2B,EAYlC,OAAO,CAAC,KAAD,EAAQ,OAAR,CAZ2B,EAalC,OAAO,CAAC,KAAD,EAAQ,QAAR,CAb2B,EAclC,OAAO,CAAC,KAAD,EAAQ,UAAR,CAd2B,EAelC,OAAO,CAAC,KAAD,EAAQ,UAAR,CAf2B,EAgBlC,OAAO,CAAC,KAAD,EAAQ,eAAR,CAhB2B,EAiBlC,OAAO,CAAC,KAAD,EAAQ,eAAR,CAjB2B,EAkBlC,OAAO,CAAC,KAAD,EAAQ,cAAR,CAlB2B,EAmBlC,QAnBkC,EAoBlC,KApBkC,EAqBlCE,cAAY,CAAC,IAAD,CArBsB,CAApC;EAAA,MAAM,IAAN,yBAAM,IAAN;;EAuBA,MAAI,cAAc,GAAG,gBAAgB,CAAC,KAAD,EAAQ,QAAR,EAAkB,QAAlB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,IAArC,EAA2C,CAA3C,EAA8C,CAA9C,EAAiD,CAAjD,EAAoD,CAApD,EAAuD,CAAvD,EAA0D,CAA1D,CAArC,CA7CwG;EAgDxG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,MAAI,IAAI,KAAK,CAAb,EAAgB;EACd,WAAO,IAAI,GAAG,CAAP,IAAY,IAAI,CAAC,WAAL,CAAiB,cAAjB,EAAiC,KAAjC,CAAnB,EAA4D;EAC1D,QAAE,IAAF;EACA,MAAA,cAAc,GAAG,gBAAgB,CAAC,KAAD,EAAQ,QAAR,EAAkB,QAAlB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,IAArC,EAA2C,CAA3C,EAA8C,CAA9C,EAAiD,CAAjD,EAAoD,CAApD,EAAuD,CAAvD,EAA0D,CAA1D,CAAjC,CAF0D;EAI3D;EACF;;EACD,EAAA,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,cAArB,CAAd;EAEA,MAAI,UAAU,GAAG,KAAjB;EACA,MAAI,eAAe,GAAG,IAAI,eAAJ,CAAoB,cAApB,CAAtB;;EACA,KAAG;EACD;EACA,QAAM,eAAe,GAAG,gBAAgB,CAAC,eAAD,EAAkB,QAAlB,EAA4B,QAA5B,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,IAA/C,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,CAAjE,EAAoE,CAApE,CAAxC;EACA,QAAM,UAAU,GAAG,OAAO,CAAC,eAAD,EAAkB,gBAAlB,CAA1B;EACA,IAAA,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,eAAd,EAA+B,UAA/B,CAAd,CAAd;EACA,IAAA,UAAU,GAAG,IAAI,CAAC,WAAL,CACX,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,WAAd,EAA2B,IAAI,CAAC,MAAL,CAAY,WAAZ,CAA3B,CAAd,EAAoE,IAAI,CAAC,MAAL,CAAY,IAAZ,CAApE,CADW,EAEX,IAFW,CAAb;;EAIA,QAAI,UAAJ,EAAgB;EACd,MAAA,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,EAA2B,IAAI,CAAC,MAAL,CAAY,WAAZ,CAA3B,CAAd;EACA,MAAA,eAAe,GAAG,IAAI,eAAJ,CAAoB,eAApB,CAAlB;EACA,MAAA,IAAI,IAAI,IAAR;EACD;EACF,GAdD,QAcS,UAdT;;EAeA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,WAAW,EAAX,WAAR;EAAqB,IAAA,WAAW,EAAEH,SAAO,CAAC,WAAD;EAAzC,GAAP;EACD;;EAEK,SAAU,eAAV,CACJ,SADI,EAEJ,UAFI,EAGJ,YAHI,EAIJ,YAJI,EAKJ,iBALI,EAMJ,iBANI,EAOJ,gBAPI,EAQJ,WARI,EAS+D;EAAA,MAAnE,UAAmE,uEAAT,SAAS;EAEnE,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,iBAAJ,EACE,kBADF,EAEE,kBAFF,EAGE,aAHF,EAIE,aAJF,EAKE,WALF;;EAMA,MAAI,uBAAuB,CAAC,UAAD,CAA3B,EAAyC;EACvC,QAAM,KAAK,GAAG,gBAAgB,CAC5B,OAAO,CAAC,UAAD,EAAa,OAAb,CADqB,EAE5B,OAAO,CAAC,UAAD,EAAa,SAAb,CAFqB,EAG5B,OAAO,CAAC,UAAD,EAAa,QAAb,CAHqB,EAI5B,CAJ4B,EAK5B,CAL4B,EAM5B,CAN4B,EAO5B,IAP4B,EAQ5B,UAR4B,EAS5B,YAT4B,EAU5B,YAV4B,EAW5B,iBAX4B,EAY5B,iBAZ4B,EAa5B,gBAb4B,CAA9B;EAeA,QAAM,OAAO,GAAG,OAAO,CAAC,UAAD,EAAa,gBAAb,CAAvB;EACA,IAAA,iBAAiB,GAAG,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,OAArB,CAApB;EACD,GAlBD,MAkBO;EACL,IAAA,iBAAiB,GAAG,wBAAwB,CAC1C,IAD0C,EAE1C,UAF0C,EAG1C,YAH0C,EAI1C,YAJ0C,EAK1C,iBAL0C,EAM1C,iBAN0C,EAO1C,gBAP0C,EAQ1C,CAR0C,CAA5C;EAUD;;EACD,MAAI,WAAW,KAAK,MAAhB,IAA0B,WAAW,KAAK,OAA1C,IAAqD,WAAW,KAAK,MAArE,IAA+E,WAAW,KAAK,KAAnG,EAA0G;EAAA,6BAC5D,iBAAiB,CAAC,iBAAD,EAAoB,UAApB,CAD2C;;EACrG,IAAA,IADqG,sBACrG,IADqG;EAClF,IAAA,iBADkF,sBAC/F,WAD+F;EAEzG,GAFD,MAEO;EACL,IAAA,IAAI,GAAG,CAAP;EACD;;EAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAL,CAAc,iBAAd,EAAiC,IAAjC,IAAyC,CAAC,CAA1C,GAA8C,CAA3D;EACA,EAAA,iBAAiB,GAAG,GAAG,CAAC,iBAAD,CAAvB;EACA,EAAA,kBAAkB,GAAG,kBAAkB,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,IAAxF;;EAEA,UAAQ,WAAR;EACE,SAAK,MAAL;EACA,SAAK,OAAL;EACA,SAAK,MAAL;EACA,SAAK,KAAL;EACA,SAAK,MAAL;EAAA,qBACoE,MAAM,CAAC,iBAAD,EAAoB,QAApB,CAD1E;;EACe,MAAA,kBADf,YACK,QADL;EAC8C,MAAA,iBAD9C,YACmC,SADnC;;EAAA,qBAEqE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAF3E;;EAEe,MAAA,kBAFf,YAEK,QAFL;EAE8C,MAAA,kBAF9C,YAEmC,SAFnC;;EAAA,qBAGgE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAHtE;;EAGe,MAAA,aAHf,YAGK,QAHL;EAGyC,MAAA,kBAHzC,YAG8B,SAH9B;;EAAA,qBAI2D,MAAM,CAAC,aAAD,EAAgB,KAAhB,CAJjE;;EAIe,MAAA,aAJf,YAIK,QAJL;EAIyC,MAAA,aAJzC,YAI8B,SAJ9B;;EAAA,sBAKyD,MAAM,CAAC,aAAD,EAAgB,KAAhB,CAL/D;;EAKe,MAAA,WALf,aAKK,QALL;EAKuC,MAAA,aALvC,aAK4B,SAL5B;EAME;;EACF,SAAK,QAAL;EAAA,sBACoE,MAAM,CAAC,iBAAD,EAAoB,QAApB,CAD1E;;EACe,MAAA,kBADf,aACK,QADL;EAC8C,MAAA,iBAD9C,aACmC,SADnC;;EAAA,sBAEqE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAF3E;;EAEe,MAAA,kBAFf,aAEK,QAFL;EAE8C,MAAA,kBAF9C,aAEmC,SAFnC;;EAAA,sBAGgE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAHtE;;EAGe,MAAA,aAHf,aAGK,QAHL;EAGyC,MAAA,kBAHzC,aAG8B,SAH9B;;EAAA,sBAI2D,MAAM,CAAC,aAAD,EAAgB,KAAhB,CAJjE;;EAIe,MAAA,aAJf,aAIK,QAJL;EAIyC,MAAA,aAJzC,aAI8B,SAJ9B;EAKE;;EACF,SAAK,QAAL;EAAA,sBACoE,MAAM,CAAC,iBAAD,EAAoB,QAApB,CAD1E;;EACe,MAAA,kBADf,aACK,QADL;EAC8C,MAAA,iBAD9C,aACmC,SADnC;;EAAA,sBAEqE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAF3E;;EAEe,MAAA,kBAFf,aAEK,QAFL;EAE8C,MAAA,kBAF9C,aAEmC,SAFnC;;EAAA,sBAGgE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAHtE;;EAGe,MAAA,aAHf,aAGK,QAHL;EAGyC,MAAA,kBAHzC,aAG8B,SAH9B;EAIE;;EACF,SAAK,aAAL;EAAA,sBACoE,MAAM,CAAC,iBAAD,EAAoB,QAApB,CAD1E;;EACe,MAAA,kBADf,aACK,QADL;EAC8C,MAAA,iBAD9C,aACmC,SADnC;;EAAA,sBAEqE,MAAM,CAAC,kBAAD,EAAqB,QAArB,CAF3E;;EAEe,MAAA,kBAFf,aAEK,QAFL;EAE8C,MAAA,kBAF9C,aAEmC,SAFnC;EAGE;;EACF,SAAK,aAAL;EAAA,sBACoE,MAAM,CAAC,iBAAD,EAAoB,QAApB,CAD1E;;EACe,MAAA,kBADf,aACK,QADL;EAC8C,MAAA,iBAD9C,aACmC,SADnC;EAEE;;EACF,SAAK,YAAL;EACE;;EACF;EACE,YAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;EAjCJ;;EAoCA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,IAA6B,IAA3C;EACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,aAAd,IAA+B,IAA/C;EACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,aAAd,IAA+B,IAA/C;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAL,CAAc,kBAAd,IAAoC,IAAzD;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAL,CAAc,kBAAd,IAAoC,IAAzD;EACA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,iBAAd,IAAmC,IAAvD;EAEA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,OAAO,EAAP,OAAf;EAAwB,IAAA,OAAO,EAAP,OAAxB;EAAiC,IAAA,YAAY,EAAZ,YAAjC;EAA+C,IAAA,YAAY,EAAZ,YAA/C;EAA6D,IAAA,WAAW,EAAX;EAA7D,GAAP;EACD;EAEK,SAAU,yBAAV,CACJ,UADI,EAEJ,WAFI,EAGJ,UAHI,EAIJ,SAJI,EAKJ,WALI,EAMJ,eANI,EAMwD;EAE5D,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,IAAI,GAAG,SAAX;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,MAAM,IAAI,GAAG,YAAY,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAzB;EAEA,MAAI,QAAJ;EACA,MAAI,UAAJ;;EACA,MAAI,eAAJ,EAAqB;EACnB,IAAA,UAAU,GAAG,cAAc,CAAC,eAAD,CAA3B;EACA,IAAA,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAlB;EACD;;EAED,MAAM,OAAO,GAAG,IAAI,gBAAJ,CAAqB,IAArB,CAAhB;EACA,MAAM,QAAQ,GAAG,IAAI,gBAAJ,CAAqB,CAArB,EAAwB,IAAxB,CAAjB;EACA,MAAM,OAAO,GAAG,IAAI,gBAAJ,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,IAA3B,CAAhB;;EAEA,UAAQ,WAAR;EACE,SAAK,MAAL;EACE;EACA;;EACF,SAAK,OAAL;EACE;EACE,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,mDAAf,CAAN,CADjB;;EAGE,YAAM,OAAO,GAAG,QAAQ,CAAC,OAAzB;EACA,YAAM,SAAS,GAAG,QAAQ,CAAC,SAA3B;EACA,YAAI,kBAAkB,GAA2B,UAAjD;;EACA,eAAOA,SAAO,CAAC,KAAD,CAAP,GAAiB,CAAxB,EAA2B;EACzB,cAAM,aAAa,GAAG,eAAe,CAAC,QAAD,EAAW,kBAAX,EAA+B,OAA/B,EAAwC,SAAxC,EAAmD,OAAnD,CAArC;EACA,cAAM,YAAY,GAAGG,cAAY,CAAC,IAAD,CAAjC;EACA,UAAA,YAAY,CAAC,WAAb,GAA2B,OAA3B;EACA,cAAM,WAAW,GAAG,iBAAiB,CAAC,QAAD,EAAW,kBAAX,EAA+B,aAA/B,EAA8C,YAA9C,EAA4D,SAA5D,CAArC;EACA,cAAM,aAAa,GAAG,OAAO,CAAC,WAAD,EAAc,MAAd,CAA7B;EACA,UAAA,kBAAkB,GAAG,aAArB;EACA,UAAA,MAAM,IAAI,aAAV;EACA,UAAA,KAAK,IAAI,IAAT;EACD;EACF;EACD;;EACF,SAAK,MAAL;EACE,UAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN,CADjB;;EAGE,aAAOH,SAAO,CAAC,KAAD,CAAP,GAAiB,CAAxB,EAA2B;EACzB,YAAI,WAAW,SAAf;;EADyB,gCAEY,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAA6C,OAA7C,CAF5B;;EAEtB,QAAA,UAFsB,qBAEtB,UAFsB;EAEJ,QAAA,WAFI,qBAEV,IAFU;EAGzB,QAAA,IAAI,IAAI,WAAR;EACA,QAAA,KAAK,IAAI,IAAT;EACD,OARH;;;EAWE,aAAOA,SAAO,CAAC,MAAD,CAAP,GAAkB,CAAzB,EAA4B;EAC1B,YAAI,YAAY,SAAhB;;EAD0B,iCAEY,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAA6C,QAA7C,CAF5B;;EAEvB,QAAA,UAFuB,sBAEvB,UAFuB;EAEL,QAAA,YAFK,sBAEX,IAFW;EAG1B,QAAA,IAAI,IAAI,YAAR;EACA,QAAA,MAAM,IAAI,IAAV;EACD;;EACD;;EACF;EACE;EACA,aAAOA,SAAO,CAAC,KAAD,CAAP,GAAiB,CAAxB,EAA2B;EACzB,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,2DAAf,CAAN;;EACf,YAAI,YAAW,SAAf;;EAFyB,iCAGY,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAA6C,OAA7C,CAH5B;;EAGtB,QAAA,UAHsB,sBAGtB,UAHsB;EAGJ,QAAA,YAHI,sBAGV,IAHU;EAIzB,QAAA,IAAI,IAAI,YAAR;EACA,QAAA,KAAK,IAAI,IAAT;EACD,OARH;;;EAWE,aAAOA,SAAO,CAAC,MAAD,CAAP,GAAkB,CAAzB,EAA4B;EAC1B,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,2DAAf,CAAN;;EACf,YAAI,aAAY,SAAhB;;EAF0B,iCAGY,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAA6C,QAA7C,CAH5B;;EAGvB,QAAA,UAHuB,sBAGvB,UAHuB;EAGL,QAAA,aAHK,sBAGX,IAHW;EAI1B,QAAA,IAAI,IAAI,aAAR;EACA,QAAA,MAAM,IAAI,IAAV;EACD,OAjBH;;;EAoBE,aAAOA,SAAO,CAAC,KAAD,CAAP,GAAiB,CAAxB,EAA2B;EACzB,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,2DAAf,CAAN;EACf,YAAI,WAAW,SAAf;;EAFyB,iCAGY,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAA6C,OAA7C,CAH5B;;EAGtB,QAAA,UAHsB,sBAGtB,UAHsB;EAGJ,QAAA,WAHI,sBAGV,IAHU;EAIzB,QAAA,IAAI,IAAI,WAAR;EACA,QAAA,KAAK,IAAI,IAAT;EACD;;EACD;EApEJ;;EAuEA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ;EAAxB,GAAP;EACD;EAEK,SAAU,uBAAV,CACJ,UADI,EAEJ,WAFI,EAGJ,UAHI,EAIJ,SAJI,EAKJ,WALI,EAMJ,eANI,EAMwD;EAE5D,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,IAAI,GAAG,SAAX;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,MAAM,IAAI,GAAG,YAAY,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAzB;EACA,MAAI,IAAI,KAAK,CAAb,EAAgB,OAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ;EAAxB,GAAP;EAEhB,MAAI,QAAJ;EACA,MAAI,UAAJ;;EACA,MAAI,eAAJ,EAAqB;EACnB,IAAA,UAAU,GAAG,cAAc,CAAC,eAAD,CAA3B;EACA,IAAA,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAlB;EACD;;EAED,MAAM,OAAO,GAAG,IAAI,gBAAJ,CAAqB,IAArB,CAAhB;EACA,MAAM,QAAQ,GAAG,IAAI,gBAAJ,CAAqB,CAArB,EAAwB,IAAxB,CAAjB;EACA,MAAM,OAAO,GAAG,IAAI,gBAAJ,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,IAA3B,CAAhB;;EAEA,UAAQ,WAAR;EACE,SAAK,MAAL;EAAa;EACX,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN,CADJ;;EAGX,YAAI,aAAJ,EAAmB,WAAnB;;EAHW,iCAIyC,gBAAgB,CAClE,QADkE,EAElE,UAFkE,EAGlE,OAHkE,CAJzD;;EAII,QAAA,aAJJ,sBAIR,UAJQ;EAIyB,QAAA,WAJzB,sBAImB,IAJnB;;EASX,eAAOA,SAAO,CAAC,IAAD,CAAP,IAAiBA,SAAO,CAAC,WAAD,CAA/B,EAA8C;EAC5C,UAAA,IAAI,IAAI,WAAR;EACA,UAAA,KAAK,IAAI,IAAT;EACA,UAAA,UAAU,GAAG,aAAb;;EAH4C,mCAIQ,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,OAAvB,CAJxB;;EAI7B,UAAA,aAJ6B,sBAIzC,UAJyC;EAIR,UAAA,WAJQ,sBAId,IAJc;EAK7C,SAdU;;;EAiBX,YAAI,YAAJ;;EAjBW,iCAkB0C,gBAAgB,CACnE,QADmE,EAEnE,UAFmE,EAGnE,QAHmE,CAlB1D;;EAkBI,QAAA,aAlBJ,sBAkBR,UAlBQ;EAkByB,QAAA,YAlBzB,sBAkBmB,IAlBnB;;EAuBX,eAAOA,SAAO,CAAC,IAAD,CAAP,IAAiBA,SAAO,CAAC,YAAD,CAA/B,EAA+C;EAC7C,UAAA,IAAI,IAAI,YAAR;EACA,UAAA,MAAM,IAAI,IAAV;EACA,UAAA,UAAU,GAAG,aAAb;;EAH6C,mCAIQ,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,QAAvB,CAJxB;;EAI9B,UAAA,aAJ8B,sBAI1C,UAJ0C;EAIT,UAAA,YAJS,sBAIf,IAJe;EAK9C,SA5BU;;;EA+BX,YAAM,OAAO,GAAG,QAAQ,CAAC,OAAzB;EACA,QAAA,aAAa,GAAG,eAAe,CAAC,QAAD,EAAW,UAAX,EAA6C,OAA7C,EAAsD,SAAtD,EAAiE,OAAjE,CAA/B;EACA,YAAM,SAAS,GAAG,QAAQ,CAAC,SAA3B;EACA,YAAM,YAAY,GAAGG,cAAY,CAAC,IAAD,CAAjC;EACA,QAAA,YAAY,CAAC,WAAb,GAA2B,OAA3B;EACA,YAAI,WAAW,GAAG,iBAAiB,CACjC,QADiC,EAEjC,UAFiC,EAGjC,aAHiC,EAIjC,YAJiC,EAKjC,SALiC,CAAnC;EAOA,YAAI,aAAa,GAAG,OAAO,CAAC,WAAD,EAAc,MAAd,CAA3B;;EACA,eAAOH,SAAO,CAAC,MAAD,CAAP,IAAmBA,SAAO,CAAC,aAAD,CAAjC,EAAkD;EAChD,UAAA,MAAM,IAAI,aAAV;EACA,UAAA,KAAK,IAAI,IAAT;EACA,UAAA,UAAU,GAAG,aAAb;EACA,UAAA,aAAa,GAAG,eAAe,CAAC,QAAD,EAAW,UAAX,EAAuB,OAAvB,EAAgC,SAAhC,EAA2C,OAA3C,CAA/B;;EACA,cAAM,aAAY,GAAGG,cAAY,CAAC,IAAD,CAAjC;;EACA,UAAA,aAAY,CAAC,WAAb,GAA2B,OAA3B;EACA,UAAA,WAAW,GAAG,iBAAiB,CAAC,QAAD,EAAW,UAAX,EAAuB,aAAvB,EAAsC,aAAtC,EAAoD,SAApD,CAA/B;EACA,UAAA,aAAa,GAAG,OAAO,CAAC,WAAD,EAAc,MAAd,CAAvB;EACD;;EACD;EACD;;EACD,SAAK,OAAL;EAAc;EACZ,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,mDAAf,CAAN,CADH;;EAGZ,YAAI,cAAJ,EAAmB,cAAnB;;EAHY,kCAIyC,gBAAgB,CACnE,QADmE,EAEnE,UAFmE,EAGnE,QAHmE,CAJzD;;EAIG,QAAA,cAJH,uBAIT,UAJS;EAIwB,QAAA,cAJxB,uBAIkB,IAJlB;;EASZ,eAAOH,SAAO,CAAC,IAAD,CAAP,IAAiBA,SAAO,CAAC,cAAD,CAA/B,EAA+C;EAC7C,UAAA,IAAI,IAAI,cAAR;EACA,UAAA,MAAM,IAAI,IAAV;EACA,UAAA,UAAU,GAAG,cAAb;;EAH6C,oCAIQ,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,QAAvB,CAJxB;;EAI9B,UAAA,cAJ8B,uBAI1C,UAJ0C;EAIT,UAAA,cAJS,uBAIf,IAJe;EAK9C;;EACD;EACD;;EACD,SAAK,MAAL;EAAa;EACX,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN,CADJ;;EAGX,YAAI,eAAJ,EAAmB,WAAnB;;EAHW,kCAIyC,gBAAgB,CAClE,QADkE,EAElE,UAFkE,EAGlE,OAHkE,CAJzD;;EAII,QAAA,eAJJ,uBAIR,UAJQ;EAIyB,QAAA,WAJzB,uBAImB,IAJnB;;EASX,eAAOA,SAAO,CAAC,IAAD,CAAP,IAAiBA,SAAO,CAAC,WAAD,CAA/B,EAA8C;EAC5C,UAAA,IAAI,IAAI,WAAR;EACA,UAAA,KAAK,IAAI,IAAT;EACA,UAAA,UAAU,GAAG,eAAb;;EAH4C,oCAIQ,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,OAAvB,CAJxB;;EAI7B,UAAA,eAJ6B,uBAIzC,UAJyC;EAIR,UAAA,WAJQ,uBAId,IAJc;EAK7C;;EACD;EACD;EA1FH;;EAgGA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ;EAAxB,GAAP;EACD;EAEK,SAAU,oBAAV,CACJ,UADI,EAEJ,CAFI,EAGJ,GAHI,EAIJ,CAJI,EAKJ,CALI,EAKK;EAET,MAAI,uBAAuB,CAAC,UAAD,CAA3B,EAAyC;EACvC,QAAM,OAAO,GAAG,OAAO,CAAC,UAAD,EAAa,OAAb,CAAvB;EACA,QAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,SAAb,CAAxB;EACA,QAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAxB;EACA,QAAM,YAAY,GAAG,uBAAuB,CAAC,QAAD,EAAW,OAAX,CAA5C;EACA,QAAM,KAAK,GAAG,gBAAgB,CAAC,OAAD,EAAU,QAAV,EAAoB,QAApB,EAA8B,CAA9B,EAAiC,GAAjC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAA9B;EACA,QAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,QAAM,YAAY,GAAG,IAAI,eAAJ,CAAoB,KAApB,CAArB;EACA,QAAM,WAAW,GAAG,uBAAuB,CAAC,QAAD,EAAW,YAAX,CAA3C;EACA,WAAO,WAAW,GAAG,YAArB;EACD;;EACD,SAAO,CAAP;EACD;EAEK,SAAU,6BAAV,CAAwC,QAAxC,EAAmE;EACvE,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,SAAO,IAAI,gBAAJ,CACL,CAAC,OAAO,CAAC,QAAD,EAAW,KAAX,CADH,EAEL,CAAC,OAAO,CAAC,QAAD,EAAW,MAAX,CAFH,EAGL,CAAC,OAAO,CAAC,QAAD,EAAW,KAAX,CAHH,EAIL,CAAC,OAAO,CAAC,QAAD,EAAW,IAAX,CAJH,EAKL,CAAC,OAAO,CAAC,QAAD,EAAW,KAAX,CALH,EAML,CAAC,OAAO,CAAC,QAAD,EAAW,OAAX,CANH,EAOL,CAAC,OAAO,CAAC,QAAD,EAAW,OAAX,CAPH,EAQL,CAAC,OAAO,CAAC,QAAD,EAAW,YAAX,CARH,EASL,CAAC,OAAO,CAAC,QAAD,EAAW,YAAX,CATH,EAUL,CAAC,OAAO,CAAC,QAAD,EAAW,WAAX,CAVH,CAAP;EAYD;EAEK,SAAU,gBAAV,CAA2B,KAA3B,EAAsD,GAAtD,EAAmE,GAAnE,EAA8E;EAClF;EACA;EACA,SAAO,OAAO,CAAC,GAAD,EAAM,OAAO,CAAC,GAAD,EAAM,KAAN,CAAb,CAAd;EACD;;EACD,SAAS,gBAAT,CAA0B,IAA1B,EAAwC,UAAxC,EAA4D,QAA5D,EAA6E;EAC3E,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAD,EAAa,CAAb,EAAgB,EAAhB,CAA9B;EACA,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAD,EAAW,CAAX,EAAc,cAAc,CAAC,IAAD,EAAO,KAAP,CAA5B,CAA5B;EACA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH;EAAf,GAAP;EACD;;EAED,SAAS,aAAT,CACE,SADF,EAEE,WAFF,EAGE,WAHF,EAIE,gBAJF,EAKE,gBALF,EAME,eANF,EAMyB;EAEvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAD,EAAY,CAAZ,EAAe,EAAf,CAA7B;EACA,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAD,EAAc,CAAd,EAAiB,EAAjB,CAA/B;EACA,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAD,EAAc,CAAd,EAAiB,EAAjB,CAA/B;EACA,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAD,EAAmB,CAAnB,EAAsB,GAAtB,CAApC;EACA,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAD,EAAmB,CAAnB,EAAsB,GAAtB,CAApC;EACA,MAAM,UAAU,GAAG,gBAAgB,CAAC,eAAD,EAAkB,CAAlB,EAAqB,GAArB,CAAnC;EACA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,MAAM,EAAN,MAAR;EAAgB,IAAA,MAAM,EAAN,MAAhB;EAAwB,IAAA,WAAW,EAAX,WAAxB;EAAqC,IAAA,WAAW,EAAX,WAArC;EAAkD,IAAA,UAAU,EAAV;EAAlD,GAAP;EACD;;EAEK,SAAU,aAAV,CAAwB,KAAxB,EAAuC,GAAvC,EAAoD,GAApD,EAA+D;EACnE,MAAI,KAAK,GAAG,GAAR,IAAe,KAAK,GAAG,GAA3B,EAAgC,MAAM,IAAI,UAAJ,+BAAsC,GAAtC,iBAAgD,KAAhD,iBAA4D,GAA5D,EAAN;EACjC;;EAED,SAAS,aAAT,CAAuB,IAAvB,EAAqC,KAArC,EAAoD,GAApD,EAA+D;EAC7D,EAAA,aAAa,CAAC,KAAD,EAAQ,CAAR,EAAW,EAAX,CAAb;EACA,EAAA,aAAa,CAAC,GAAD,EAAM,CAAN,EAAS,cAAc,CAAC,IAAD,EAAO,KAAP,CAAvB,CAAb;EACD;;EAED,SAAS,eAAT,CAAyB,IAAzB,EAAuC,KAAvC,EAAsD,GAAtD,EAAiE;EAC/D;EACA,EAAA,mBAAmB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,EAAnB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,CAAnB;EACD;;EAEK,SAAU,UAAV,CACJ,IADI,EAEJ,MAFI,EAGJ,MAHI,EAIJ,WAJI,EAKJ,WALI,EAMJ,UANI,EAMc;EAElB,EAAA,aAAa,CAAC,IAAD,EAAO,CAAP,EAAU,EAAV,CAAb;EACA,EAAA,aAAa,CAAC,MAAD,EAAS,CAAT,EAAY,EAAZ,CAAb;EACA,EAAA,aAAa,CAAC,MAAD,EAAS,CAAT,EAAY,EAAZ,CAAb;EACA,EAAA,aAAa,CAAC,WAAD,EAAc,CAAd,EAAiB,GAAjB,CAAb;EACA,EAAA,aAAa,CAAC,WAAD,EAAc,CAAd,EAAiB,GAAjB,CAAb;EACA,EAAA,aAAa,CAAC,UAAD,EAAa,CAAb,EAAgB,GAAhB,CAAb;EACD;;EAED,SAAS,cAAT,CACE,IADF,EAEE,KAFF,EAGE,GAHF,EAIE,IAJF,EAKE,MALF,EAME,MANF,EAOE,WAPF,EAQE,WARF,EASE,UATF,EASoB;EAElB,EAAA,aAAa,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAAb;EACA,EAAA,UAAU,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,WAAvB,EAAoC,WAApC,EAAiD,UAAjD,CAAV;EACD;;EAED,SAAS,mBAAT,CACE,IADF,EAEE,KAFF,EAGE,GAHF,EAIE,IAJF,EAKE,MALF,EAME,MANF,EAOE,WAPF,EAQE,WARF,EASE,UATF,EASoB;EAElB,EAAA,aAAa,CAAC,IAAD,EAAO,QAAP,EAAiB,QAAjB,CAAb,CAFkB;;EAIlB,MACG,IAAI,KAAK,QAAT,IACC,QACE,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAG,GAAG,CAApB,EAAuB,IAAvB,EAA6B,MAA7B,EAAqC,MAArC,EAA6C,WAA7C,EAA0D,WAA1D,EAAuE,UAAU,GAAG,CAApF,CAFxB,IAGC,IAAI,KAAK,QAAT,IACC,QACE,oBAAoB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAG,GAAG,CAApB,EAAuB,IAAvB,EAA6B,MAA7B,EAAqC,MAArC,EAA6C,WAA7C,EAA0D,WAA1D,EAAuE,UAAU,GAAG,CAApF,CAN1B,EAOE;EACA,UAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EACD;EACF;;EAEK,SAAU,wBAAV,CAAmC,gBAAnC,EAAyD;EAC7D,MAAI,IAAI,CAAC,QAAL,CAAc,gBAAd,EAAgC,MAAhC,KAA2C,IAAI,CAAC,WAAL,CAAiB,gBAAjB,EAAmC,MAAnC,CAA/C,EAA2F;EACzF,UAAM,IAAI,UAAJ,CAAe,oCAAf,CAAN;EACD;EACF;;EAED,SAAS,oBAAT,CAA8B,IAA9B,EAA4C,KAA5C,EAAyD;EACvD,EAAA,aAAa,CAAC,IAAD,EAAO,QAAP,EAAiB,QAAjB,CAAb;;EACA,MAAI,IAAI,KAAK,QAAb,EAAuB;EACrB,IAAA,aAAa,CAAC,KAAD,EAAQ,CAAR,EAAW,EAAX,CAAb;EACD,GAFD,MAEO,IAAI,IAAI,KAAK,QAAb,EAAuB;EAC5B,IAAA,aAAa,CAAC,KAAD,EAAQ,CAAR,EAAW,CAAX,CAAb;EACD;EACF;;EAEK,SAAU,cAAV,CACJ,CADI,EAEJ,GAFI,EAGJ,CAHI,EAIJ,CAJI,EAKJ,CALI,EAMJ,GANI,EAOJ,CAPI,EAQJ,EARI,EASJ,EATI,EAUJ,EAVI,EAUM;EAEV,MAAM,IAAI,GAAG,YAAY,CAAC,CAAD,EAAI,GAAJ,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,GAAlB,EAAuB,CAAvB,EAA0B,EAA1B,EAA8B,EAA9B,EAAkC,EAAlC,CAAzB;;EACA,4BAAmB,CAAC,CAAD,EAAI,GAAJ,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,GAAlB,EAAuB,CAAvB,EAA0B,EAA1B,EAA8B,EAA9B,EAAkC,EAAlC,CAAnB,6BAA0D;EAArD,QAAM,IAAI,aAAV;EACH,QAAI,CAAC,cAAc,CAAC,IAAD,CAAnB,EAA2B,MAAM,IAAI,UAAJ,CAAe,gDAAf,CAAN;EAC3B,QAAM,QAAQ,GAAG,QAAQ,CAAC,IAAD,CAAzB;EACA,QAAI,QAAQ,KAAK,CAAb,IAAkB,QAAQ,KAAK,IAAnC,EAAyC,MAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN;EAC1C;EACF;EAEK,SAAU,iBAAV,CACJ,EADI,EAEJ,EAFI,EAGJ,EAHI,EAIJ,EAJI,EAKJ,EALI,EAMJ,EANI,EAOJ,WAPI,EAOgB;EAEpB,UAAQ,WAAR;EACE,SAAK,MAAL;EACA,SAAK,OAAL;EAAc;EACZ,YAAM,IAAI,GAAG,CAAC,cAAc,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,CAA5B;EACA,YAAI,IAAI,KAAK,CAAb,EAAgB,OAAO;EAAE,UAAA,KAAK,EAAE,CAAT;EAAY,UAAA,MAAM,EAAE,CAApB;EAAuB,UAAA,KAAK,EAAE,CAA9B;EAAiC,UAAA,IAAI,EAAE;EAAvC,SAAP;EAEhB,YAAM,KAAK,GAAG;EAAE,UAAA,IAAI,EAAE,EAAR;EAAY,UAAA,KAAK,EAAE,EAAnB;EAAuB,UAAA,GAAG,EAAE;EAA5B,SAAd;EACA,YAAM,GAAG,GAAG;EAAE,UAAA,IAAI,EAAE,EAAR;EAAY,UAAA,KAAK,EAAE,EAAnB;EAAuB,UAAA,GAAG,EAAE;EAA5B,SAAZ;EAEA,YAAI,KAAK,GAAG,GAAG,CAAC,IAAJ,GAAW,KAAK,CAAC,IAA7B;EACA,YAAI,GAAG,GAAG,UAAU,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,KAAb,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,WAA7B,CAApB;EACA,YAAI,OAAO,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,IAAL,EAAW,GAAG,CAAC,KAAf,EAAsB,GAAG,CAAC,GAA1B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,CAA7B;;EACA,YAAI,OAAO,KAAK,CAAhB,EAAmB;EACjB,iBAAO,WAAW,KAAK,MAAhB,GACH;EAAE,YAAA,KAAK,EAAL,KAAF;EAAS,YAAA,MAAM,EAAE,CAAjB;EAAoB,YAAA,KAAK,EAAE,CAA3B;EAA8B,YAAA,IAAI,EAAE;EAApC,WADG,GAEH;EAAE,YAAA,KAAK,EAAE,CAAT;EAAY,YAAA,MAAM,EAAE,KAAK,GAAG,EAA5B;EAAgC,YAAA,KAAK,EAAE,CAAvC;EAA0C,YAAA,IAAI,EAAE;EAAhD,WAFJ;EAGD;;EACD,YAAI,MAAM,GAAG,GAAG,CAAC,KAAJ,GAAY,KAAK,CAAC,KAA/B;;EACA,YAAI,OAAO,KAAK,IAAhB,EAAsB;EACpB,UAAA,KAAK,IAAI,IAAT;EACA,UAAA,MAAM,IAAI,IAAI,GAAG,EAAjB;EACD;;EACD,QAAA,GAAG,GAAG,UAAU,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,KAAb,EAAoB,MAApB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,WAAlC,CAAhB;EACA,QAAA,OAAO,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,IAAL,EAAW,GAAG,CAAC,KAAf,EAAsB,GAAG,CAAC,GAA1B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,CAAzB;;EACA,YAAI,OAAO,KAAK,CAAhB,EAAmB;EACjB,iBAAO,WAAW,KAAK,MAAhB,GACH;EAAE,YAAA,KAAK,EAAL,KAAF;EAAS,YAAA,MAAM,EAAN,MAAT;EAAiB,YAAA,KAAK,EAAE,CAAxB;EAA2B,YAAA,IAAI,EAAE;EAAjC,WADG,GAEH;EAAE,YAAA,KAAK,EAAE,CAAT;EAAY,YAAA,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,EAArC;EAAyC,YAAA,KAAK,EAAE,CAAhD;EAAmD,YAAA,IAAI,EAAE;EAAzD,WAFJ;EAGD;;EACD,YAAI,OAAO,KAAK,IAAhB,EAAsB;EACpB;EACA;EACA,UAAA,MAAM,IAAI,IAAV;;EACA,cAAI,MAAM,KAAK,CAAC,IAAhB,EAAsB;EACpB,YAAA,KAAK,IAAI,IAAT;EACA,YAAA,MAAM,GAAG,KAAK,IAAd;EACD;;EACD,UAAA,GAAG,GAAG,UAAU,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,KAAb,EAAoB,MAApB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,WAAlC,CAAhB;EACD;;EAED,YAAI,IAAI,GAAG,CAAX,CAtCY;EAwCZ;EACA;EACA;EACA;EACA;;EACA,YAAI,GAAG,CAAC,KAAJ,KAAc,GAAG,CAAC,KAAtB,EAA6B;EAC3B;EACA,UAAA,IAAI,GAAG,GAAG,CAAC,GAAJ,GAAU,GAAG,CAAC,GAArB;EACD,SAHD,MAGO,IAAI,IAAI,GAAG,CAAX,EAAc;EACnB;EACA;EACA,UAAA,IAAI,GAAG,CAAC,GAAG,CAAC,GAAL,IAAY,cAAc,CAAC,GAAG,CAAC,IAAL,EAAW,GAAG,CAAC,KAAf,CAAd,GAAsC,GAAG,CAAC,GAAtD,CAAP;EACD,SAJM,MAIA;EACL;EACA;EACA,UAAA,IAAI,GAAG,GAAG,CAAC,GAAJ,IAAW,cAAc,CAAC,GAAG,CAAC,IAAL,EAAW,GAAG,CAAC,KAAf,CAAd,GAAsC,GAAG,CAAC,GAArD,CAAP;EACD;;EAED,YAAI,WAAW,KAAK,OAApB,EAA6B;EAC3B,UAAA,MAAM,IAAI,KAAK,GAAG,EAAlB;EACA,UAAA,KAAK,GAAG,CAAR;EACD;;EACD,eAAO;EAAE,UAAA,KAAK,EAAL,KAAF;EAAS,UAAA,MAAM,EAAN,MAAT;EAAiB,UAAA,KAAK,EAAE,CAAxB;EAA2B,UAAA,IAAI,EAAJ;EAA3B,SAAP;EACD;;EACD,SAAK,MAAL;EACA,SAAK,KAAL;EAAY;EACV,YAAI,MAAJ,EAAY,OAAZ,EAAqB,KAArB;;EACA,YAAI,cAAc,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,CAAd,GAAyC,CAA7C,EAAgD;EAC9C,UAAA,OAAO,GAAG;EAAE,YAAA,IAAI,EAAE,EAAR;EAAY,YAAA,KAAK,EAAE,EAAnB;EAAuB,YAAA,GAAG,EAAE;EAA5B,WAAV;EACA,UAAA,MAAM,GAAG;EAAE,YAAA,IAAI,EAAE,EAAR;EAAY,YAAA,KAAK,EAAE,EAAnB;EAAuB,YAAA,GAAG,EAAE;EAA5B,WAAT;EACA,UAAA,KAAI,GAAG,CAAP;EACD,SAJD,MAIO;EACL,UAAA,OAAO,GAAG;EAAE,YAAA,IAAI,EAAE,EAAR;EAAY,YAAA,KAAK,EAAE,EAAnB;EAAuB,YAAA,GAAG,EAAE;EAA5B,WAAV;EACA,UAAA,MAAM,GAAG;EAAE,YAAA,IAAI,EAAE,EAAR;EAAY,YAAA,KAAK,EAAE,EAAnB;EAAuB,YAAA,GAAG,EAAE;EAA5B,WAAT;EACA,UAAA,KAAI,GAAG,CAAC,CAAR;EACD;;EACD,YAAI,MAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAR,EAAc,MAAM,CAAC,KAArB,EAA4B,MAAM,CAAC,GAAnC,CAAT,GAAmD,SAAS,CAAC,OAAO,CAAC,IAAT,EAAe,OAAO,CAAC,KAAvB,EAA8B,OAAO,CAAC,GAAtC,CAAvE;;EACA,aAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAxB,EAA8B,IAAI,GAAG,MAAM,CAAC,IAA5C,EAAkD,EAAE,IAApD,EAA0D;EACxD,UAAA,MAAI,IAAI,QAAQ,CAAC,IAAD,CAAR,GAAiB,GAAjB,GAAuB,GAA/B;EACD;;EACD,YAAI,KAAK,GAAG,CAAZ;;EACA,YAAI,WAAW,KAAK,MAApB,EAA4B;EAC1B,UAAA,KAAK,GAAGC,WAAS,CAAC,MAAI,GAAG,CAAR,CAAjB;EACA,UAAA,MAAI,IAAI,CAAR;EACD;;EACD,QAAA,KAAK,IAAI,KAAT;EACA,QAAA,MAAI,IAAI,KAAR;EACA,eAAO;EAAE,UAAA,KAAK,EAAE,CAAT;EAAY,UAAA,MAAM,EAAE,CAApB;EAAuB,UAAA,KAAK,EAAL,KAAvB;EAA8B,UAAA,IAAI,EAAJ;EAA9B,SAAP;EACD;;EACD;EACE,YAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;EA5FJ;EA8FD;;EAED,SAAS,cAAT,CACE,EADF,EAEE,IAFF,EAGE,EAHF,EAIE,GAJF,EAKE,GALF,EAME,GANF,EAOE,EAPF,EAQE,IARF,EASE,EATF,EAUE,GAVF,EAWE,GAXF,EAYE,GAZF,EAYa;EAEX,MAAI,KAAK,GAAG,EAAE,GAAG,EAAjB;EACA,MAAI,OAAO,GAAG,IAAI,GAAG,IAArB;EACA,MAAI,OAAO,GAAG,EAAE,GAAG,EAAnB;EACA,MAAI,YAAY,GAAG,GAAG,GAAG,GAAzB;EACA,MAAI,YAAY,GAAG,GAAG,GAAG,GAAzB;EACA,MAAI,WAAW,GAAG,GAAG,GAAG,GAAxB;EAEA,MAAM,IAAI,GAAG,YAAY,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,KAAb,EAAoB,OAApB,EAA6B,OAA7B,EAAsC,YAAtC,EAAoD,YAApD,EAAkE,WAAlE,CAAzB;EACA,EAAA,KAAK,IAAI,IAAT;EACA,EAAA,OAAO,IAAI,IAAX;EACA,EAAA,OAAO,IAAI,IAAX;EACA,EAAA,YAAY,IAAI,IAAhB;EACA,EAAA,YAAY,IAAI,IAAhB;EACA,EAAA,WAAW,IAAI,IAAf;EAEA,MAAI,SAAS,GAAG,CAAhB;;EAjBW,sBA0BP,WAAW,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,EAA0B,YAA1B,EAAwC,YAAxC,EAAsD,WAAtD,CA1BJ;;EAmBT,EAAA,SAnBS,iBAmBT,SAnBS;EAoBH,EAAA,KApBG,iBAoBT,IApBS;EAqBD,EAAA,OArBC,iBAqBT,MArBS;EAsBD,EAAA,OAtBC,iBAsBT,MAtBS;EAuBI,EAAA,YAvBJ,iBAuBT,WAvBS;EAwBI,EAAA,YAxBJ,iBAwBT,WAxBS;EAyBG,EAAA,WAzBH,iBAyBT,UAzBS;EA4BX,MAAI,SAAS,IAAI,CAAjB,EAAoB,MAAM,IAAI,KAAJ,CAAU,gEAAV,CAAN;EACpB,EAAA,KAAK,IAAI,IAAT;EACA,EAAA,OAAO,IAAI,IAAX;EACA,EAAA,OAAO,IAAI,IAAX;EACA,EAAA,YAAY,IAAI,IAAhB;EACA,EAAA,YAAY,IAAI,IAAhB;EACA,EAAA,WAAW,IAAI,IAAf;EAEA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,OAAO,EAAP,OAAT;EAAkB,IAAA,OAAO,EAAP,OAAlB;EAA2B,IAAA,YAAY,EAAZ,YAA3B;EAAyC,IAAA,YAAY,EAAZ,YAAzC;EAAuD,IAAA,WAAW,EAAX;EAAvD,GAAP;EACD;;EAED,SAAS,iBAAT,CACE,GADF,EAEE,GAFF,EAGE,SAHF,EAIE,IAJF,EAKE,YALF,EAKqC;EAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAL,CAAc,GAAd,EAAmB,GAAnB,CAAb;EAEA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAL,CAAe,IAAf,EAAqB,IAAI,CAAC,MAAL,CAAY,OAAZ,CAArB,CAAlB;EACA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAL,CAAc,IAAd,EAAoB,SAApB,CAAlB;EACA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,SAAD,EAAY,aAAa,CAAC,IAAD,CAAb,GAAsB,SAAlC,EAA6C,YAA7C,CAA/C;EACA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAL,CAAS,SAAT,EAAoB,gBAApB,CAApB;EAEA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,SAAL,CAAe,WAAf,EAA4B,QAA5B,CAAd,CAApB;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,SAAL,CAAe,IAAI,CAAC,MAAL,CAAY,WAAZ,EAAyB,QAAzB,CAAf,EAAmD,QAAnD,CAAd,CAArB;EACA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,SAAL,CAAe,IAAI,CAAC,MAAL,CAAY,WAAZ,EAAyB,OAAzB,CAAf,EAAkD,QAAlD,CAAd,CAArB;EACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,WAAZ,EAAyB,OAAzB,CAAd,CAAhB;EACA,SAAO;EAAE,IAAA,OAAO,EAAP,OAAF;EAAW,IAAA,YAAY,EAAZ,YAAX;EAAyB,IAAA,YAAY,EAAZ,YAAzB;EAAuC,IAAA,WAAW,EAAX;EAAvC,GAAP;EACD;;EAED,SAAS,qBAAT,CACE,OADF,EAEE,SAFF,EAGE,OAHF,EAIE,EAJF,EAKE,IALF,EAME,EANF,EAOE,GAPF,EAQE,GARF,EASE,GATF,EAUE,EAVF,EAWE,IAXF,EAYE,EAZF,EAaE,EAbF,EAcE,IAdF,EAeE,EAfF,EAgBE,GAhBF,EAiBE,GAjBF,EAkBE,GAlBF,EAmBE,QAnBF,EAoBE,WApBF,EAqBE,OArBF,EAqB4D;EAE1D,MAAI,EAAE,GAAG,OAAT;EACA,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,EAAE,GAAG,OAAT;;EAEA,wBAA2E,cAAc,CACvF,EADuF,EAEvF,IAFuF,EAGvF,EAHuF,EAIvF,GAJuF,EAKvF,GALuF,EAMvF,GANuF,EAOvF,EAPuF,EAQvF,IARuF,EASvF,EATuF,EAUvF,GAVuF,EAWvF,GAXuF,EAYvF,GAZuF,CAAzF;EAAA,MAAM,KAAN,mBAAM,KAAN;EAAA,MAAa,OAAb,mBAAa,OAAb;EAAA,MAAsB,OAAtB,mBAAsB,OAAtB;EAAA,MAA+B,YAA/B,mBAA+B,YAA/B;EAAA,MAA6C,YAA7C,mBAA6C,YAA7C;EAAA,MAA2D,WAA3D,mBAA2D,WAA3D;;EAeA,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,KAAb,EAAoB,OAApB,EAA6B,OAA7B,EAAsC,YAAtC,EAAoD,YAApD,EAAkE,WAAlE,CAA7B;EACA,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAD,EAAK,IAAL,EAAW,EAAX,EAAe,EAAf,EAAmB,IAAnB,EAAyB,EAAzB,CAA/B;;EACA,MAAI,QAAQ,KAAK,CAAC,QAAlB,EAA4B;EAAA,2BACY,cAAc,CAAC,EAAD,EAAK,IAAL,EAAW,EAAE,GAAG,QAAhB,CAD1B;;EACjB,IAAA,EADiB,oBACvB,IADuB;EACN,IAAA,IADM,oBACb,KADa;EACK,IAAA,EADL,oBACA,GADA;;EAAA,2BAE8C,eAAe,CACrF,CAAC,QADoF,EAErF,KAFqF,EAGrF,OAHqF,EAIrF,OAJqF,EAKrF,YALqF,EAMrF,YANqF,EAOrF,WAPqF,EAQrF,WARqF,CAF7D;;EAEvB,IAAA,KAFuB,oBAEvB,KAFuB;EAEhB,IAAA,OAFgB,oBAEhB,OAFgB;EAEP,IAAA,OAFO,oBAEP,OAFO;EAEE,IAAA,YAFF,oBAEE,YAFF;EAEgB,IAAA,YAFhB,oBAEgB,YAFhB;EAE8B,IAAA,WAF9B,oBAE8B,WAF9B;EAY3B;;EAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAW,EAAX,EAAe,QAAf,CAAhC;EACA,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAW,EAAX,EAAe,QAAf,CAAhC;EACA,MAAM,eAAe,GAAG,wBAAwB,CAAC,KAAD,EAAQ,WAAR,CAAhD;EACA,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,eAAV,CAA3C,CAxC0D;EA0C1D;EACA;EACA;EACA;;EACA,2BAAqC,iBAAiB,CAAC,QAAD,EAAW,KAAX,EAAkB,KAAlB,EAAyB,YAAzB,CAAtD;EAAA,MAAM,KAAN,sBAAM,KAAN;EAAA,MAAa,MAAb,sBAAa,MAAb;EAAA,MAAqB,KAArB,sBAAqB,KAArB;EAAA,MAA4B,IAA5B,sBAA4B,IAA5B,CA9C0D;;;EAAA,0BAgDoB,eAAe,CAC3F,IAD2F,EAE3F,KAF2F,EAG3F,OAH2F,EAI3F,OAJ2F,EAK3F,YAL2F,EAM3F,YAN2F,EAO3F,WAP2F,EAQ3F,WAR2F,CAhDnC;;EAgDvD,EAAA,IAhDuD,qBAgDvD,IAhDuD;EAgDjD,EAAA,KAhDiD,qBAgDjD,KAhDiD;EAgD1C,EAAA,OAhD0C,qBAgD1C,OAhD0C;EAgDjC,EAAA,OAhDiC,qBAgDjC,OAhDiC;EAgDxB,EAAA,YAhDwB,qBAgDxB,YAhDwB;EAgDV,EAAA,YAhDU,qBAgDV,YAhDU;EAgDI,EAAA,WAhDJ,qBAgDI,WAhDJ;EA0D1D,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ,IAAxB;EAA8B,IAAA,KAAK,EAAL,KAA9B;EAAqC,IAAA,OAAO,EAAP,OAArC;EAA8C,IAAA,OAAO,EAAP,OAA9C;EAAuD,IAAA,YAAY,EAAZ,YAAvD;EAAqE,IAAA,YAAY,EAAZ,YAArE;EAAmF,IAAA,WAAW,EAAX;EAAnF,GAAP;EACD;;EAED,SAAS,uBAAT,CACE,GADF,EAEE,GAFF,EAGE,QAHF,EAIE,QAJF,EAKE,WALF,EAME,OANF,EAM4D;EAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,GAAd,EAAmB,GAAnB,CAAf;;EACA,MAAI,IAAI,CAAC,KAAL,CAAW,MAAX,EAAmB,IAAnB,CAAJ,EAA8B;EAC5B,WAAO;EACL,MAAA,KAAK,EAAE,CADF;EAEL,MAAA,MAAM,EAAE,CAFH;EAGL,MAAA,KAAK,EAAE,CAHF;EAIL,MAAA,IAAI,EAAE,CAJD;EAKL,MAAA,KAAK,EAAE,CALF;EAML,MAAA,OAAO,EAAE,CANJ;EAOL,MAAA,OAAO,EAAE,CAPJ;EAQL,MAAA,YAAY,EAAE,CART;EASL,MAAA,YAAY,EAAE,CATT;EAUL,MAAA,WAAW,EAAE;EAVR,KAAP;EAYD,GAhByD;;;EAmB1D,MAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,MAAM,KAAK,GAAG,IAAI,eAAJ,CAAoB,GAApB,CAAd;EACA,MAAM,GAAG,GAAG,IAAI,eAAJ,CAAoB,GAApB,CAAZ;EACA,MAAM,OAAO,GAAG,kCAAkC,CAAC,QAAD,EAAW,KAAX,EAAkB,QAAlB,CAAlD;EACA,MAAM,KAAK,GAAG,kCAAkC,CAAC,QAAD,EAAW,GAAX,EAAgB,QAAhB,CAAhD;;EACA,+BAAqC,qBAAqB,CACxD,OAAO,CAAC,OAAD,EAAU,QAAV,CADiD,EAExD,OAAO,CAAC,OAAD,EAAU,SAAV,CAFiD,EAGxD,OAAO,CAAC,OAAD,EAAU,OAAV,CAHiD,EAIxD,OAAO,CAAC,OAAD,EAAU,QAAV,CAJiD,EAKxD,OAAO,CAAC,OAAD,EAAU,UAAV,CALiD,EAMxD,OAAO,CAAC,OAAD,EAAU,UAAV,CANiD,EAOxD,OAAO,CAAC,OAAD,EAAU,eAAV,CAPiD,EAQxD,OAAO,CAAC,OAAD,EAAU,eAAV,CARiD,EASxD,OAAO,CAAC,OAAD,EAAU,cAAV,CATiD,EAUxD,OAAO,CAAC,KAAD,EAAQ,QAAR,CAViD,EAWxD,OAAO,CAAC,KAAD,EAAQ,SAAR,CAXiD,EAYxD,OAAO,CAAC,KAAD,EAAQ,OAAR,CAZiD,EAaxD,OAAO,CAAC,KAAD,EAAQ,QAAR,CAbiD,EAcxD,OAAO,CAAC,KAAD,EAAQ,UAAR,CAdiD,EAexD,OAAO,CAAC,KAAD,EAAQ,UAAR,CAfiD,EAgBxD,OAAO,CAAC,KAAD,EAAQ,eAAR,CAhBiD,EAiBxD,OAAO,CAAC,KAAD,EAAQ,eAAR,CAjBiD,EAkBxD,OAAO,CAAC,KAAD,EAAQ,cAAR,CAlBiD,EAmBxD,QAnBwD,EAoBxD,WApBwD,EAqBxD,OArBwD,CAA1D;EAAA,MAAM,KAAN,0BAAM,KAAN;EAAA,MAAa,MAAb,0BAAa,MAAb;EAAA,MAAqB,KAArB,0BAAqB,KAArB;EAAA,MAA4B,IAA5B,0BAA4B,IAA5B;;EAuBA,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAD,EAAQ,QAAR,EAAkB,QAAlB,EAA4B,KAA5B,EAAmC,MAAnC,EAA2C,KAA3C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,CAAjE,EAAoE,CAApE,CAAvC,CA/C0D;;EAiD1D,MAAI,eAAe,GAAG,IAAI,CAAC,QAAL,CAAc,GAAd,EAAmB,cAAnB,CAAtB;EACA,MAAM,YAAY,GAAG,2BAA2B,CAAC,cAAD,EAAiB,QAAjB,EAA2B,QAA3B,CAAhD;;EAlD0D,4BAmDhB,iBAAiB,CAAC,eAAD,EAAkB,YAAlB,CAnDD;;EAmD1C,EAAA,eAnD0C,uBAmDvD,WAnDuD;EAmDzB,EAAA,IAnDyB,uBAmDzB,IAnDyB;;EAqD1D;EACA,0BAA6E,eAAe,CAC1F,CAD0F,EAE1F,CAF0F,EAG1F,CAH0F,EAI1F,CAJ0F,EAK1F,CAL0F,EAM1F,CAN0F,EAO1F,IAAI,CAAC,QAAL,CAAc,eAAd,CAP0F,EAQ1F,MAR0F,CAA5F;EAAA,MAAQ,KAAR,qBAAQ,KAAR;EAAA,MAAe,OAAf,qBAAe,OAAf;EAAA,MAAwB,OAAxB,qBAAwB,OAAxB;EAAA,MAAiC,YAAjC,qBAAiC,YAAjC;EAAA,MAA+C,YAA/C,qBAA+C,YAA/C;EAAA,MAA6D,WAA7D,qBAA6D,WAA7D;;EAUA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ,IAAxB;EAA8B,IAAA,KAAK,EAAL,KAA9B;EAAqC,IAAA,OAAO,EAAP,OAArC;EAA8C,IAAA,OAAO,EAAP,OAA9C;EAAuD,IAAA,YAAY,EAAZ,YAAvD;EAAqE,IAAA,YAAY,EAAZ,YAArE;EAAmF,IAAA,WAAW,EAAX;EAAnF,GAAP;EACD;;;EAKK,SAAU,yBAAV,CACJ,SADI,EAEJ,OAFI,EAGJ,UAHI,EAIJ,YAJI,EAI+C;EAEnD,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAD,CAA/B;EACA,MAAI,KAAJ,EAAW,MAAX;;EACA,MAAI,SAAS,KAAK,OAAlB,EAA2B;EACxB,IAAA,KADwB,GACN,OADM;EACjB,IAAA,MADiB,GACG,KADH;EAE1B,GAFD,MAEO;EACJ,IAAA,KADI,GACc,KADd;EACG,IAAA,MADH,GACqB,OADrB;EAEN;;EACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B,EAAkC,YAAlC,CAApC;EACA,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAD,EAAW,YAAX,CAAnD;EACA,MAAI,WAAW,GAAG,eAAe,CAAC,OAAD,EAAU,aAAV,EAAyB,MAAzB,EAAiC,MAAjC,CAAjC;EACA,MAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,kBAAd;;EAC5B,MAAI,wBAAwB,CAAC,WAAD,EAAc,YAAd,CAAxB,KAAwD,WAA5D,EAAyE;EACvE,UAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAA3C;EACA,MAAM,yBAAyB,GAAG;EAChC,IAAA,IAAI,EAAE,EAD0B;EAEhC,IAAA,MAAM,EAAE,EAFwB;EAGhC,IAAA,MAAM,EAAE,EAHwB;EAIhC,IAAA,WAAW,EAAE,IAJmB;EAKhC,IAAA,WAAW,EAAE,IALmB;EAMhC,IAAA,UAAU,EAAE;EANoB,GAAlC;EAQA,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,OAAD,EAAU,yBAAyB,CAAC,YAAD,CAAnC,EAAmD,KAAnD,CAArD;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAD,EAAQ,gBAAR,CAArB;EACA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAD,EAAS,gBAAT,CAArB;;EACA,2BAA2D,iBAAiB,CAC1E,KAD0E,EAE1E,KAF0E,EAG1E,iBAH0E,EAI1E,YAJ0E,EAK1E,YAL0E,CAA5E;EAAA,MAAM,OAAN,sBAAM,OAAN;EAAA,MAAe,YAAf,sBAAe,YAAf;EAAA,MAA6B,YAA7B,sBAA6B,YAA7B;EAAA,MAA2C,WAA3C,sBAA2C,WAA3C;;EAOA,MAAI,KAAJ,EAAW,OAAX;;EApCmD,0BAqCqB,eAAe,CACrF,CADqF,EAErF,CAFqF,EAGrF,CAHqF,EAIrF,OAJqF,EAKrF,YALqF,EAMrF,YANqF,EAOrF,WAPqF,EAQrF,WARqF,CArCpC;;EAqChD,EAAA,KArCgD,qBAqChD,KArCgD;EAqCzC,EAAA,OArCyC,qBAqCzC,OArCyC;EAqChC,EAAA,OArCgC,qBAqChC,OArCgC;EAqCvB,EAAA,YArCuB,qBAqCvB,YArCuB;EAqCT,EAAA,YArCS,qBAqCT,YArCS;EAqCK,EAAA,WArCL,qBAqCK,WArCL;EA+CnD,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,KAAzB,EAAgC,OAAhC,EAAyC,OAAzC,EAAkD,YAAlD,EAAgE,YAAhE,EAA8E,WAA9E,CAAP;EACD;EAEK,SAAU,2BAAV,CACJ,SADI,EAEJ,SAFI,EAGJ,UAHI,EAIJ,YAJI,EAIqC;EAEzC,MAAM,IAAI,GAAG,SAAS,KAAK,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAA1C;EACA,MAAM,KAAK,GAAG,cAAc,CAAC,UAAD,CAA5B;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAD,EAAY,QAAZ,CAAxB;EACA,MAAM,aAAa,GAAG,OAAO,CAAC,KAAD,EAAQ,QAAR,CAA7B;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAD,CAA3B;EACA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAD,CAAhC;;EACA,MAAI,UAAU,KAAK,eAAnB,EAAoC;EAClC,UAAM,IAAI,UAAJ,sDAA6D,UAA7D,kBAA+E,eAA/E,gBAAN;EACD;;EAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B,EAAkC,KAAlC,CAApC;EACA,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,KAAD,EAAQ,YAAR,CAAnD;EACA,MAAI,WAAW,GAAG,eAAe,CAAC,OAAD,EAAU,aAAV,EAAyB,MAAzB,EAAiC,MAAjC,CAAjC;EACA,MAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,kBAAd;;EAC5B,MAAI,wBAAwB,CAAC,WAAD,EAAc,YAAd,CAAxB,KAAwD,WAA5D,EAAyE;EACvE,UAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,MAAI,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAAzC;EACA,MAAI,SAAS,KAAK,OAAlB,EAA2B,YAAY,GAAG,0BAA0B,CAAC,YAAD,CAAzC;EAC3B,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,OAAD,EAAU,SAAV,EAAqB,KAArB,CAArD;EAEA,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,WAAV,CAA3C;;EACA,4BAAqC,iBAAiB,CAAC,QAAD,EAAW,SAAX,EAAsB,KAAtB,EAA6B,YAA7B,CAAtD;EAAA,MAAM,KAAN,uBAAM,KAAN;EAAA,MAAa,MAAb,uBAAa,MAAb;EAAA,MAAqB,KAArB,uBAAqB,KAArB;EAAA,MAA4B,IAA5B,uBAA4B,IAA5B;;EAEA,MAAI,YAAY,KAAK,KAAjB,IAA0B,iBAAiB,KAAK,CAApD,EAAuD;EAAA,0BACnB,aAAa,CAC7C,KAD6C,EAE7C,MAF6C,EAG7C,KAH6C,EAI7C,IAJ6C,EAK7C,CAL6C,EAM7C,CAN6C,EAO7C,CAP6C,EAQ7C,CAR6C,EAS7C,CAT6C,EAU7C,CAV6C,EAW7C,iBAX6C,EAY7C,YAZ6C,EAa7C,YAb6C,EAc7C,SAd6C,CADM;;EAClD,IAAA,KADkD,mBAClD,KADkD;EAC3C,IAAA,MAD2C,mBAC3C,MAD2C;EACnC,IAAA,KADmC,mBACnC,KADmC;EAC5B,IAAA,IAD4B,mBAC5B,IAD4B;EAiBtD;;EAED,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CAAa,IAAI,GAAG,KAApB,EAA2B,IAAI,GAAG,MAAlC,EAA0C,IAAI,GAAG,KAAjD,EAAwD,IAAI,GAAG,IAA/D,EAAqE,CAArE,EAAwE,CAAxE,EAA2E,CAA3E,EAA8E,CAA9E,EAAiF,CAAjF,EAAoF,CAApF,CAAP;EACD;EAEK,SAAU,+BAAV,CACJ,SADI,EAEJ,aAFI,EAGJ,UAHI,EAIJ,YAJI,EAIyC;EAE7C,MAAM,IAAI,GAAG,SAAS,KAAK,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAA1C;EACA,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAD,CAAhC;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAD,EAAgB,QAAhB,CAAxB;EACA,MAAM,aAAa,GAAG,OAAO,CAAC,KAAD,EAAQ,QAAR,CAA7B;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAD,CAA3B;EACA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAD,CAAhC;;EACA,MAAI,UAAU,KAAK,eAAnB,EAAoC;EAClC,UAAM,IAAI,UAAJ,sDAA6D,UAA7D,kBAA+E,eAA/E,gBAAN;EACD;;EACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,UAA1B,EAAsC,YAAtC,CAApC;EACA,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,KAAD,EAAQ,YAAR,CAAnD;EACA,MAAI,WAAW,GAAG,eAAe,CAAC,OAAD,EAAU,aAAV,EAAyB,UAAzB,EAAqC,MAArC,CAAjC;EACA,MAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,kBAAd;;EAC5B,MAAI,wBAAwB,CAAC,WAAD,EAAc,YAAd,CAAxB,KAAwD,WAA5D,EAAyE;EACvE,UAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,MAAI,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAAzC;EACA,MAAI,SAAS,KAAK,OAAlB,EAA2B,YAAY,GAAG,0BAA0B,CAAC,YAAD,CAAzC;EAC3B,MAAM,iBAAiB,GAAG,mCAAmC,CAAC,OAAD,EAAU,YAAV,CAA7D;;EAEA,+BACE,qBAAqB,CACnB,OAAO,CAAC,aAAD,EAAgB,QAAhB,CADY,EAEnB,OAAO,CAAC,aAAD,EAAgB,SAAhB,CAFY,EAGnB,OAAO,CAAC,aAAD,EAAgB,OAAhB,CAHY,EAInB,OAAO,CAAC,aAAD,EAAgB,QAAhB,CAJY,EAKnB,OAAO,CAAC,aAAD,EAAgB,UAAhB,CALY,EAMnB,OAAO,CAAC,aAAD,EAAgB,UAAhB,CANY,EAOnB,OAAO,CAAC,aAAD,EAAgB,eAAhB,CAPY,EAQnB,OAAO,CAAC,aAAD,EAAgB,eAAhB,CARY,EASnB,OAAO,CAAC,aAAD,EAAgB,cAAhB,CATY,EAUnB,OAAO,CAAC,KAAD,EAAQ,QAAR,CAVY,EAWnB,OAAO,CAAC,KAAD,EAAQ,SAAR,CAXY,EAYnB,OAAO,CAAC,KAAD,EAAQ,OAAR,CAZY,EAanB,OAAO,CAAC,KAAD,EAAQ,QAAR,CAbY,EAcnB,OAAO,CAAC,KAAD,EAAQ,UAAR,CAdY,EAenB,OAAO,CAAC,KAAD,EAAQ,UAAR,CAfY,EAgBnB,OAAO,CAAC,KAAD,EAAQ,eAAR,CAhBY,EAiBnB,OAAO,CAAC,KAAD,EAAQ,eAAR,CAjBY,EAkBnB,OAAO,CAAC,KAAD,EAAQ,cAAR,CAlBY,EAmBnB,QAnBmB,EAoBnB,WApBmB,EAqBnB,OArBmB,CADvB;EAAA,MAAM,KAAN,0BAAM,KAAN;EAAA,MAAa,MAAb,0BAAa,MAAb;EAAA,MAAqB,KAArB,0BAAqB,KAArB;EAAA,MAA4B,IAA5B,0BAA4B,IAA5B;EAAA,MAAkC,KAAlC,0BAAkC,KAAlC;EAAA,MAAyC,OAAzC,0BAAyC,OAAzC;EAAA,MAAkD,OAAlD,0BAAkD,OAAlD;EAAA,MAA2D,YAA3D,0BAA2D,YAA3D;EAAA,MAAyE,YAAzE,0BAAyE,YAAzE;EAAA,MAAuF,WAAvF,0BAAuF,WAAvF;;EAyBA,MAAM,UAAU,GAAG,sBAAsB,CAAC,aAAD,CAAzC;;EAhD6C,wBAiDuD,aAAa,CAC/G,KAD+G,EAE/G,MAF+G,EAG/G,KAH+G,EAI/G,IAJ+G,EAK/G,KAL+G,EAM/G,OAN+G,EAO/G,OAP+G,EAQ/G,YAR+G,EAS/G,YAT+G,EAU/G,WAV+G,EAW/G,iBAX+G,EAY/G,YAZ+G,EAa/G,YAb+G,EAc/G,UAd+G,CAjDpE;;EAiD1C,EAAA,KAjD0C,mBAiD1C,KAjD0C;EAiDnC,EAAA,MAjDmC,mBAiDnC,MAjDmC;EAiD3B,EAAA,KAjD2B,mBAiD3B,KAjD2B;EAiDpB,EAAA,IAjDoB,mBAiDpB,IAjDoB;EAiDd,EAAA,KAjDc,mBAiDd,KAjDc;EAiDP,EAAA,OAjDO,mBAiDP,OAjDO;EAiDE,EAAA,OAjDF,mBAiDE,OAjDF;EAiDW,EAAA,YAjDX,mBAiDW,YAjDX;EAiDyB,EAAA,YAjDzB,mBAiDyB,YAjDzB;EAiDuC,EAAA,WAjDvC,mBAiDuC,WAjDvC;;EAAA,0BAiEiC,eAAe,CAC3F,IAD2F,EAE3F,KAF2F,EAG3F,OAH2F,EAI3F,OAJ2F,EAK3F,YAL2F,EAM3F,YAN2F,EAO3F,WAP2F,EAQ3F,WAR2F,CAjEhD;;EAiE1C,EAAA,IAjE0C,qBAiE1C,IAjE0C;EAiEpC,EAAA,KAjEoC,qBAiEpC,KAjEoC;EAiE7B,EAAA,OAjE6B,qBAiE7B,OAjE6B;EAiEpB,EAAA,OAjEoB,qBAiEpB,OAjEoB;EAiEX,EAAA,YAjEW,qBAiEX,YAjEW;EAiEG,EAAA,YAjEH,qBAiEG,YAjEH;EAiEiB,EAAA,WAjEjB,qBAiEiB,WAjEjB;EA4E7C,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CACL,IAAI,GAAG,KADF,EAEL,IAAI,GAAG,MAFF,EAGL,IAAI,GAAG,KAHF,EAIL,IAAI,GAAG,IAJF,EAKL,IAAI,GAAG,KALF,EAML,IAAI,GAAG,OANF,EAOL,IAAI,GAAG,OAPF,EAQL,IAAI,GAAG,YARF,EASL,IAAI,GAAG,YATF,EAUL,IAAI,GAAG,WAVF,CAAP;EAYD;EAEK,SAAU,2BAAV,CACJ,SADI,EAEJ,SAFI,EAGJ,UAHI,EAIJ,YAJI,EAIqC;EAEzC,MAAM,IAAI,GAAG,SAAS,KAAK,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAA1C;EACA,MAAM,KAAK,GAAG,cAAc,CAAC,UAAD,CAA5B;EACA,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAI,WAAW,GAAG,eAAe,CAAC,OAAD,EAAU,aAAV,EAAyB,MAAzB,EAAiC,MAAjC,CAAjC;EACA,MAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,MAAd;EAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B,EAAkC,YAAlC,CAApC;;EACA,MAAI,wBAAwB,CAAC,WAAD,EAAc,YAAd,CAAxB,KAAwD,WAA5D,EAAyE;EACvE,UAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,MAAI,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAAzC;EACA,MAAI,SAAS,KAAK,OAAlB,EAA2B,YAAY,GAAG,0BAA0B,CAAC,YAAD,CAAzC;EAC3B,MAAM,cAAc,GAAG;EACrB,IAAA,IAAI,EAAE,EADe;EAErB,IAAA,MAAM,EAAE,EAFa;EAGrB,IAAA,MAAM,EAAE,EAHa;EAIrB,IAAA,WAAW,EAAE,IAJQ;EAKrB,IAAA,WAAW,EAAE,IALQ;EAMrB,IAAA,UAAU,EAAE;EANS,GAAvB;EAQA,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,OAAD,EAAU,cAAc,CAAC,YAAD,CAAxB,EAAwC,KAAxC,CAArD;;EACA,yBAA2E,cAAc,CACvF,OAAO,CAAC,SAAD,EAAY,QAAZ,CADgF,EAEvF,OAAO,CAAC,SAAD,EAAY,UAAZ,CAFgF,EAGvF,OAAO,CAAC,SAAD,EAAY,UAAZ,CAHgF,EAIvF,OAAO,CAAC,SAAD,EAAY,eAAZ,CAJgF,EAKvF,OAAO,CAAC,SAAD,EAAY,eAAZ,CALgF,EAMvF,OAAO,CAAC,SAAD,EAAY,cAAZ,CANgF,EAOvF,OAAO,CAAC,KAAD,EAAQ,QAAR,CAPgF,EAQvF,OAAO,CAAC,KAAD,EAAQ,UAAR,CARgF,EASvF,OAAO,CAAC,KAAD,EAAQ,UAAR,CATgF,EAUvF,OAAO,CAAC,KAAD,EAAQ,eAAR,CAVgF,EAWvF,OAAO,CAAC,KAAD,EAAQ,eAAR,CAXgF,EAYvF,OAAO,CAAC,KAAD,EAAQ,cAAR,CAZgF,CAAzF;EAAA,MAAM,KAAN,oBAAM,KAAN;EAAA,MAAa,OAAb,oBAAa,OAAb;EAAA,MAAsB,OAAtB,oBAAsB,OAAtB;EAAA,MAA+B,YAA/B,oBAA+B,YAA/B;EAAA,MAA6C,YAA7C,oBAA6C,YAA7C;EAAA,MAA2D,WAA3D,oBAA2D,WAA3D;;EAtByC,wBAoC+B,aAAa,CACnF,CADmF,EAEnF,CAFmF,EAGnF,CAHmF,EAInF,CAJmF,EAKnF,KALmF,EAMnF,OANmF,EAOnF,OAPmF,EAQnF,YARmF,EASnF,YATmF,EAUnF,WAVmF,EAWnF,iBAXmF,EAYnF,YAZmF,EAanF,YAbmF,CApC5C;;EAoCtC,EAAA,KApCsC,mBAoCtC,KApCsC;EAoC/B,EAAA,OApC+B,mBAoC/B,OApC+B;EAoCtB,EAAA,OApCsB,mBAoCtB,OApCsB;EAoCb,EAAA,YApCa,mBAoCb,YApCa;EAoCC,EAAA,YApCD,mBAoCC,YApCD;EAoCe,EAAA,WApCf,mBAoCe,WApCf;;EAAA,0BAmD+B,eAAe,CACrF,CADqF,EAErF,KAFqF,EAGrF,OAHqF,EAIrF,OAJqF,EAKrF,YALqF,EAMrF,YANqF,EAOrF,WAPqF,EAQrF,WARqF,CAnD9C;;EAmDtC,EAAA,KAnDsC,qBAmDtC,KAnDsC;EAmD/B,EAAA,OAnD+B,qBAmD/B,OAnD+B;EAmDtB,EAAA,OAnDsB,qBAmDtB,OAnDsB;EAmDb,EAAA,YAnDa,qBAmDb,YAnDa;EAmDC,EAAA,YAnDD,qBAmDC,YAnDD;EAmDe,EAAA,WAnDf,qBAmDe,WAnDf;EA6DzC,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CACL,CADK,EAEL,CAFK,EAGL,CAHK,EAIL,CAJK,EAKL,IAAI,GAAG,KALF,EAML,IAAI,GAAG,OANF,EAOL,IAAI,GAAG,OAPF,EAQL,IAAI,GAAG,YARF,EASL,IAAI,GAAG,YATF,EAUL,IAAI,GAAG,WAVF,CAAP;EAYD;EAEK,SAAU,gCAAV,CACJ,SADI,EAEJ,SAFI,EAGJ,UAHI,EAIJ,YAJI,EAI0C;EAE9C,MAAM,IAAI,GAAG,SAAS,KAAK,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAA1C;EACA,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAD,CAAjC;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAD,EAAY,QAAZ,CAAxB;EACA,MAAM,aAAa,GAAG,OAAO,CAAC,KAAD,EAAQ,QAAR,CAA7B;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAD,CAA3B;EACA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAD,CAAhC;;EACA,MAAI,UAAU,KAAK,eAAnB,EAAoC;EAClC,UAAM,IAAI,UAAJ,uDAA8D,UAA9D,kBAAgF,eAAhF,gBAAN;EACD;;EACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAtB,CAA6B,UAAC,OAAD,SAAuB;EAAA;EAAA,QAAZ,CAAY;EAAA,QAAT,CAAS;EAAA,QAAN,CAAM;;EACxE,QAAI,CAAC,KAAK,MAAN,IAAgB,CAAC,KAAK,MAAtB,IAAgC,CAAC,KAAK,KAA1C,EAAiD,OAAO,CAAC,IAAR,CAAa,CAAb,EAAgB,CAAhB;EACjD,WAAO,OAAP;EACD,GAHqB,EAGnB,EAHmB,CAAtB;EAIA,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B,EAAkC,OAAlC,CAApC;;EACA,MAAI,YAAY,KAAK,MAAjB,IAA2B,YAAY,KAAK,KAAhD,EAAuD;EACrD,UAAM,IAAI,UAAJ,uCAA8C,aAAa,CAAC,IAAd,CAAmB,IAAnB,CAA9C,mBAA+E,YAA/E,EAAN;EACD;;EACD,MAAI,WAAW,GAAG,eAAe,CAAC,OAAD,EAAU,aAAV,EAAyB,MAAzB,EAAiC,MAAjC,CAAjC;;EACA,MAAI,WAAW,KAAK,MAAhB,IAA0B,WAAW,KAAK,KAA9C,EAAqD;EACnD,UAAM,IAAI,UAAJ,sCAA6C,aAAa,CAAC,IAAd,CAAmB,IAAnB,CAA7C,mBAA8E,WAA9E,EAAN;EACD;;EACD,MAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,MAAd;;EAC5B,MAAI,wBAAwB,CAAC,WAAD,EAAc,YAAd,CAAxB,KAAwD,WAA5D,EAAyE;EACvE,UAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,MAAI,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAAzC;EACA,MAAI,SAAS,KAAK,OAAlB,EAA2B,YAAY,GAAG,0BAA0B,CAAC,YAAD,CAAzC;EAC3B,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,OAAD,EAAU,SAAV,EAAqB,KAArB,CAArD;EAEA,MAAM,UAAU,GAAG,cAAc,CAAC,QAAD,EAAW,CAAC,WAAD,EAAc,MAAd,CAAX,CAAjC;EACA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAD,EAAQ,UAAR,EAAoB,EAApB,CAAzC;EACA,EAAA,WAAW,CAAC,GAAZ,GAAkB,CAAlB;EACA,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAD,EAAY,UAAZ,EAAwB,EAAxB,CAAxC;EACA,EAAA,UAAU,CAAC,GAAX,GAAiB,CAAjB,CApC8C;EAsC9C;EACA;;EACA,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAD,EAAW,WAAX,CAAxC;EACA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAD,EAAW,UAAX,CAAvC;EAEA,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,WAAV,CAA3C;;EACA,4BAAwB,iBAAiB,CAAC,QAAD,EAAW,QAAX,EAAqB,SAArB,EAAgC,YAAhC,CAAzC;EAAA,MAAM,KAAN,uBAAM,KAAN;EAAA,MAAa,MAAb,uBAAa,MAAb;;EAEA,MAAI,YAAY,KAAK,OAAjB,IAA4B,iBAAiB,KAAK,CAAtD,EAAyD;EAAA,0BAClC,aAAa,CAChC,KADgC,EAEhC,MAFgC,EAGhC,CAHgC,EAIhC,CAJgC,EAKhC,CALgC,EAMhC,CANgC,EAOhC,CAPgC,EAQhC,CARgC,EAShC,CATgC,EAUhC,CAVgC,EAWhC,iBAXgC,EAYhC,YAZgC,EAahC,YAbgC,EAchC,QAdgC,CADqB;;EACpD,IAAA,KADoD,mBACpD,KADoD;EAC7C,IAAA,MAD6C,mBAC7C,MAD6C;EAiBxD;;EAED,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CAAa,IAAI,GAAG,KAApB,EAA2B,IAAI,GAAG,MAAlC,EAA0C,CAA1C,EAA6C,CAA7C,EAAgD,CAAhD,EAAmD,CAAnD,EAAsD,CAAtD,EAAyD,CAAzD,EAA4D,CAA5D,EAA+D,CAA/D,CAAP;EACD;EAEK,SAAU,+BAAV,CACJ,SADI,EAEJ,aAFI,EAGJ,UAHI,EAIJ,YAJI,EAIyC;EAE7C,MAAM,IAAI,GAAG,SAAS,KAAK,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAA1C;EACA,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAD,CAArC;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAD,EAAgB,QAAhB,CAAxB;EACA,MAAM,aAAa,GAAG,OAAO,CAAC,KAAD,EAAQ,QAAR,CAA7B;EACA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAD,CAA3B;EACA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAD,CAAhC;;EACA,MAAI,UAAU,KAAK,eAAnB,EAAoC;EAClC,UAAM,IAAI,UAAJ,sDAA6D,UAA7D,kBAA+E,eAA/E,gBAAN;EACD;;EACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,cAAV,EAA0B,UAA1B,EAAsC,YAAtC,CAApC;EACA,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,MAAD,EAAS,YAAT,CAAnD;EACA,MAAI,WAAW,GAAG,eAAe,CAAC,OAAD,EAAU,aAAV,EAAyB,UAAzB,EAAqC,MAArC,CAAjC;EACA,MAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,kBAAd;;EAC5B,MAAI,wBAAwB,CAAC,WAAD,EAAc,YAAd,CAAxB,KAAwD,WAA5D,EAAyE;EACvE,UAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,MAAI,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAAzC;EACA,MAAI,SAAS,KAAK,OAAlB,EAA2B,YAAY,GAAG,0BAA0B,CAAC,YAAD,CAAzC;EAC3B,MAAM,iBAAiB,GAAG,mCAAmC,CAAC,OAAD,EAAU,YAAV,CAA7D;EAEA,MAAM,GAAG,GAAG,OAAO,CAAC,aAAD,EAAgB,gBAAhB,CAAnB;EACA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAD,EAAQ,gBAAR,CAAnB;EACA,MAAI,KAAJ,EAAW,MAAX,EAAmB,KAAnB,EAA0B,IAA1B,EAAgC,KAAhC,EAAuC,OAAvC,EAAgD,OAAhD,EAAyD,YAAzD,EAAuE,YAAvE,EAAqF,WAArF;;EACA,MAAI,WAAW,KAAK,MAAhB,IAA0B,WAAW,KAAK,OAA1C,IAAqD,WAAW,KAAK,MAArE,IAA+E,WAAW,KAAK,KAAnG,EAA0G;EACxG;EACA,IAAA,KAAK,GAAG,CAAR;EACA,IAAA,MAAM,GAAG,CAAT;EACA,IAAA,KAAK,GAAG,CAAR;EACA,IAAA,IAAI,GAAG,CAAP;;EALwG,8BAMhD,iBAAiB,CACvE,GADuE,EAEvE,GAFuE,EAGvE,iBAHuE;EAKvE;EACA;EACA,IAAA,YAPuE,EAQvE,YARuE,CAN+B;;EAMrG,IAAA,OANqG,uBAMrG,OANqG;EAM5F,IAAA,YAN4F,uBAM5F,YAN4F;EAM9E,IAAA,YAN8E,uBAM9E,YAN8E;EAMhE,IAAA,WANgE,uBAMhE,WANgE;;EAAA,4BAgBhC,eAAe,CACrF,CADqF,EAErF,CAFqF,EAGrF,CAHqF,EAIrF,OAJqF,EAKrF,YALqF,EAMrF,YANqF,EAOrF,WAPqF,EAQrF,WARqF,CAhBiB;;EAgBrG,IAAA,KAhBqG,qBAgBrG,KAhBqG;EAgB9F,IAAA,OAhB8F,qBAgB9F,OAhB8F;EAgBrF,IAAA,OAhBqF,qBAgBrF,OAhBqF;EAgB5E,IAAA,YAhB4E,qBAgB5E,YAhB4E;EAgB9D,IAAA,YAhB8D,qBAgB9D,YAhB8D;EAgBhD,IAAA,WAhBgD,qBAgBhD,WAhBgD;EA0BzG,GA1BD,MA0BO;EACL,QAAM,QAAQ,GAAG,OAAO,CAAC,aAAD,EAAgB,SAAhB,CAAxB;;EACA,QAAI,CAAC,cAAc,CAAC,QAAD,EAAW,OAAO,CAAC,KAAD,EAAQ,SAAR,CAAlB,CAAnB,EAA0D;EACxD,YAAM,IAAI,UAAJ,CACJ,iFACE,oGAFE,CAAN;EAID;;EACD,QAAM,YAAY,GAAG,sBAAsB,CAAC,OAAD,EAAU,WAAV,CAA3C;;EARK,gCAUH,uBAAuB,CAAC,GAAD,EAAM,GAAN,EAAW,QAAX,EAAqB,QAArB,EAA+B,WAA/B,EAA4C,YAA5C,CAVpB;;EASF,IAAA,KATE,yBASF,KATE;EASK,IAAA,MATL,yBASK,MATL;EASa,IAAA,KATb,yBASa,KATb;EASoB,IAAA,IATpB,yBASoB,IATpB;EAS0B,IAAA,KAT1B,yBAS0B,KAT1B;EASiC,IAAA,OATjC,yBASiC,OATjC;EAS0C,IAAA,OAT1C,yBAS0C,OAT1C;EASmD,IAAA,YATnD,yBASmD,YATnD;EASiE,IAAA,YATjE,yBASiE,YATjE;EAS+E,IAAA,WAT/E,yBAS+E,WAT/E;;EAAA,0BAW+F,aAAa,CAC/G,KAD+G,EAE/G,MAF+G,EAG/G,KAH+G,EAI/G,IAJ+G,EAK/G,KAL+G,EAM/G,OAN+G,EAO/G,OAP+G,EAQ/G,YAR+G,EAS/G,YAT+G,EAU/G,WAV+G,EAW/G,iBAX+G,EAY/G,YAZ+G,EAa/G,YAb+G,EAc/G,aAd+G,CAX5G;;EAWF,IAAA,KAXE,mBAWF,KAXE;EAWK,IAAA,MAXL,mBAWK,MAXL;EAWa,IAAA,KAXb,mBAWa,KAXb;EAWoB,IAAA,IAXpB,mBAWoB,IAXpB;EAW0B,IAAA,KAX1B,mBAW0B,KAX1B;EAWiC,IAAA,OAXjC,mBAWiC,OAXjC;EAW0C,IAAA,OAX1C,mBAW0C,OAX1C;EAWmD,IAAA,YAXnD,mBAWmD,YAXnD;EAWiE,IAAA,YAXjE,mBAWiE,YAXjE;EAW+E,IAAA,WAX/E,mBAW+E,WAX/E;;EAAA,gCA4BH,yBAAyB,CACvB,KADuB,EAEvB,MAFuB,EAGvB,KAHuB,EAIvB,IAJuB,EAKvB,KALuB,EAMvB,OANuB,EAOvB,OAPuB,EAQvB,YARuB,EASvB,YATuB,EAUvB,WAVuB,EAWvB,iBAXuB,EAYvB,YAZuB,EAavB,YAbuB,EAcvB,aAduB,CA5BtB;;EA2BF,IAAA,KA3BE,yBA2BF,KA3BE;EA2BK,IAAA,MA3BL,yBA2BK,MA3BL;EA2Ba,IAAA,KA3Bb,yBA2Ba,KA3Bb;EA2BoB,IAAA,IA3BpB,yBA2BoB,IA3BpB;EA2B0B,IAAA,KA3B1B,yBA2B0B,KA3B1B;EA2BiC,IAAA,OA3BjC,yBA2BiC,OA3BjC;EA2B0C,IAAA,OA3B1C,yBA2B0C,OA3B1C;EA2BmD,IAAA,YA3BnD,yBA2BmD,YA3BnD;EA2BiE,IAAA,YA3BjE,yBA2BiE,YA3BjE;EA2B+E,IAAA,WA3B/E,yBA2B+E,WA3B/E;EA4CN;;EAED,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CACL,IAAI,GAAG,KADF,EAEL,IAAI,GAAG,MAFF,EAGL,IAAI,GAAG,KAHF,EAIL,IAAI,GAAG,IAJF,EAKL,IAAI,GAAG,KALF,EAML,IAAI,GAAG,OANF,EAOL,IAAI,GAAG,OAPF,EAQL,IAAI,GAAG,YARF,EASL,IAAI,GAAG,YATF,EAUL,IAAI,GAAG,WAVF,CAAP;EAYD;EAEK,SAAU,UAAV,CACJ,SADI,EAEJ,UAFI,EAGJ,QAHI,EAIJ,UAJI,EAKJ,WALI,EAMJ,UANI,EAOJ,SAPI,EAQJ,QARI,EAQ4C;EAEhD,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,GAAG,GAAG,QAAV;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,IAAI,GAAG,SAAX;EAEA,EAAA,IAAI,IAAI,KAAR;EACA,EAAA,KAAK,IAAI,MAAT;;EAXgD,8BAY7B,mBAAmB,CAAC,IAAD,EAAO,KAAP,CAZU;;EAY7C,EAAA,IAZ6C,yBAY7C,IAZ6C;EAYvC,EAAA,KAZuC,yBAYvC,KAZuC;;EAAA,yBAaxB,eAAe,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,QAAnB,CAbS;;EAa7C,EAAA,IAb6C,oBAa7C,IAb6C;EAavC,EAAA,KAbuC,oBAavC,KAbuC;EAahC,EAAA,GAbgC,oBAahC,GAbgC;EAchD,EAAA,IAAI,IAAI,IAAI,KAAZ;EACA,EAAA,GAAG,IAAI,IAAP;;EAfgD,yBAgBxB,cAAc,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,CAhBU;;EAgB7C,EAAA,IAhB6C,oBAgB7C,IAhB6C;EAgBvC,EAAA,KAhBuC,oBAgBvC,KAhBuC;EAgBhC,EAAA,GAhBgC,oBAgBhC,GAhBgC;EAiBhD,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH;EAAf,GAAP;EACD;;EAED,SAAS,OAAT,CACE,SADF,EAEE,WAFF,EAGE,WAHF,EAIE,gBAJF,EAKE,gBALF,EAME,eANF,EAOE,KAPF,EAQE,OARF,EASE,OATF,EAUE,YAVF,EAWE,YAXF,EAYE,WAZF,EAYqB;EAEnB,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,WAAW,GAAG,gBAAlB;EACA,MAAI,WAAW,GAAG,gBAAlB;EACA,MAAI,UAAU,GAAG,eAAjB;EAEA,EAAA,IAAI,IAAI,KAAR;EACA,EAAA,MAAM,IAAI,OAAV;EACA,EAAA,MAAM,IAAI,OAAV;EACA,EAAA,WAAW,IAAI,YAAf;EACA,EAAA,WAAW,IAAI,YAAf;EACA,EAAA,UAAU,IAAI,WAAd;EACA,MAAI,SAAS,GAAG,CAAhB;;EAfmB,sBAgB0D,WAAW,CACtF,IADsF,EAEtF,MAFsF,EAGtF,MAHsF,EAItF,WAJsF,EAKtF,WALsF,EAMtF,UANsF,CAhBrE;;EAgBhB,EAAA,SAhBgB,iBAgBhB,SAhBgB;EAgBL,EAAA,IAhBK,iBAgBL,IAhBK;EAgBC,EAAA,MAhBD,iBAgBC,MAhBD;EAgBS,EAAA,MAhBT,iBAgBS,MAhBT;EAgBiB,EAAA,WAhBjB,iBAgBiB,WAhBjB;EAgB8B,EAAA,WAhB9B,iBAgB8B,WAhB9B;EAgB2C,EAAA,UAhB3C,iBAgB2C,UAhB3C;EAwBnB,SAAO;EAAE,IAAA,SAAS,EAAT,SAAF;EAAa,IAAA,IAAI,EAAJ,IAAb;EAAmB,IAAA,MAAM,EAAN,MAAnB;EAA2B,IAAA,MAAM,EAAN,MAA3B;EAAmC,IAAA,WAAW,EAAX,WAAnC;EAAgD,IAAA,WAAW,EAAX,WAAhD;EAA6D,IAAA,UAAU,EAAV;EAA7D,GAAP;EACD;;EAED,SAAS,WAAT,CACE,EADF,EAEE,IAFF,EAGE,EAHF,EAIE,EAJF,EAKE,EALF,EAME,IANF,EAOE,EAPF,EAQE,GARF,EASE,GATF,EAUE,GAVF,EAWE,EAXF,EAYE,IAZF,EAaE,EAbF,EAcE,EAdF,EAeE,EAfF,EAgBE,IAhBF,EAiBE,EAjBF,EAkBE,GAlBF,EAmBE,GAnBF,EAoBE,GApBF,EAqBE,UArBF,EAqByD;EAEvD,MAAM,YAAY,GAAG,0BAA0B,CAAC,EAAD,EAAK,IAAL,EAAW,EAAX,EAAe,EAAf,EAAmB,EAAnB,EAAuB,IAAvB,EAA6B,EAA7B,EAAiC,GAAjC,EAAsC,GAAtC,EAA2C,GAA3C,CAA/C;EACA,MAAM,YAAY,GAAG,0BAA0B,CAAC,EAAD,EAAK,IAAL,EAAW,EAAX,EAAe,EAAf,EAAmB,EAAnB,EAAuB,IAAvB,EAA6B,EAA7B,EAAiC,GAAjC,EAAsC,GAAtC,EAA2C,GAA3C,CAA/C;EACA,MAAM,WAAW,GAAG,wBAAwB,CAAC,YAAD,EAAe,YAAf,CAA5C;EAEA,MAAI,KAAJ,EAAW,MAAX,EAAmB,KAAnB,EAA0B,IAA1B,EAAgC,KAAhC,EAAuC,OAAvC,EAAgD,OAAhD,EAAyD,YAAzD,EAAuE,YAAvE,EAAqF,WAArF;;EACA,MAAI,CAAC,UAAL,EAAiB;EACf,QAAI,WAAW,KAAK,MAAhB,IAA0B,WAAW,KAAK,OAA1C,IAAqD,WAAW,KAAK,MAAzE,EAAiF;EAC/E,YAAM,IAAI,UAAJ,CAAe,+DAAf,CAAN;EACD;;EACD,IAAA,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,CAAzB;;EAJe,4BAK+D,eAAe,CAC3F,EAAE,GAAG,EADsF,EAE3F,EAAE,GAAG,EAFsF,EAG3F,IAAI,GAAG,IAHoF,EAI3F,EAAE,GAAG,EAJsF,EAK3F,GAAG,GAAG,GALqF,EAM3F,GAAG,GAAG,GANqF,EAO3F,GAAG,GAAG,GAPqF,EAQ3F,WAR2F,CAL9E;;EAKZ,IAAA,IALY,qBAKZ,IALY;EAKN,IAAA,KALM,qBAKN,KALM;EAKC,IAAA,OALD,qBAKC,OALD;EAKU,IAAA,OALV,qBAKU,OALV;EAKmB,IAAA,YALnB,qBAKmB,YALnB;EAKiC,IAAA,YALjC,qBAKiC,YALjC;EAK+C,IAAA,WAL/C,qBAK+C,WAL/C;EAehB,GAfD,MAeO,IAAI,cAAc,CAAC,UAAD,CAAlB,EAAgC;EACrC,QAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,QAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAxB;EAEA,QAAM,aAAa,GAAG,IAAI,gBAAJ,CAAqB,EAArB,EAAyB,IAAzB,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,CAAvC,EAA0C,CAA1C,EAA6C,CAA7C,EAAgD,CAAhD,EAAmD,CAAnD,EAAsD,CAAtD,CAAtB;EACA,QAAM,aAAa,GAAG,IAAI,gBAAJ,CAAqB,EAArB,EAAyB,IAAzB,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,CAAvC,EAA0C,CAA1C,EAA6C,CAA7C,EAAgD,CAAhD,EAAmD,CAAnD,EAAsD,CAAtD,CAAtB;EACA,QAAM,OAAO,GAAG,QAAQ,CAAC,OAAzB;EACA,QAAM,YAAY,GAAG,eAAe,CAAC,QAAD,EAAW,UAAX,EAAuB,aAAvB,EAAsC,SAAtC,EAAiD,OAAjD,CAApC;EACA,QAAM,GAAG,GAAG,eAAe,CAAC,QAAD,EAAW,YAAX,EAAyB,aAAzB,EAAwC,SAAxC,EAAmD,OAAnD,CAA3B;EAEA,QAAM,eAAe,GAAG,wBAAwB,CAAC,KAAD,EAAQ,WAAR,CAAhD;EACA,QAAM,iBAAiB,GAAGE,cAAY,CAAC,IAAD,CAAtC;EACA,IAAA,iBAAiB,CAAC,WAAlB,GAAgC,eAAhC;;EAZqC,8BAaH,iBAAiB,CAAC,QAAD,EAAW,UAAX,EAAuB,GAAvB,EAA4B,iBAA5B,CAbd;;EAalC,IAAA,KAbkC,uBAalC,KAbkC;EAa3B,IAAA,MAb2B,uBAa3B,MAb2B;EAanB,IAAA,KAbmB,uBAanB,KAbmB;EAaZ,IAAA,IAbY,uBAaZ,IAbY;;EAAA,4BAeyC,eAAe,CAC3F,IAD2F,EAE3F,EAAE,GAAG,EAFsF,EAG3F,IAAI,GAAG,IAHoF,EAI3F,EAAE,GAAG,EAJsF,EAK3F,GAAG,GAAG,GALqF,EAM3F,GAAG,GAAG,GANqF,EAO3F,GAAG,GAAG,GAPqF,EAQ3F,WAR2F,CAfxD;;EAelC,IAAA,IAfkC,qBAelC,IAfkC;EAe5B,IAAA,KAf4B,qBAe5B,KAf4B;EAerB,IAAA,OAfqB,qBAerB,OAfqB;EAeZ,IAAA,OAfY,qBAeZ,OAfY;EAeH,IAAA,YAfG,qBAeH,YAfG;EAeW,IAAA,YAfX,qBAeW,YAfX;EAeyB,IAAA,WAfzB,qBAeyB,WAfzB;EAyBtC,GAzBM,MAyBA;EACL;EACA,QAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,QAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,SAAb,CAAxB;;EACA,QAAM,UAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAxB;;EACA,QAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,UAAD,EAAa,OAAb,CAD8B,EAErC,QAFqC,EAGrC,UAHqC,EAIrC,EAJqC,EAKrC,IALqC,EAMrC,EANqC,EAOrC,EAPqC,EAQrC,EARqC,EASrC,IATqC,EAUrC,EAVqC,EAWrC,GAXqC,EAYrC,GAZqC,EAarC,GAbqC,CAAvC;EAeA,QAAM,KAAK,GAAG,gBAAgB,CAC5B,IAAI,eAAJ,CAAoB,cAApB,CAD4B,EAE5B,QAF4B,EAG5B,UAH4B,EAI5B,EAJ4B,EAK5B,IAL4B,EAM5B,EAN4B,EAO5B,EAP4B,EAQ5B,EAR4B,EAS5B,IAT4B,EAU5B,EAV4B,EAW5B,GAX4B,EAY5B,GAZ4B,EAa5B,GAb4B,CAA9B;;EAeA,QAAI,WAAW,KAAK,MAAhB,IAA0B,WAAW,KAAK,OAA1C,IAAqD,WAAW,KAAK,MAArE,IAA+E,WAAW,KAAK,KAAnG,EAA0G;EACxG;EACA,MAAA,KAAK,GAAG,CAAR;EACA,MAAA,MAAM,GAAG,CAAT;EACA,MAAA,KAAK,GAAG,CAAR;EACA,MAAA,IAAI,GAAG,CAAP;;EALwG,gCAMhD,iBAAiB,CACvE,OAAO,CAAC,UAAD,EAAa,gBAAb,CADgE,EAEvE,KAFuE,EAGvE,CAHuE,EAIvE,YAJuE,EAKvE,YALuE,CAN+B;;EAMrG,MAAA,OANqG,uBAMrG,OANqG;EAM5F,MAAA,YAN4F,uBAM5F,YAN4F;EAM9E,MAAA,YAN8E,uBAM9E,YAN8E;EAMhE,MAAA,WANgE,uBAMhE,WANgE;;EAAA,+BAahC,eAAe,CACrF,CADqF,EAErF,CAFqF,EAGrF,CAHqF,EAIrF,OAJqF,EAKrF,YALqF,EAMrF,YANqF,EAOrF,WAPqF,EAQrF,WARqF,CAbiB;;EAarG,MAAA,KAbqG,sBAarG,KAbqG;EAa9F,MAAA,OAb8F,sBAa9F,OAb8F;EAarF,MAAA,OAbqF,sBAarF,OAbqF;EAa5E,MAAA,YAb4E,sBAa5E,YAb4E;EAa9D,MAAA,YAb8D,sBAa9D,YAb8D;EAahD,MAAA,WAbgD,sBAahD,WAbgD;EAuBzG,KAvBD,MAuBO;EAAA,mCAEH,uBAAuB,CACrB,OAAO,CAAC,UAAD,EAAa,gBAAb,CADc,EAErB,KAFqB,EAGrB,QAHqB,EAIrB,UAJqB,EAKrB,WALqB,EAMrBA,cAAY,CAAC,IAAD,CANS,CAFpB;;EACF,MAAA,KADE,0BACF,KADE;EACK,MAAA,MADL,0BACK,MADL;EACa,MAAA,KADb,0BACa,KADb;EACoB,MAAA,IADpB,0BACoB,IADpB;EAC0B,MAAA,KAD1B,0BAC0B,KAD1B;EACiC,MAAA,OADjC,0BACiC,OADjC;EAC0C,MAAA,OAD1C,0BAC0C,OAD1C;EACmD,MAAA,YADnD,0BACmD,YADnD;EACiE,MAAA,YADjE,0BACiE,YADjE;EAC+E,MAAA,WAD/E,0BAC+E,WAD/E;EAUN;EACF;;EAED,EAAA,cAAc,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,KAA7B,EAAoC,OAApC,EAA6C,OAA7C,EAAsD,YAAtD,EAAoE,YAApE,EAAkF,WAAlF,CAAd;EACA,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ,IAAxB;EAA8B,IAAA,KAAK,EAAL,KAA9B;EAAqC,IAAA,OAAO,EAAP,OAArC;EAA8C,IAAA,OAAO,EAAP,OAA9C;EAAuD,IAAA,YAAY,EAAZ,YAAvD;EAAqE,IAAA,YAAY,EAAZ,YAArE;EAAmF,IAAA,WAAW,EAAX;EAAnF,GAAP;EACD;;EAED,SAAS,UAAT,CAAoB,gBAApB,EAA4C,CAA5C,EAAuD,GAAvD,EAAoE,CAApE,EAA+E,EAA/E,EAA2F,EAA3F,EAAuG,EAAvG,EAAiH;EAC/G,MAAI,GAAG,GAAG,IAAV;EACA,EAAA,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,IAAI,CAAC,MAAL,CAAY,EAAZ,CAAd,CAAN;EACA,EAAA,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,EAAZ,CAAd,EAA+B,QAA/B,CAAd,CAAN;EACA,EAAA,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,EAAZ,CAAd,EAA+B,OAA/B,CAAd,CAAN;EACA,EAAA,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAd,EAA8B,OAA9B,CAAd,CAAN;EACA,EAAA,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAd,EAAgC,IAAI,CAAC,MAAL,CAAY,KAAK,GAAjB,CAAhC,CAAd,CAAN;EACA,EAAA,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAd,EAA8B,IAAI,CAAC,MAAL,CAAY,KAAK,EAAL,GAAU,GAAtB,CAA9B,CAAd,CAAN;EAEA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAA2B,GAA3B,CAAf;EACA,EAAA,wBAAwB,CAAC,MAAD,CAAxB;EACA,SAAO,MAAP;EACD;;EAED,SAAS,WAAT,CACE,IADF,EAEE,KAFF,EAGE,GAHF,EAIE,SAJF,EAKE,WALF,EAME,WANF,EAOE,gBAPF,EAQE,gBARF,EASE,eATF,EAUE,QAVF,EAWE,KAXF,EAYE,MAZF,EAaE,KAbF,EAcE,SAdF,EAeE,KAfF,EAgBE,OAhBF,EAiBE,OAjBF,EAkBE,YAlBF,EAmBE,YAnBF,EAoBE,WApBF,EAqBE,OArBF,EAqBsC;EAEpC,MAAI,IAAI,GAAG,SAAX,CAFoC;;EAIpC,iBAAgF,OAAO,CACrF,SADqF,EAErF,WAFqF,EAGrF,WAHqF,EAIrF,gBAJqF,EAKrF,gBALqF,EAMrF,eANqF,EAOrF,KAPqF,EAQrF,OARqF,EASrF,OATqF,EAUrF,YAVqF,EAWrF,YAXqF,EAYrF,WAZqF,CAAvF;EAAA,MAAM,SAAN,YAAM,SAAN;EAAA,MAAiB,IAAjB,YAAiB,IAAjB;EAAA,MAAuB,MAAvB,YAAuB,MAAvB;EAAA,MAA+B,MAA/B,YAA+B,MAA/B;EAAA,MAAuC,WAAvC,YAAuC,WAAvC;EAAA,MAAoD,WAApD,YAAoD,WAApD;EAAA,MAAiE,UAAjE,YAAiE,UAAjE;;EAcA,EAAA,IAAI,IAAI,SAAR,CAlBoC;;EAqBpC,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,QAAnB,CAAnC;EACA,MAAM,YAAY,GAAG,IAAI,gBAAJ,CAAqB,KAArB,EAA4B,MAA5B,EAAoC,KAApC,EAA2C,IAA3C,EAAiD,CAAjD,EAAoD,CAApD,EAAuD,CAAvD,EAA0D,CAA1D,EAA6D,CAA7D,EAAgE,CAAhE,CAArB;EACA,MAAM,SAAS,GAAG,eAAe,CAAC,QAAD,EAAW,QAAX,EAAqB,YAArB,EAAmC,OAAnC,CAAjC;EAEA,SAAO;EACL,IAAA,IAAI,EAAE,OAAO,CAAC,SAAD,EAAY,QAAZ,CADR;EAEL,IAAA,KAAK,EAAE,OAAO,CAAC,SAAD,EAAY,SAAZ,CAFT;EAGL,IAAA,GAAG,EAAE,OAAO,CAAC,SAAD,EAAY,OAAZ,CAHP;EAIL,IAAA,IAAI,EAAJ,IAJK;EAKL,IAAA,MAAM,EAAN,MALK;EAML,IAAA,MAAM,EAAN,MANK;EAOL,IAAA,WAAW,EAAX,WAPK;EAQL,IAAA,WAAW,EAAX,WARK;EASL,IAAA,UAAU,EAAV;EATK,GAAP;EAWD;;EAEK,SAAU,gBAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,QAHI,EAIJ,KAJI,EAKJ,MALI,EAMJ,KANI,EAOJ,IAPI,EAQJ,CARI,EASJ,GATI,EAUJ,CAVI,EAWJ,EAXI,EAYJ,EAZI,EAaJ,EAbI,EAcJ,OAdI,EAcgC;EAEpC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;;EACA,MAAI,YAAY,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAZ,KAA+D,CAAnE,EAAsE;EACpE,WAAO,UAAU,CAAC,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAR,EAAqC,CAArC,EAAwC,GAAxC,EAA6C,CAA7C,EAAgD,EAAhD,EAAoD,EAApD,EAAwD,EAAxD,CAAjB;EACD,GAbmC;EAgBpC;;;EACA,MAAM,EAAE,GAAG,kCAAkC,CAAC,QAAD,EAAW,OAAX,EAAoB,QAApB,CAA7C;EACA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,EAAD,EAAK,QAAL,CAAR,EAAwB,OAAO,CAAC,EAAD,EAAK,SAAL,CAA/B,EAAgD,OAAO,CAAC,EAAD,EAAK,OAAL,CAAvD,EAAsE,QAAtE,CAAnC;EACA,MAAM,YAAY,GAAG,IAAI,gBAAJ,CAAqB,KAArB,EAA4B,MAA5B,EAAoC,KAApC,EAA2C,IAA3C,EAAiD,CAAjD,EAAoD,CAApD,EAAuD,CAAvD,EAA0D,CAA1D,EAA6D,CAA7D,EAAgE,CAAhE,CAArB;EACA,MAAM,SAAS,GAAG,eAAe,CAAC,QAAD,EAAW,QAAX,EAAqB,YAArB,EAAmC,OAAnC,CAAjC;EACA,MAAM,cAAc,GAAG,sBAAsB,CAC3C,OAAO,CAAC,SAAD,EAAY,QAAZ,CADoC,EAE3C,OAAO,CAAC,SAAD,EAAY,SAAZ,CAFoC,EAG3C,OAAO,CAAC,SAAD,EAAY,OAAZ,CAHoC,EAI3C,OAAO,CAAC,EAAD,EAAK,QAAL,CAJoC,EAK3C,OAAO,CAAC,EAAD,EAAK,UAAL,CALoC,EAM3C,OAAO,CAAC,EAAD,EAAK,UAAL,CANoC,EAO3C,OAAO,CAAC,EAAD,EAAK,eAAL,CAPoC,EAQ3C,OAAO,CAAC,EAAD,EAAK,eAAL,CARoC,EAS3C,OAAO,CAAC,EAAD,EAAK,cAAL,CAToC,EAU3C,QAV2C,CAA7C,CArBoC;EAmCpC;;EACA,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,QAAD,EAAW,cAAX,EAA2B,YAA3B,CAAxD;EACA,SAAO,UAAU,CAAC,OAAO,CAAC,mBAAD,EAAsB,gBAAtB,CAAR,EAAiD,CAAjD,EAAoD,GAApD,EAAyD,CAAzD,EAA4D,EAA5D,EAAgE,EAAhE,EAAoE,EAApE,CAAjB;EACD;EAIK,SAAU,2CAAV,CACJ,SADI,EAEJ,QAFI,EAGJ,KAHI,EAIJ,YAJI,EAIkC;EAEtC,MAAM,IAAI,GAAG,SAAS,KAAK,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAA7C;;EACA,+BACE,wBAAwB,CAAC,KAAD,CAD1B;EAAA,MAAM,KAAN,0BAAM,KAAN;EAAA,MAAa,MAAb,0BAAa,MAAb;EAAA,MAAqB,KAArB,0BAAqB,KAArB;EAAA,MAA4B,IAA5B,0BAA4B,IAA5B;EAAA,MAAkC,KAAlC,0BAAkC,KAAlC;EAAA,MAAyC,OAAzC,0BAAyC,OAAzC;EAAA,MAAkD,OAAlD,0BAAkD,OAAlD;EAAA,MAA2D,YAA3D,0BAA2D,YAA3D;EAAA,MAAyE,YAAzE,0BAAyE,YAAzE;EAAA,MAAuF,WAAvF,0BAAuF,WAAvF;;EAEA,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAD,CAA3C;;EANsC,qBAO8D,WAAW,CAC7G,OAAO,CAAC,QAAD,EAAW,KAAX,CADsG,EAE7G,OAAO,CAAC,QAAD,EAAW,MAAX,CAFsG,EAG7G,OAAO,CAAC,QAAD,EAAW,KAAX,CAHsG,EAI7G,OAAO,CAAC,QAAD,EAAW,IAAX,CAJsG,EAK7G,OAAO,CAAC,QAAD,EAAW,KAAX,CALsG,EAM7G,OAAO,CAAC,QAAD,EAAW,OAAX,CANsG,EAO7G,OAAO,CAAC,QAAD,EAAW,OAAX,CAPsG,EAQ7G,OAAO,CAAC,QAAD,EAAW,YAAX,CARsG,EAS7G,OAAO,CAAC,QAAD,EAAW,YAAX,CATsG,EAU7G,OAAO,CAAC,QAAD,EAAW,WAAX,CAVsG,EAW7G,IAAI,GAAG,KAXsG,EAY7G,IAAI,GAAG,MAZsG,EAa7G,IAAI,GAAG,KAbsG,EAc7G,IAAI,GAAG,IAdsG,EAe7G,IAAI,GAAG,KAfsG,EAgB7G,IAAI,GAAG,OAhBsG,EAiB7G,IAAI,GAAG,OAjBsG,EAkB7G,IAAI,GAAG,YAlBsG,EAmB7G,IAAI,GAAG,YAnBsG,EAoB7G,IAAI,GAAG,WApBsG,EAqB7G,UArB6G,CAPzE;;EAOnC,EAAA,KAPmC,gBAOnC,KAPmC;EAO5B,EAAA,MAP4B,gBAO5B,MAP4B;EAOpB,EAAA,KAPoB,gBAOpB,KAPoB;EAOb,EAAA,IAPa,gBAOb,IAPa;EAOP,EAAA,KAPO,gBAOP,KAPO;EAOA,EAAA,OAPA,gBAOA,OAPA;EAOS,EAAA,OAPT,gBAOS,OAPT;EAOkB,EAAA,YAPlB,gBAOkB,YAPlB;EAOgC,EAAA,YAPhC,gBAOgC,YAPhC;EAO8C,EAAA,WAP9C,gBAO8C,WAP9C;EA8BtC,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,SAAO,IAAI,QAAJ,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAA5B,EAAmC,IAAnC,EAAyC,KAAzC,EAAgD,OAAhD,EAAyD,OAAzD,EAAkE,YAAlE,EAAgF,YAAhF,EAA8F,WAA9F,CAAP;EACD;EAEK,SAAU,0CAAV,CACJ,SADI,EAEJ,OAFI,EAGJ,YAHI,EAGiC;EAErC,MAAM,IAAI,GAAG,SAAS,KAAK,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAA7C;;EACA,8BAA6E,yBAAyB,CAAC,YAAD,EAAe,CACnH,OADmH,EAEnH,QAFmH,EAGnH,OAHmH,EAInH,MAJmH,CAAf,CAAtG;EAAA,MAAQ,KAAR,yBAAQ,KAAR;EAAA,MAAe,OAAf,yBAAe,OAAf;EAAA,MAAwB,OAAxB,yBAAwB,OAAxB;EAAA,MAAiC,YAAjC,yBAAiC,YAAjC;EAAA,MAA+C,YAA/C,yBAA+C,YAA/C;EAAA,MAA6D,WAA7D,yBAA6D,WAA7D;;EAMA,MAAM,EAAE,GAAG,UAAU,CACnB,OAAO,CAAC,OAAD,EAAU,gBAAV,CADY,EAEnB,IAAI,GAAG,KAFY,EAGnB,IAAI,GAAG,OAHY,EAInB,IAAI,GAAG,OAJY,EAKnB,IAAI,GAAG,YALY,EAMnB,IAAI,GAAG,YANY,EAOnB,IAAI,GAAG,WAPY,CAArB;EASA,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAD,CAA5B;EACA,SAAO,IAAI,OAAJ,CAAY,EAAZ,CAAP;EACD;EAEK,SAAU,gDAAV,CACJ,SADI,EAEJ,QAFI,EAGJ,YAHI,EAIJ,YAJI,EAIuC;EAE3C,MAAM,IAAI,GAAG,SAAS,KAAK,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAA7C;;EACA,+BACE,wBAAwB,CAAC,YAAD,CAD1B;EAAA,MAAQ,KAAR,0BAAQ,KAAR;EAAA,MAAe,MAAf,0BAAe,MAAf;EAAA,MAAuB,KAAvB,0BAAuB,KAAvB;EAAA,MAA8B,IAA9B,0BAA8B,IAA9B;EAAA,MAAoC,KAApC,0BAAoC,KAApC;EAAA,MAA2C,OAA3C,0BAA2C,OAA3C;EAAA,MAAoD,OAApD,0BAAoD,OAApD;EAAA,MAA6D,YAA7D,0BAA6D,YAA7D;EAAA,MAA2E,YAA3E,0BAA2E,YAA3E;EAAA,MAAyF,WAAzF,0BAAyF,WAAzF;;EAEA,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAD,EAAW,QAAX,CAAxB;;EACA,qBAAyF,WAAW,CAClG,OAAO,CAAC,QAAD,EAAW,QAAX,CAD2F,EAElG,OAAO,CAAC,QAAD,EAAW,SAAX,CAF2F,EAGlG,OAAO,CAAC,QAAD,EAAW,OAAX,CAH2F,EAIlG,OAAO,CAAC,QAAD,EAAW,QAAX,CAJ2F,EAKlG,OAAO,CAAC,QAAD,EAAW,UAAX,CAL2F,EAMlG,OAAO,CAAC,QAAD,EAAW,UAAX,CAN2F,EAOlG,OAAO,CAAC,QAAD,EAAW,eAAX,CAP2F,EAQlG,OAAO,CAAC,QAAD,EAAW,eAAX,CAR2F,EASlG,OAAO,CAAC,QAAD,EAAW,cAAX,CAT2F,EAUlG,QAVkG,EAWlG,IAAI,GAAG,KAX2F,EAYlG,IAAI,GAAG,MAZ2F,EAalG,IAAI,GAAG,KAb2F,EAclG,IAAI,GAAG,IAd2F,EAelG,IAAI,GAAG,KAf2F,EAgBlG,IAAI,GAAG,OAhB2F,EAiBlG,IAAI,GAAG,OAjB2F,EAkBlG,IAAI,GAAG,YAlB2F,EAmBlG,IAAI,GAAG,YAnB2F,EAoBlG,IAAI,GAAG,WApB2F,EAqBlG,OArBkG,CAApG;EAAA,MAAQ,IAAR,gBAAQ,IAAR;EAAA,MAAc,KAAd,gBAAc,KAAd;EAAA,MAAqB,GAArB,gBAAqB,GAArB;EAAA,MAA0B,IAA1B,gBAA0B,IAA1B;EAAA,MAAgC,MAAhC,gBAAgC,MAAhC;EAAA,MAAwC,MAAxC,gBAAwC,MAAxC;EAAA,MAAgD,WAAhD,gBAAgD,WAAhD;EAAA,MAA6D,WAA7D,gBAA6D,WAA7D;EAAA,MAA0E,UAA1E,gBAA0E,UAA1E;;EAuBA,SAAO,sBAAsB,CAAC,IAAD,EAAO,KAAP,EAAc,GAAd,EAAmB,IAAnB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,WAAzC,EAAsD,WAAtD,EAAmE,UAAnE,EAA+E,QAA/E,CAA7B;EACD;EAEK,SAAU,4CAAV,CACJ,SADI,EAEJ,YAFI,EAGJ,YAHI,EAGmC;EAEvC,MAAM,IAAI,GAAG,SAAS,KAAK,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAA7C;;EACA,+BAA6E,wBAAwB,CAAC,YAAD,CAArG;EAAA,MAAQ,KAAR,0BAAQ,KAAR;EAAA,MAAe,OAAf,0BAAe,OAAf;EAAA,MAAwB,OAAxB,0BAAwB,OAAxB;EAAA,MAAiC,YAAjC,0BAAiC,YAAjC;EAAA,MAA+C,YAA/C,0BAA+C,YAA/C;EAAA,MAA6D,WAA7D,0BAA6D,WAA7D;;EACA,kBAAqE,OAAO,CAC1E,OAAO,CAAC,YAAD,EAAe,QAAf,CADmE,EAE1E,OAAO,CAAC,YAAD,EAAe,UAAf,CAFmE,EAG1E,OAAO,CAAC,YAAD,EAAe,UAAf,CAHmE,EAI1E,OAAO,CAAC,YAAD,EAAe,eAAf,CAJmE,EAK1E,OAAO,CAAC,YAAD,EAAe,eAAf,CALmE,EAM1E,OAAO,CAAC,YAAD,EAAe,cAAf,CANmE,EAO1E,IAAI,GAAG,KAPmE,EAQ1E,IAAI,GAAG,OARmE,EAS1E,IAAI,GAAG,OATmE,EAU1E,IAAI,GAAG,YAVmE,EAW1E,IAAI,GAAG,YAXmE,EAY1E,IAAI,GAAG,WAZmE,CAA5E;EAAA,MAAM,IAAN,aAAM,IAAN;EAAA,MAAY,MAAZ,aAAY,MAAZ;EAAA,MAAoB,MAApB,aAAoB,MAApB;EAAA,MAA4B,WAA5B,aAA4B,WAA5B;EAAA,MAAyC,WAAzC,aAAyC,WAAzC;EAAA,MAAsD,UAAtD,aAAsD,UAAtD;;EAJuC,uBAkB2B,YAAY,CAC5E,IAD4E,EAE5E,MAF4E,EAG5E,MAH4E,EAI5E,WAJ4E,EAK5E,WAL4E,EAM5E,UAN4E,EAO5E,QAP4E,CAlBvC;;EAkBpC,EAAA,IAlBoC,kBAkBpC,IAlBoC;EAkB9B,EAAA,MAlB8B,kBAkB9B,MAlB8B;EAkBtB,EAAA,MAlBsB,kBAkBtB,MAlBsB;EAkBd,EAAA,WAlBc,kBAkBd,WAlBc;EAkBD,EAAA,WAlBC,kBAkBD,WAlBC;EAkBY,EAAA,UAlBZ,kBAkBY,UAlBZ;EA2BvC,MAAM,SAAS,GAAG,YAAY,CAAC,sBAAD,CAA9B;EACA,SAAO,IAAI,SAAJ,CAAc,IAAd,EAAoB,MAApB,EAA4B,MAA5B,EAAoC,WAApC,EAAiD,WAAjD,EAA8D,UAA9D,CAAP;EACD;EAEK,SAAU,iDAAV,CACJ,SADI,EAEJ,SAFI,EAGJ,YAHI,EAIJ,YAJI,EAIwC;EAE5C,MAAI,QAAQ,GAAG,wBAAwB,CAAC,YAAD,CAAvC;;EACA,MAAI,SAAS,KAAK,UAAlB,EAA8B;EAC5B,IAAA,QAAQ,GAAG;EACT,MAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,KADR;EAET,MAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,MAFT;EAGT,MAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,KAHR;EAIT,MAAA,IAAI,EAAE,CAAC,QAAQ,CAAC,IAJP;EAKT,MAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,KALR;EAMT,MAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,OANV;EAOT,MAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,OAPV;EAQT,MAAA,YAAY,EAAE,CAAC,QAAQ,CAAC,YARf;EAST,MAAA,YAAY,EAAE,CAAC,QAAQ,CAAC,YATf;EAUT,MAAA,WAAW,EAAE,CAAC,QAAQ,CAAC;EAVd,KAAX;EAYD;;EACD,kBAAuG,QAAvG;EAAA,MAAM,KAAN,aAAM,KAAN;EAAA,MAAa,MAAb,aAAa,MAAb;EAAA,MAAqB,KAArB,aAAqB,KAArB;EAAA,MAA4B,IAA5B,aAA4B,IAA5B;EAAA,MAAkC,KAAlC,aAAkC,KAAlC;EAAA,MAAyC,OAAzC,aAAyC,OAAzC;EAAA,MAAkD,OAAlD,aAAkD,OAAlD;EAAA,MAA2D,YAA3D,aAA2D,YAA3D;EAAA,MAAyE,YAAzE,aAAyE,YAAzE;EAAA,MAAuF,WAAvF,aAAuF,WAAvF;;EAjB4C,2BAkBhC,eAAe,CAAC,IAAD,EAAO,KAAP,EAAc,OAAd,EAAuB,OAAvB,EAAgC,YAAhC,EAA8C,YAA9C,EAA4D,WAA5D,EAAyE,KAAzE,CAlBiB;;EAkBzC,EAAA,IAlByC,sBAkBzC,IAlByC;EAoB5C,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EAEA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAD,EAAY,QAAZ,CAAxB;EACA,MAAM,UAAU,GAAG,cAAc,CAAC,QAAD,EAAW,CAAC,WAAD,EAAc,MAAd,CAAX,CAAjC;EACA,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAD,EAAY,UAAZ,EAAwB,EAAxB,CAApC;EACA,MAAM,IAAI,GAAG,YAAY,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,IAAvB,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAzB;EACA,EAAA,MAAM,CAAC,GAAP,GAAa,IAAI,GAAG,CAAP,GAAW,iBAAiB,CAAC,mBAAmB,CAAC,QAAD,EAAW,SAAX,CAApB,CAA5B,GAAyE,CAAtF,CA1B4C;EA4B5C;EACA;;EACA,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAD,EAAW,MAAX,CAAxC;EACA,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,MAAM,aAAa,GAAG,IAAI,QAAJ,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAA5B,EAAmC,IAAnC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,CAAtB;EACA,MAAM,WAAW,GAAGD,cAAY,CAACC,cAAY,CAAC,IAAD,CAAb,EAAqB,OAArB,CAAhC;EACA,MAAM,SAAS,GAAG,eAAe,CAAC,QAAD,EAAW,SAAX,EAAsB,aAAtB,EAAqC,OAArC,CAAjC;EACA,MAAM,eAAe,GAAG,qBAAqB,CAAC,SAAD,EAAY,UAAZ,EAAwB,EAAxB,CAA7C;EAEA,SAAO,2BAA2B,CAAC,QAAD,EAAW,eAAX,EAA4B,WAA5B,CAAlC;EACD;EAEK,SAAU,gDAAV,CACJ,SADI,EAEJ,aAFI,EAGJ,YAHI,EAIJ,YAJI,EAIuC;EAE3C,MAAM,IAAI,GAAG,SAAS,KAAK,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAA7C;;EACA,+BACE,wBAAwB,CAAC,YAAD,CAD1B;EAAA,MAAQ,KAAR,0BAAQ,KAAR;EAAA,MAAe,MAAf,0BAAe,MAAf;EAAA,MAAuB,KAAvB,0BAAuB,KAAvB;EAAA,MAA8B,IAA9B,0BAA8B,IAA9B;EAAA,MAAoC,KAApC,0BAAoC,KAApC;EAAA,MAA2C,OAA3C,0BAA2C,OAA3C;EAAA,MAAoD,OAApD,0BAAoD,OAApD;EAAA,MAA6D,YAA7D,0BAA6D,YAA7D;EAAA,MAA2E,YAA3E,0BAA2E,YAA3E;EAAA,MAAyF,WAAzF,0BAAyF,WAAzF;;EAEA,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAD,CAAhC;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAD,EAAgB,SAAhB,CAAxB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAD,EAAgB,QAAhB,CAAxB;EACA,MAAM,gBAAgB,GAAG,gBAAgB,CACvC,OAAO,CAAC,aAAD,EAAgB,OAAhB,CADgC,EAEvC,QAFuC,EAGvC,QAHuC,EAIvC,IAAI,GAAG,KAJgC,EAKvC,IAAI,GAAG,MALgC,EAMvC,IAAI,GAAG,KANgC,EAOvC,IAAI,GAAG,IAPgC,EAQvC,IAAI,GAAG,KARgC,EASvC,IAAI,GAAG,OATgC,EAUvC,IAAI,GAAG,OAVgC,EAWvC,IAAI,GAAG,YAXgC,EAYvC,IAAI,GAAG,YAZgC,EAavC,IAAI,GAAG,WAbgC,EAcvC,OAduC,CAAzC;EAgBA,SAAO,2BAA2B,CAAC,gBAAD,EAAmB,QAAnB,EAA6B,QAA7B,CAAlC;EACD;;EAED,SAAS,sBAAT,CAAgC,QAAhC,EAAgD,SAAhD,EAAmE,IAAnE,EAA8F;EAC5F,MAAI,SAAS,KAAK,CAAlB,EAAqB,OAAO,QAAP;;EACrB,kBAA8B,MAAM,CAAC,QAAD,EAAW,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAX,CAApC;EAAA,MAAM,QAAN,aAAM,QAAN;EAAA,MAAgB,SAAhB,aAAgB,SAAhB;;EACA,MAAI,IAAI,CAAC,KAAL,CAAW,SAAX,EAAsB,IAAtB,CAAJ,EAAiC,OAAO,QAAP;EACjC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,IAAzB,IAAiC,CAAC,CAAlC,GAAsC,CAAnD;;EACA,UAAQ,IAAR;EACE,SAAK,MAAL;EACE,UAAI,IAAI,GAAG,CAAX,EAAc,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,QAAT,EAAmB,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAnB,CAAX;EACd;;EACF,SAAK,OAAL;EACE,UAAI,IAAI,GAAG,CAAX,EAAc,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,QAAT,EAAmB,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAnB,CAAX;EACd;;EACF,SAAK,OAAL;EACE;EACA;;EACF,SAAK,YAAL;EACE;EACA,UAAI,IAAI,CAAC,QAAL,CAAc,GAAG,CAAC,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAzB,CAAD,CAAjB,KAAgE,SAApE,EAA+E;EAC7E,QAAA,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,QAAT,EAAmB,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAnB,CAAX;EACD;;EACD;EAfJ;;EAiBA,SAAO,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAxB,CAAP;EACD;;EAEK,SAAU,YAAV,CACJ,OADI,EAEJ,SAFI,EAGJ,IAHI,EAIJ,YAJI,EAI+B;EAEnC;EACA,MAAI,SAAS,GAAG,IAAI,CAAC,SAAL,CAAe,OAAf,EAAwB,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAxB,CAAhB;EACA,MAAI,IAAI,CAAC,QAAL,CAAc,SAAd,EAAyB,IAAzB,CAAJ,EAAoC,SAAS,GAAG,IAAI,CAAC,GAAL,CAAS,SAAT,EAAoB,IAAI,CAAC,MAAL,CAAY,OAAZ,CAApB,CAAZ;EACpC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,SAAvB,CAAlB;EACA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,SAAD,EAAY,aAAa,CAAC,IAAD,CAAb,GAAsB,SAAlC,EAA6C,YAA7C,CAA/C;EACA,SAAO,IAAI,CAAC,GAAL,CAAS,SAAT,EAAoB,gBAApB,CAAP;EACD;EAEK,SAAU,gBAAV,CACJ,SADI,EAEJ,UAFI,EAGJ,QAHI,EAIJ,SAJI,EAKJ,WALI,EAMJ,WANI,EAOJ,gBAPI,EAQJ,gBARI,EASJ,eATI,EAUJ,SAVI,EAWJ,IAXI,EAYJ,YAZI,EAaiB;EAAA,MAArB,WAAqB,0EAAP,OAAO;;EAErB,mBAAkF,SAAS,CACzF,SADyF,EAEzF,WAFyF,EAGzF,WAHyF,EAIzF,gBAJyF,EAKzF,gBALyF,EAMzF,eANyF,EAOzF,SAPyF,EAQzF,IARyF,EASzF,YATyF,EAUzF,WAVyF,CAA3F;EAAA,MAAQ,SAAR,cAAQ,SAAR;EAAA,MAAmB,IAAnB,cAAmB,IAAnB;EAAA,MAAyB,MAAzB,cAAyB,MAAzB;EAAA,MAAiC,MAAjC,cAAiC,MAAjC;EAAA,MAAyC,WAAzC,cAAyC,WAAzC;EAAA,MAAsD,WAAtD,cAAsD,WAAtD;EAAA,MAAmE,UAAnE,cAAmE,UAAnE;;EAYA,yBAA6B,cAAc,CAAC,SAAD,EAAY,UAAZ,EAAwB,QAAQ,GAAG,SAAnC,CAA3C;EAAA,MAAQ,IAAR,oBAAQ,IAAR;EAAA,MAAc,KAAd,oBAAc,KAAd;EAAA,MAAqB,GAArB,oBAAqB,GAArB;;EACA,SAAO;EAAE,IAAA,IAAI,EAAJ,IAAF;EAAQ,IAAA,KAAK,EAAL,KAAR;EAAe,IAAA,GAAG,EAAH,GAAf;EAAoB,IAAA,IAAI,EAAJ,IAApB;EAA0B,IAAA,MAAM,EAAN,MAA1B;EAAkC,IAAA,MAAM,EAAN,MAAlC;EAA0C,IAAA,WAAW,EAAX,WAA1C;EAAuD,IAAA,WAAW,EAAX,WAAvD;EAAoE,IAAA,UAAU,EAAV;EAApE,GAAP;EACD;EAEK,SAAU,SAAV,CACJ,IADI,EAEJ,MAFI,EAGJ,MAHI,EAIJ,WAJI,EAKJ,WALI,EAMJ,UANI,EAOJ,SAPI,EAQJ,IARI,EASJ,YATI,EAUiB;EAAA,MAArB,WAAqB,uEAAP,OAAO;EAErB,MAAI,QAAQ,GAAG,IAAf;;EACA,UAAQ,IAAR;EACE,SAAK,KAAL;EACA,SAAK,MAAL;EACE,MAAA,QAAQ,GAAG,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAX;EACF;;EACA,SAAK,QAAL;EACE,MAAA,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,KAAxB,CAAT,EAAyC,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAzC,CAAX;EACF;;EACA,SAAK,QAAL;EACE,MAAA,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,KAAxB,CAAT,EAAyC,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAzC,CAAX;EACF;;EACA,SAAK,aAAL;EACE,MAAA,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,QAAxB,CAAT,EAA4C,IAAI,CAAC,MAAL,CAAY,WAAZ,CAA5C,CAAX;EACF;;EACA,SAAK,aAAL;EACE,MAAA,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,QAAxB,CAAT,EAA4C,IAAI,CAAC,MAAL,CAAY,WAAZ,CAA5C,CAAX;EACF;;EACA,SAAK,YAAL;EACE,MAAA,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,QAAxB,CAAT,EAA4C,IAAI,CAAC,MAAL,CAAY,UAAZ,CAA5C,CAAX;EAlBJ;;EAoBA,MAAM,SAAS,GAAG,IAAI,KAAK,KAAT,GAAiB,WAAjB,GAA+B,aAAa,CAAC,IAAD,CAA9D;EACA,MAAM,OAAO,GAAG,sBAAsB,CAAC,QAAD,EAAW,SAAS,GAAG,SAAvB,EAAkC,YAAlC,CAAtC;EACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,EAAqB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAArB,CAAd,CAAf;;EACA,UAAQ,IAAR;EACE,SAAK,KAAL;EACE,aAAO;EAAE,QAAA,SAAS,EAAE,MAAb;EAAqB,QAAA,IAAI,EAAE,CAA3B;EAA8B,QAAA,MAAM,EAAE,CAAtC;EAAyC,QAAA,MAAM,EAAE,CAAjD;EAAoD,QAAA,WAAW,EAAE,CAAjE;EAAoE,QAAA,WAAW,EAAE,CAAjF;EAAoF,QAAA,UAAU,EAAE;EAAhG,OAAP;;EACF,SAAK,MAAL;EACE,aAAO,WAAW,CAAC,MAAD,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,CAAlB;;EACF,SAAK,QAAL;EACE,aAAO,WAAW,CAAC,IAAD,EAAO,MAAP,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,CAAlB;;EACF,SAAK,QAAL;EACE,aAAO,WAAW,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,CAAlB;;EACF,SAAK,aAAL;EACE,aAAO,WAAW,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,MAAvB,EAA+B,CAA/B,EAAkC,CAAlC,CAAlB;;EACF,SAAK,aAAL;EACE,aAAO,WAAW,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,WAAvB,EAAoC,MAApC,EAA4C,CAA5C,CAAlB;;EACF,SAAK,YAAL;EACE,aAAO,WAAW,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,EAAuB,WAAvB,EAAoC,WAApC,EAAiD,MAAjD,CAAlB;;EACF;EACE,YAAM,IAAI,KAAJ,wBAA0B,IAA1B,EAAN;EAhBJ;EAkBD;;EAED,SAAS,SAAT,CACE,OADF,EAEE,KAFF,EAE6E;EAE3E,SAAO,iBAAiB,CACtB,OAAO,CAAC,OAAD,EAAU,QAAV,CADe,EAEtB,OAAO,CAAC,OAAD,EAAU,SAAV,CAFe,EAGtB,OAAO,CAAC,OAAD,EAAU,OAAV,CAHe,EAItB,OAAO,CAAC,KAAD,EAAQ,QAAR,CAJe,EAKtB,OAAO,CAAC,KAAD,EAAQ,SAAR,CALe,EAMtB,OAAO,CAAC,KAAD,EAAQ,OAAR,CANe,EAOtB,KAPsB,CAAjB,CAQL,IARF;EASD;;EAED,SAAS,gBAAT,CACE,QADF,EAEE,eAFF,EAGE,QAHF,EAG6B;EAE3B,MAAM,KAAK,GAAG,eAAe,CAAC,QAAD,EAAW,eAAX,EAA4B,QAA5B,EAAsC,SAAtC,CAA7B;EACA,MAAM,IAAI,GAAG,SAAS,CAAC,eAAD,EAAkB,KAAlB,CAAtB;EACA,SAAO;EAAE,IAAA,UAAU,EAAE,KAAd;EAAqB,IAAA,IAAI,EAAJ;EAArB,GAAP;EACD;;EAEK,SAAU,yBAAV,CACJ,UADI,EAEJ,KAFI,EAGJ,MAHI,EAIJ,KAJI,EAKJ,IALI,EAKQ;EAEZ,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,SAAb,CAAxB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAxB;EACA,MAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,UAAD,EAAa,OAAb,CAD8B,EAErC,QAFqC,EAGrC,QAHqC,EAIrC,KAJqC,EAKrC,MALqC,EAMrC,KANqC,EAOrC,IAPqC,EAQrC,CARqC,EASrC,CATqC,EAUrC,CAVqC,EAWrC,CAXqC,EAYrC,CAZqC,EAarC,CAbqC,CAAvC;EAeA,SAAO,2BAA2B,CAAC,cAAD,EAAiB,QAAjB,EAA2B,QAA3B,CAAlC;EACD;EAEK,SAAU,yBAAV,CACJ,UADI,EAEJ,WAFI,EAGJ,UAHI,EAIJ,SAJI,EAKJ,UALI,EAMJ,YANI,EAOJ,YAPI,EAQJ,iBARI,EASJ,iBATI,EAUJ,gBAVI,EAWJ,SAXI,EAYJ,IAZI,EAaJ,YAbI,EAcJ,UAdI,EAcmD;EAEvD,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,YAAY,GAAG,iBAAnB;EACA,MAAI,YAAY,GAAG,iBAAnB;EACA,MAAI,WAAW,GAAG,gBAAlB;;EACA,MACE,CAAC,uBAAuB,CAAC,UAAD,CAAxB,IACA,IAAI,KAAK,MADT,IAEA,IAAI,KAAK,OAFT,IAGA,IAAI,KAAK,MAHT,IAIA,IAAI,KAAK,KAJT,IAKC,IAAI,KAAK,YAAT,IAAyB,SAAS,KAAK,CAN1C,EAOE;EACA,WAAO;EAAE,MAAA,KAAK,EAAL,KAAF;EAAS,MAAA,MAAM,EAAN,MAAT;EAAiB,MAAA,KAAK,EAAL,KAAjB;EAAwB,MAAA,IAAI,EAAJ,IAAxB;EAA8B,MAAA,KAAK,EAAL,KAA9B;EAAqC,MAAA,OAAO,EAAP,OAArC;EAA8C,MAAA,OAAO,EAAP,OAA9C;EAAuD,MAAA,YAAY,EAAZ,YAAvD;EAAqE,MAAA,YAAY,EAAZ,YAArE;EAAmF,MAAA,WAAW,EAAX;EAAnF,KAAP;EACD,GArBsD;EAwBvD;EACA;EACA;EACA;EACA;EACA;EACA;;;EACA,MAAI,eAAe,GAAG,wBAAwB,CAC5C,CAD4C,EAE5C,KAF4C,EAG5C,OAH4C,EAI5C,OAJ4C,EAK5C,YAL4C,EAM5C,YAN4C,EAO5C,WAP4C,EAQ5C,CAR4C,CAA9C;EAUA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAL,CAAc,eAAd,CAAD,CAA1B;EAEA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,SAAb,CAAxB;EACA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAxB;EACA,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,OAAO,CAAC,UAAD,EAAa,OAAb,CADwB,EAE/B,QAF+B,EAG/B,QAH+B,EAI/B,KAJ+B,EAK/B,MAL+B,EAM/B,KAN+B,EAO/B,IAP+B,EAQ/B,CAR+B,EAS/B,CAT+B,EAU/B,CAV+B,EAW/B,CAX+B,EAY/B,CAZ+B,EAa/B,CAb+B,CAAjC;EAeA,MAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,MAAM,MAAM,GAAG,gBAAgB,CAC7B,IAAI,eAAJ,CAAoB,QAApB,CAD6B,EAE7B,QAF6B,EAG7B,QAH6B,EAI7B,CAJ6B,EAK7B,CAL6B,EAM7B,CAN6B,EAO7B,SAP6B,EAQ7B,CAR6B,EAS7B,CAT6B,EAU7B,CAV6B,EAW7B,CAX6B,EAY7B,CAZ6B,EAa7B,CAb6B,CAA/B;EAeA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,MAAd,EAAsB,QAAtB,CAApB;;EAEA,MACE,IAAI,CAAC,kBAAL,CAAwB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,eAAd,EAA+B,WAA/B,CAAd,EAA2D,IAAI,CAAC,MAAL,CAAY,SAAZ,CAA3D,CAAxB,EAA4G,IAA5G,CADF,EAEE;EAAA,wBACkC,WAAW,CAC3C,KAD2C,EAE3C,MAF2C,EAG3C,KAH2C,EAI3C,IAJ2C,EAK3C,CAL2C,EAM3C,CAN2C,EAO3C,CAP2C,EAQ3C,CAR2C,EAS3C,CAT2C,EAU3C,CAV2C,EAW3C,CAX2C,EAY3C,CAZ2C,EAa3C,CAb2C,EAc3C,SAd2C,EAe3C,CAf2C,EAgB3C,CAhB2C,EAiB3C,CAjB2C,EAkB3C,CAlB2C,EAmB3C,CAnB2C,EAoB3C,CApB2C,EAqB3C,UArB2C,CAD7C;;EACG,IAAA,KADH,iBACG,KADH;EACU,IAAA,MADV,iBACU,MADV;EACkB,IAAA,KADlB,iBACkB,KADlB;EACyB,IAAA,IADzB,iBACyB,IADzB;EAwBA,IAAA,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,QAAL,CAAc,eAAd,EAA+B,WAA/B,CAAD,EAA8C,SAA9C,EAAyD,IAAzD,EAA+D,YAA/D,CAA9B;;EAxBA,6BAyBwE,eAAe,CACrF,CADqF,EAErF,CAFqF,EAGrF,CAHqF,EAIrF,CAJqF,EAKrF,CALqF,EAMrF,CANqF,EAOrF,IAAI,CAAC,QAAL,CAAc,eAAd,CAPqF,EAQrF,MARqF,CAzBvF;;EAyBG,IAAA,KAzBH,sBAyBG,KAzBH;EAyBU,IAAA,OAzBV,sBAyBU,OAzBV;EAyBmB,IAAA,OAzBnB,sBAyBmB,OAzBnB;EAyB4B,IAAA,YAzB5B,sBAyB4B,YAzB5B;EAyB0C,IAAA,YAzB1C,sBAyB0C,YAzB1C;EAyBwD,IAAA,WAzBxD,sBAyBwD,WAzBxD;EAmCD;;EACD,SAAO;EAAE,IAAA,KAAK,EAAL,KAAF;EAAS,IAAA,MAAM,EAAN,MAAT;EAAiB,IAAA,KAAK,EAAL,KAAjB;EAAwB,IAAA,IAAI,EAAJ,IAAxB;EAA8B,IAAA,KAAK,EAAL,KAA9B;EAAqC,IAAA,OAAO,EAAP,OAArC;EAA8C,IAAA,OAAO,EAAP,OAA9C;EAAuD,IAAA,YAAY,EAAZ,YAAvD;EAAqE,IAAA,YAAY,EAAZ,YAArE;EAAmF,IAAA,WAAW,EAAX;EAAnF,GAAP;EACD;EAEK,SAAU,aAAV,CACJ,UADI,EAEJ,WAFI,EAGJ,UAHI,EAIJ,SAJI,EAKJ,UALI,EAMJ,YANI,EAOJ,YAPI,EAQJ,iBARI,EASJ,iBATI,EAUJ,gBAVI,EAWJ,SAXI,EAYJ,IAZI,EAaJ,YAbI,EAcoE;EAAA,MAAxE,eAAwE,0EAAT,SAAS;EAExE,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,IAAI,GAAG,SAAX;EACA,MAAI,KAAK,GAAG,UAAZ;EACA,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,OAAO,GAAG,YAAd;EACA,MAAI,YAAY,GAAG,iBAAnB;EACA,MAAI,YAAY,GAAG,iBAAnB;EACA,MAAI,WAAW,GAAG,IAAI,CAAC,MAAL,CAAY,gBAAZ,CAAlB;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,MAAI,QAAJ,EAAc,WAAd,CAbwE;EAexE;EACA;EACA;;EACA,MAAI,UAAU,GAAG,eAAjB;;EACA,MAAI,UAAJ,EAAgB;EACd,QAAI,uBAAuB,CAAC,UAAD,CAA3B,EAAyC;EACvC,MAAA,WAAW,GAAG,UAAd;EACA,MAAA,UAAU,GAAG,cAAc,CAAC,UAAD,CAA3B;EACD,KAHD,MAGO,IAAI,CAAC,cAAc,CAAC,UAAD,CAAnB,EAAiC;EACtC,YAAM,IAAI,SAAJ,CAAc,mDAAd,CAAN;EACD;;EACD,IAAA,QAAQ,GAAG,OAAO,CAAC,UAAD,EAAa,QAAb,CAAlB;EACD,GA3BuE;EA8BxE;EACA;EACA;;;EACA,MAAI,WAAJ;;EACA,MAAI,IAAI,KAAK,MAAT,IAAmB,IAAI,KAAK,OAA5B,IAAuC,IAAI,KAAK,MAAhD,IAA0D,IAAI,KAAK,KAAvE,EAA8E;EAC5E,IAAA,WAAW,GAAG,wBAAwB,CAAC,CAAD,EAAI,KAAJ,EAAW,OAAX,EAAoB,OAApB,EAA6B,YAA7B,EAA2C,YAA3C,EAAyD,gBAAzD,EAA2E,CAA3E,CAAtC;EACA,QAAI,YAAJ;;EACA,QAAI,WAAJ,EAAiB;EACf,MAAA,YAAY,GAAG,yBAAyB,CAAC,WAAD,EAAc,KAAd,EAAqB,MAArB,EAA6B,KAA7B,EAAoC,IAApC,CAAxC;EACD;;EACD,QAAI,SAAJ;EACA,QAAI,SAAJ;;EAP4E,8BAQhB,iBAAiB,CAAC,WAAD,EAAc,YAAd,CARD;;EAQnE,IAAA,SARmE,uBAQzE,IARyE;EAQxD,IAAA,WARwD,uBAQxD,WARwD;EAQ9B,IAAA,SAR8B,uBAQ3C,WAR2C;EAS5E,IAAA,WAAW,GAAG,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAd;EACA,IAAA,IAAI,IAAI,SAAR;EACA,IAAA,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,CAA1D;EACD;;EAED,MAAI,KAAJ;;EACA,UAAQ,IAAR;EACE,SAAK,MAAL;EAAa;EACX,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,iDAAf,CAAN,CADJ;EAIX;;EACA,YAAM,aAAa,GAAG,IAAI,gBAAJ,CAAqB,KAArB,CAAtB;EACA,YAAM,OAAO,GAAG,QAAQ,CAAC,OAAzB;EACA,YAAM,UAAU,GAAG,eAAe,CAAC,QAAD,EAAW,UAAX,EAA6C,aAA7C,EAA4D,SAA5D,EAAuE,OAAvE,CAAlC;EACA,YAAM,gBAAgB,GAAG,IAAI,gBAAJ,CAAqB,KAArB,EAA4B,MAA5B,EAAoC,KAApC,CAAzB;EACA,YAAM,qBAAqB,GAAG,eAAe,CAC3C,QAD2C,EAE3C,UAF2C,EAG3C,gBAH2C,EAI3C,SAJ2C,EAK3C,OAL2C,CAA7C;EAOA,YAAM,iBAAiB,GAAG,SAAS,CAAC,UAAD,EAAa,qBAAb,CAAnC;EACA,QAAA,UAAU,GAAG,UAAb;EACA,QAAA,IAAI,IAAI,iBAAR;EAEA,YAAM,SAAS,GAAG,eAAe,CAAC,QAAD,EAAW,UAAX,EAAuB;EAAE,UAAA,IAAI,EAAJ;EAAF,SAAvB,EAAiC,SAAjC,EAA4C,OAA5C,CAAjC;EACA,YAAM,YAAY,GAAGA,cAAY,CAAC,IAAD,CAAjC;EACA,QAAA,YAAY,CAAC,WAAb,GAA2B,MAA3B;EACA,YAAM,WAAW,GAAG,iBAAiB,CAAC,QAAD,EAAW,UAAX,EAAuB,SAAvB,EAAkC,YAAlC,CAAjB,CAAiE,KAArF;EACA,QAAA,KAAK,IAAI,WAAT;EACA,YAAM,aAAa,GAAG,UAAtB;EACA,QAAA,UAAU,GAAG,eAAe,CAAC,QAAD,EAAW,UAAX,EAAuB;EAAE,UAAA,KAAK,EAAE;EAAT,SAAvB,EAA+C,SAA/C,EAA0D,OAA1D,CAA5B;EACA,YAAM,UAAU,GAAG,SAAS,CAAC,aAAD,EAAgB,UAAhB,CAA5B;EACA,QAAA,IAAI,IAAI,UAAR;EACA,YAAM,OAAO,GAAG,IAAI,gBAAJ,CAAqB,IAAI,GAAG,CAAP,GAAW,CAAC,CAAZ,GAAgB,CAArC,CAAhB;;EACA,kCAA4B,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,OAAvB,CAA5C;EAAA,YAAY,WAAZ,uBAAM,IAAN,CA9BW;EAiCX;EACA;EACA;EACA;EACA;;;EACA,QAAA,WAAW,GAAGH,SAAO,CAAC,WAAD,CAArB,CAtCW;EAwCX;;EACA,YAAM,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,WAAZ,CAAd,EAAwC,WAAxC,CAAhB;EACA,QAAA,WAAW,GAAG,IAAI,CAAC,GAAL;EAEZ,QAAA,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,KAAZ,CAAvB,CAAT,EAAqD,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAd,EAAiC,WAAjC,CAArD,CAFY,EAGZ,WAHY,CAAd;EAKA,YAAM,OAAO,GAAG,sBAAsB,CACpC,WADoC,EAEpC,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAvB,CAAd,CAFoC,EAGpC,YAHoC,CAAtC;EAKA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,IAA6B,IAAI,CAAC,QAAL,CAAc,OAAd,CAArC;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,EAAqB,OAArB,CAAd,CAAR;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,CAAxB;EACA;EACD;;EACD,SAAK,OAAL;EAAc;EACZ,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN,CADH;EAIZ;;EACA,YAAM,WAAW,GAAG,IAAI,gBAAJ,CAAqB,KAArB,EAA4B,MAA5B,CAApB;EACA,YAAM,QAAO,GAAG,QAAQ,CAAC,OAAzB;EACA,YAAM,gBAAgB,GAAG,eAAe,CACtC,QADsC,EAEtC,UAFsC,EAGtC,WAHsC,EAItC,SAJsC,EAKtC,QALsC,CAAxC;;EAOA,YAAM,iBAAgB,GAAG,IAAI,gBAAJ,CAAqB,KAArB,EAA4B,MAA5B,EAAoC,KAApC,CAAzB;;EACA,YAAM,sBAAqB,GAAG,eAAe,CAC3C,QAD2C,EAE3C,UAF2C,EAG3C,iBAH2C,EAI3C,SAJ2C,EAK3C,QAL2C,CAA7C;;EAOA,YAAM,WAAW,GAAG,SAAS,CAAC,gBAAD,EAAmB,sBAAnB,CAA7B;EACA,QAAA,UAAU,GAAG,gBAAb;EACA,QAAA,IAAI,IAAI,WAAR,CAxBY;EA2BZ;;EACA,YAAM,IAAI,GAAG,QAAQ,CAAC,IAAD,CAArB;EACA,YAAM,QAAQ,GAAG,IAAI,gBAAJ,CAAqB,CAArB,EAAwB,IAAI,GAAG,CAAP,GAAW,CAAC,CAAZ,GAAgB,CAAxC,CAAjB;EACA,YAAI,YAAJ;;EA9BY,kCA+B0B,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,QAAvB,CA/B1C;;EA+BT,QAAA,UA/BS,uBA+BT,UA/BS;EA+BS,QAAA,YA/BT,uBA+BG,IA/BH;;EAgCZ,eAAOA,SAAO,CAAC,IAAD,CAAP,IAAiBA,SAAO,CAAC,YAAD,CAA/B,EAA+C;EAC7C,UAAA,MAAM,IAAI,IAAV;EACA,UAAA,IAAI,IAAI,YAAR;;EAF6C,oCAGP,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,QAAvB,CAHT;;EAG1C,UAAA,UAH0C,uBAG1C,UAH0C;EAGxB,UAAA,YAHwB,uBAG9B,IAH8B;EAI9C;;EACD,QAAA,YAAY,GAAGA,SAAO,CAAC,YAAD,CAAtB,CArCY;EAuCZ;;EACA,YAAM,QAAO,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,WAAzC,CAAhB;;EACA,QAAA,WAAW,GAAG,IAAI,CAAC,GAAL;EAEZ,QAAA,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAvB,CAAT,EAAsD,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAd,EAAiC,WAAjC,CAAtD,CAFY,EAGZ,WAHY,CAAd;;EAKA,YAAM,QAAO,GAAG,sBAAsB,CACpC,WADoC,EAEpC,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,QAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAvB,CAAd,CAFoC,EAGpC,YAHoC,CAAtC;;EAKA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,IAA6B,IAAI,CAAC,QAAL,CAAc,QAAd,CAArC;EACA,QAAA,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,QAAZ,EAAqB,QAArB,CAAd,CAAT;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,KAAK,GAAG,IAAI,GAAG,CAAf;EACA;EACD;;EACD,SAAK,MAAL;EAAa;EACX,YAAI,CAAC,QAAL,EAAe,MAAM,IAAI,UAAJ,CAAe,iDAAf,CAAN,CADJ;EAGX;;EACA,YAAM,MAAI,GAAG,QAAQ,CAAC,IAAD,CAArB;;EACA,YAAM,OAAO,GAAG,IAAI,gBAAJ,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,IAAI,GAAG,CAAP,GAAW,CAAC,CAAZ,GAAgB,CAA3C,CAAhB;EACA,YAAI,WAAJ;;EANW,kCAO0B,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAA6C,OAA7C,CAP1C;;EAOR,QAAA,UAPQ,uBAOR,UAPQ;EAOU,QAAA,WAPV,uBAOI,IAPJ;;EAQX,eAAOA,SAAO,CAAC,IAAD,CAAP,IAAiBA,SAAO,CAAC,WAAD,CAA/B,EAA8C;EAC5C,UAAA,KAAK,IAAI,MAAT;EACA,UAAA,IAAI,IAAI,WAAR;;EAF4C,oCAGP,gBAAgB,CAAC,QAAD,EAAW,UAAX,EAAuB,OAAvB,CAHT;;EAGzC,UAAA,UAHyC,uBAGzC,UAHyC;EAGvB,UAAA,WAHuB,uBAG7B,IAH6B;EAI7C;;EACD,QAAA,WAAW,GAAGA,SAAO,CAAC,WAAD,CAArB,CAbW;EAeX;;EACA,YAAM,SAAO,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,WAAZ,CAAd,EAAwC,WAAxC,CAAhB;;EACA,QAAA,WAAW,GAAG,IAAI,CAAC,GAAL;EAEZ,QAAA,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,SAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,KAAZ,CAAvB,CAAT,EAAqD,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAd,EAAiC,WAAjC,CAArD,CAFY,EAGZ,WAHY,CAAd;;EAKA,YAAM,SAAO,GAAG,sBAAsB,CACpC,WADoC,EAEpC,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,SAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAvB,CAAd,CAFoC,EAGpC,YAHoC,CAAtC;;EAKA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,IAA6B,IAAI,CAAC,QAAL,CAAc,SAAd,CAArC;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,SAArB,CAAd,CAAR;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,IAAI,GAAG,CAAP;EACA;EACD;;EACD,SAAK,KAAL;EAAY;EACV;EACA;EACA,YAAM,SAAO,GAAG,WAAhB;EACA,QAAA,WAAW,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,SAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAvB,CAAT,EAAoD,WAApD,CAAd;;EACA,YAAM,SAAO,GAAG,sBAAsB,CACpC,WADoC,EAEpC,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,SAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAvB,CAAd,CAFoC,EAGpC,YAHoC,CAAtC;;EAKA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,IAA6B,IAAI,CAAC,QAAL,CAAc,SAAd,CAArC;EACA,QAAA,IAAI,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,SAArB,CAAd,CAAP;EACA,QAAA,WAAW,GAAG,IAAd;EACA;EACD;;EACD,SAAK,MAAL;EAAa;EACX,YAAM,SAAO,GAAG,MAAhB;EACA,YAAI,cAAc,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,KAAZ,CAAd,EAAkC,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAlC,CAArB;EACA,QAAA,cAAc,GAAG,IAAI,CAAC,GAAL,CAAS,cAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAd,EAAoC,IAAI,CAAC,MAAL,CAAY,IAAZ,CAApC,CAAzB,CAAjB;EACA,QAAA,cAAc,GAAG,IAAI,CAAC,GAAL,CAAS,cAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAd,EAAoC,OAApC,CAAzB,CAAjB;EACA,QAAA,cAAc,GAAG,IAAI,CAAC,GAAL,CAAS,cAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,OAAzC,CAAzB,CAAjB;EACA,QAAA,cAAc,GAAG,IAAI,CAAC,GAAL,CAAS,cAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,QAAzC,CAAzB,CAAjB;EACA,QAAA,cAAc,GAAG,IAAI,CAAC,GAAL,CAAS,cAAT,EAAyB,WAAzB,CAAjB;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,cAAd,IAAgC,SAAxC;;EACA,YAAM,SAAO,GAAG,sBAAsB,CAAC,cAAD,EAAiB,SAAO,GAAG,SAA3B,EAAsC,YAAtC,CAAtC;;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAArB,CAAd,CAAR;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,CAAlD;EACA;EACD;;EACD,SAAK,QAAL;EAAe;EACb,YAAM,SAAO,GAAG,IAAhB;;EACA,YAAI,eAAc,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAd,EAAoC,IAAI,CAAC,MAAL,CAAY,IAAZ,CAApC,CAArB;;EACA,QAAA,eAAc,GAAG,IAAI,CAAC,GAAL,CAAS,eAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAd,EAAoC,OAApC,CAAzB,CAAjB;EACA,QAAA,eAAc,GAAG,IAAI,CAAC,GAAL,CAAS,eAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,OAAzC,CAAzB,CAAjB;EACA,QAAA,eAAc,GAAG,IAAI,CAAC,GAAL,CAAS,eAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,QAAzC,CAAzB,CAAjB;EACA,QAAA,eAAc,GAAG,IAAI,CAAC,GAAL,CAAS,eAAT,EAAyB,WAAzB,CAAjB;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,eAAd,IAAgC,SAAxC;;EACA,YAAM,SAAO,GAAG,sBAAsB,CAAC,eAAD,EAAiB,SAAO,GAAG,SAA3B,EAAsC,YAAtC,CAAtC;;EACA,QAAA,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAArB,CAAd,CAAV;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,CAAxC;EACA;EACD;;EACD,SAAK,QAAL;EAAe;EACb,YAAM,SAAO,GAAG,GAAhB;;EACA,YAAI,gBAAc,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAd,EAAoC,OAApC,CAArB;;EACA,QAAA,gBAAc,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,OAAzC,CAAzB,CAAjB;EACA,QAAA,gBAAc,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,QAAzC,CAAzB,CAAjB;EACA,QAAA,gBAAc,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAAyB,WAAzB,CAAjB;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,gBAAd,IAAgC,SAAxC;;EACA,YAAM,SAAO,GAAG,sBAAsB,CAAC,gBAAD,EAAiB,SAAO,GAAG,SAA3B,EAAsC,YAAtC,CAAtC;;EACA,QAAA,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAArB,CAAd,CAAV;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,YAAY,GAAG,YAAY,GAAG,CAA9B;EACA;EACD;;EACD,SAAK,aAAL;EAAoB;EAClB,YAAM,SAAO,GAAG,GAAhB;;EACA,YAAI,gBAAc,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,OAAzC,CAArB;;EACA,QAAA,gBAAc,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,QAAzC,CAAzB,CAAjB;EACA,QAAA,gBAAc,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAAyB,WAAzB,CAAjB;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,gBAAd,IAAgC,SAAxC;;EACA,YAAM,SAAO,GAAG,sBAAsB,CAAC,gBAAD,EAAiB,SAAO,GAAG,SAA3B,EAAsC,YAAtC,CAAtC;;EACA,QAAA,YAAY,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAArB,CAAd,CAAf;EACA,QAAA,WAAW,GAAG,IAAd;EACA,QAAA,YAAY,GAAG,CAAf;EACA;EACD;;EACD,SAAK,aAAL;EAAoB;EAClB,YAAM,SAAO,GAAG,GAAhB;;EACA,YAAI,gBAAc,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,QAAzC,CAArB;;EACA,QAAA,gBAAc,GAAG,IAAI,CAAC,GAAL,CAAS,gBAAT,EAAyB,WAAzB,CAAjB;EACA,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,gBAAd,IAAgC,SAAxC;;EACA,YAAM,SAAO,GAAG,sBAAsB,CAAC,gBAAD,EAAiB,SAAO,GAAG,SAA3B,EAAsC,YAAtC,CAAtC;;EACA,QAAA,YAAY,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,SAAZ,EAAqB,IAAI,CAAC,MAAL,CAAY,SAAZ,CAArB,CAAd,CAAf;EACA,QAAA,WAAW,GAAG,IAAd;EACA;EACD;;EACD,SAAK,YAAL;EAAmB;EACjB,QAAA,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,WAAd,CAAR;EACA,QAAA,WAAW,GAAG,sBAAsB,CAAC,WAAD,EAAc,SAAd,EAAyB,YAAzB,CAApC;EACA;EACD;EAxOH;;EA0OA,SAAO;EACL,IAAA,KAAK,EAAL,KADK;EAEL,IAAA,MAAM,EAAN,MAFK;EAGL,IAAA,KAAK,EAAL,KAHK;EAIL,IAAA,IAAI,EAAJ,IAJK;EAKL,IAAA,KAAK,EAAL,KALK;EAML,IAAA,OAAO,EAAP,OANK;EAOL,IAAA,OAAO,EAAP,OAPK;EAQL,IAAA,YAAY,EAAZ,YARK;EASL,IAAA,YAAY,EAAZ,YATK;EAUL,IAAA,WAAW,EAAE,IAAI,CAAC,QAAL,CAAc,WAAd,CAVR;EAWL,IAAA,KAAK,EAAL;EAXK,GAAP;EAaD;EAEK,SAAU,cAAV,CAAyB,EAAzB,EAAqC,EAArC,EAAiD,EAAjD,EAA6D,EAA7D,EAAyE,EAAzE,EAAqF,EAArF,EAA+F;EACnG,4BAAqB,CACnB,CAAC,EAAD,EAAK,EAAL,CADmB,EAEnB,CAAC,EAAD,EAAK,EAAL,CAFmB,EAGnB,CAAC,EAAD,EAAK,EAAL,CAHmB,CAArB,6BAIG;EAJE;EAAA,QAAO,CAAP;EAAA,QAAU,CAAV;;EAKH,QAAI,CAAC,KAAK,CAAV,EAAa,OAAO,gBAAgB,CAAC,CAAC,GAAG,CAAL,CAAvB;EACd;;EACD,SAAO,CAAP;EACD;;EAED,SAAS,iBAAT,CAA2B,CAA3B,EAAsC,CAAtC,EAA+C;EAC7C,MAAI,MAAM,GAAG,CAAC,GAAG,CAAjB;EACA,MAAI,QAAQ,CAAC,MAAD,EAAS,CAAC,CAAV,CAAZ,EAA0B,OAAO,CAAP;EAC1B,MAAI,MAAM,GAAG,CAAb,EAAgB,MAAM,IAAI,CAAV;EAChB,SAAO,MAAP;EACD;;EAUK,SAAU,gBAAV,CAA2B,GAA3B,EAAuC;EAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAD,CAAvB;EACA,MAAI,OAAQ,UAAkB,CAAC,MAA3B,KAAsC,WAA1C,EAAuD,OAAQ,UAAkB,CAAC,MAAnB,CAA0B,MAAM,CAAC,QAAP,CAAgB,EAAhB,CAA1B,CAAR;EACvD,SAAO,MAAP;EACD;EAEK,SAAU,QAAV,CAAmB,GAAnB,EAA+B;EACnC,MAAI,GAAG,YAAY,IAAnB,EAAyB;EACvB,WAAO,GAAP;EACD;;EAED,MAAI,IAAI,GAAG,GAAX;;EACA,MAAI,QAAO,GAAP,MAAe,QAAnB,EAA6B;EAC3B,QAAM,QAAQ,GAAI,GAAyC,CAAC,MAAM,CAAC,WAAR,CAA3D;;EACA,QAAI,QAAQ,IAAI,OAAO,QAAP,KAAoB,UAApC,EAAgD;EAC9C,MAAA,IAAI,GAAGI,cAAY,CAAC,QAAD,EAAW,GAAX,EAAgB,CAAC,QAAD,CAAhB,CAAnB;EACD;EACF;;EACD,kBAAe,IAAf;EACE,SAAK,WAAL;EACA,SAAK,QAAL;EACA,SAAK,QAAL;EACA,SAAK,QAAL;EACA;EACE,YAAM,IAAI,SAAJ,kCAAuC,GAAvC,iBAAN;;EACF,SAAK,QAAL;EACE,UAAI,CAAC,IAAI,CAAC,KAAL,CAAW,uBAAX,CAAL,EAA0C;EACxC,cAAM,IAAI,WAAJ,CAAgB,uBAAhB,CAAN;EACD;;EACH;;EACA,SAAK,QAAL;EACE,UAAI;EACF,eAAO,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,QAAL,EAAZ,CAAP;EACD,OAFD,CAEE,OAAO,CAAP,EAAmB;EACnB,YAAI,CAAC,YAAY,KAAb,IAAsB,CAAC,CAAC,OAAF,CAAU,UAAV,CAAqB,iBAArB,CAA1B,EAAmE,MAAM,IAAI,WAAJ,CAAgB,CAAC,CAAC,OAAlB,CAAN;EACnE,cAAM,CAAN;EACD;;EACH,SAAK,SAAL;EACE,UAAI,IAAJ,EAAU;EACR,eAAO,GAAP;EACD,OAFD,MAEO;EACL,eAAO,IAAP;EACD;;EAxBL;EA0BD;EAGD;EACA;;EACO,IAAM,yBAAyB,GAAgB,YAAK;EACzD,MAAI,EAAE,GAAG,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,GAAL,KAAa,GAAzB,CAAT;EACA,SAAO,YAAK;EACV,QAAM,EAAE,GAAG,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,GAAL,EAAZ,CAAX;EACA,QAAM,MAAM,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,QAAL,CAAc,EAAd,EAAkB,OAAlB,CAAT,EAAqC,EAArC,CAAf;EACA,IAAA,EAAE,GAAG,IAAI,CAAC,SAAL,CAAe,EAAf,EAAmB,OAAnB,CAAL;EACA,QAAI,IAAI,CAAC,WAAL,CAAiB,MAAjB,EAAyB,MAAzB,CAAJ,EAAsC,OAAO,MAAP;EACtC,QAAI,IAAI,CAAC,QAAL,CAAc,MAAd,EAAsB,MAAtB,CAAJ,EAAmC,OAAO,MAAP;EACnC,WAAO,MAAP;EACD,GAPD;EAQD,CAVoD,EAA9C;EAYD,SAAU,cAAV,GAAwB;EAC5B,MAAM,GAAG,GAAG,IAAIL,oBAAJ,CAAuB,OAAvB,CAAZ;EACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,qBAAD,CAArC;EACA,SAAO,IAAI,gBAAJ,CAAqB,qBAAqB,CAAC,GAAG,CAAC,eAAJ,GAAsB,QAAvB,CAA1C,CAAP;EACD;EAEK,SAAU,gBAAV,CAA2B,KAA3B,EAAwC;EAC5C,SAAO,KAAK,GAAG,CAAR,GAAY,CAAC,CAAb,GAAiB,KAAK,GAAG,CAAR,GAAY,CAAZ,GAAiB,KAAzC;EACD;EAEK,SAAU,gBAAV,CAA8B,OAA9B,EAAwC;EAC5C,MAAI,OAAO,KAAK,SAAhB,EAA2B,OAAOI,cAAY,CAAC,IAAD,CAAnB;EAC3B,MAAI,QAAQ,CAAC,OAAD,CAAR,IAAqB,OAAO,KAAK,IAArC,EAA2C,OAAO,OAAP;EAC3C,QAAM,IAAI,SAAJ,oDAA0D,OAAO,KAAK,IAAZ,GAAmB,MAAnB,qBAAsC,OAAtC,EAA1D,EAAN;EACD;EAEK,SAAU,mBAAV,CAAmD,QAAnD,EAAgE,SAAhE,EAA4E;EAChF,MAAM,CAAC,GAAGA,cAAY,CAAC,IAAD,CAAtB;EACA,EAAA,CAAC,CAAC,QAAD,CAAD,GAAc,SAAd;EACA,SAAO,CAAP;EACD;;EAmBD,SAAS,SAAT,CAKE,OALF,EAME,QANF,EAOE,aAPF,EAQE,QARF,EAQgB;EAEd,MAAI,KAAK,GAAG,OAAO,CAAC,QAAD,CAAnB;;EACA,MAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAD,CAAhB;;EACA,QAAI,CAAC,aAAa,CAAC,QAAd,CAAuB,KAAvB,CAAL,EAAoC;EAClC,YAAM,IAAI,UAAJ,WAAkB,QAAlB,6BAA6C,aAAa,CAAC,IAAd,CAAmB,IAAnB,CAA7C,mBAA8E,KAA9E,EAAN;EACD;;EACD,WAAO,KAAP;EACD;;EACD,SAAO,QAAP;EACD;;EAED,SAAS,eAAT,CACE,OADF,EAEE,QAFF,EAGE,OAHF,EAIE,OAJF,EAKE,QALF,EAKkB;EAEhB,MAAI,QAAQ,GAAG,OAAO,CAAC,QAAD,CAAtB;EACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B,OAAO,QAAP;EAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAD,CAAtB;;EACA,MAAI,WAAW,CAAC,KAAD,CAAX,IAAsB,KAAK,GAAG,OAA9B,IAAyC,KAAK,GAAG,OAArD,EAA8D;EAC5D,UAAM,IAAI,UAAJ,WAAkB,MAAM,CAAC,QAAD,CAAxB,8BAAsD,OAAtD,kBAAqE,OAArE,mBAAqF,KAArF,EAAN;EACD;;EACD,SAAOF,WAAS,CAAC,KAAD,CAAhB;EACD;;EAEK,SAAU,iBAAV,CAA4B,EAA5B,EAAsC;EAC1C,SAAOJ,eAAa,CAAC,IAAd,CAAmB,oBAAnB,EAAyC,EAAzC,CAAP;EACD;EAED,IAAM,MAAM,GAAG,IAAI,MAAJ,YAAea,MAAA,CAAa,MAA5B,OAAf;;EAEA,SAAS,MAAT,CACE,QADF,EAEE,SAFF,EAGE,UAHF,EAK4C;EAAA,MAD1C,WAC0C,uEADpB,QAAQ,CAAC,SAAD,CACY;EAAA,MAA1C,WAA0C,uEAApB,QAAQ,CAAC,UAAD,CAAY;EAE1C;EACA,MAAI,IAAI,GAAG,IAAI,CAAC,MAAL,CAAY,SAAZ,CAAX;EACA,MAAI,KAAK,GAAG,IAAI,CAAC,MAAL,CAAY,UAAZ,CAAZ;EACA,MAAI,MAAM,GAAG,WAAb;EACA,MAAI,MAAM,GAAG,WAAb;;EACA,SAAO,IAAI,CAAC,WAAL,CAAiB,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,IAArB,CAAjB,EAA6C,GAA7C,CAAP,EAA0D;EACxD,QAAM,MAAM,GAAG,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,GAAL,CAAS,IAAT,EAAe,KAAf,CAAZ,EAAmC,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAnC,CAAf;EACA,QAAM,MAAM,GAAG,QAAQ,CAAC,MAAD,CAAvB;;EACA,QAAI,MAAM,KAAK,MAAf,EAAuB;EACrB,MAAA,IAAI,GAAG,MAAP;EACA,MAAA,MAAM,GAAG,MAAT;EACD,KAHD,MAGO,IAAI,MAAM,KAAK,MAAf,EAAuB;EAC5B,MAAA,KAAK,GAAG,MAAR;EACA,MAAA,MAAM,GAAG,MAAT;EACD,KAHM,MAGA;EACL,YAAM,IAAI,KAAJ,sCAAwC,MAAxC,gBAAoD,MAApD,gBAAgE,MAAhE,EAAN;EACD;EACF;;EACD,SAAO,KAAP;EACD;;EAED,IAAM,aAAa,GAAG;EACpB,EAAA,IAAI,EAAE,MADc;EAEpB,EAAA,MAAM,EAAE,IAFY;EAGpB,EAAA,MAAM,EAAE,GAHY;EAIpB,EAAA,WAAW,EAAE,GAJO;EAKpB,EAAA,WAAW,EAAE,GALO;EAMpB,EAAA,UAAU,EAAE;EANQ,CAAtB;;ECx7LA,IAAM,IAAI,GAAG,MAAM,CAAC,MAAD,CAAnB;EACA,IAAM,EAAE,GAAG,MAAM,CAAC,IAAD,CAAjB;EACA,IAAM,EAAE,GAAG,MAAM,CAAC,IAAD,CAAjB;EACA,IAAM,IAAI,GAAG,MAAM,CAAC,MAAD,CAAnB;EACA,IAAM,QAAQ,GAAG,MAAM,CAAC,UAAD,CAAvB;EACA,IAAM,KAAK,GAAG,MAAM,CAAC,eAAD,CAApB;EACA,IAAM,IAAI,GAAG,MAAM,CAAC,SAAD,CAAnB;EACA,IAAM,QAAQ,GAAG,MAAM,CAAC,UAAD,CAAvB;EACA,IAAM,WAAW,GAAG,MAAM,CAAC,UAAD,CAA1B;EACA,IAAM,QAAQ,GAAG,MAAM,CAAC,mBAAD,CAAvB;EACA,IAAM,MAAM,GAAG,MAAM,CAAC,aAAD,CAArB;EACA,IAAM,MAAM,GAAG,MAAM,CAAC,QAAD,CAArB;EACA,IAAM,OAAO,GAAG,MAAM,CAAC,SAAD,CAAtB;;EAEA,IAAMC,YAAU,GAAG,SAAb,UAAa,CAAoC,KAApC,EAAgD;EACjE,SAAO;EACL,IAAA,KAAK,EAAL,KADK;EAEL,IAAA,UAAU,EAAE,IAFP;EAGL,IAAA,QAAQ,EAAE,KAHL;EAIL,IAAA,YAAY,EAAE;EAJT,GAAP;EAMD,CAPD;;EASA,IAAMZ,oBAAkB,GAAG,UAAU,CAAC,IAAX,CAAgB,cAA3C;EACA,IAAMG,cAAY,GAAG,MAAM,CAAC,MAA5B;EACA,IAAM,oBAAoB,GAAG,MAAM,CAAC,SAAP,CAAiB,cAA9C;EACA,IAAM,YAAY,GAAG,OAAO,CAAC,KAA7B;EAyBA;EACA;;EACA,SAAS,WAAT,CACE,GADF,EAEE,IAFF,EAES;EAEP,MAAI,GAAG,GAAG,GAAG,CAAC,IAAD,CAAb;;EACA,MAAI,OAAO,GAAP,KAAe,UAAnB,EAA+B;EAC7B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAA,GAAG,GAAG,IAAIH,oBAAJ,CAAuB,GAAG,CAAC,MAAD,CAA1B,EAAoC,GAAG,CAAC,GAAG,CAAC,OAAD,CAAJ,CAAvC,CAAN,CAR6B;;EAU5B,IAAA,GAAG,CAAC,IAAD,CAAH,GAA+C,GAA/C;EACF;;EACD,SAAO,GAAP;EACD;;;EAGD,SAAS,uBAAT,CAAiC,GAAjC,EAAkD;EAChD,MAAI,GAAG,GAAG,GAAG,CAAC,WAAD,CAAb;;EACA,MAAI,OAAO,GAAP,KAAe,QAAnB,EAA6B;EAC3B,IAAA,GAAG,GAAGa,kBAAA,CAAsB,GAAtB,CAAN;EACA,IAAA,GAAG,CAAC,WAAD,CAAH,GAAmB,GAAnB;EACD;;EACD,SAAO,GAAP;EACD;;EAID,SAAS,kBAAT,GAG6C;EAAA,MAD3C,MAC2C,uEADR,SACQ;EAAA,MAA3C,YAA2C,uEAAF,EAAE;;EAE3C,MAAI,EAAE,gBAAgB,kBAAlB,CAAJ,EAA2C;EAKzC,WAAO,IAAK,kBAAL,CAAiD,MAAjD,EAAyD,YAAzD,CAAP;EACD;;EACD,MAAM,UAAU,GAAG,OAAO,YAAP,KAAwB,WAA3C;EACA,MAAM,OAAO,GAAG,UAAU,GAAGV,cAAY,CAAC,EAAD,EAAK,YAAL,CAAf,GAAoC,EAA9D,CAV2C;;EAY3C,MAAM,QAAQ,GAAG,IAAIH,oBAAJ,CAAuB,MAAvB,EAA+B,OAA/B,CAAjB;EACA,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAT,EAAX,CAb2C;EAgB3C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,MAAI,UAAJ,EAAgB;EACd,QAAM,cAAc,GAAGG,cAAY,CAAC,EAAD,EAAK,EAAL,CAAnC;;EACA,SAAK,IAAM,IAAX,IAAmB,cAAnB,EAAmC;EACjC,UAAI,CAAC,YAAY,CAAC,oBAAD,EAAuB,OAAvB,EAAgC,CAAC,IAAD,CAAhC,CAAjB,EAA0D;EACxD,eAAO,cAAc,CAAC,IAAD,CAArB;EACD;EACF;;EACD,SAAK,OAAL,IAAgB,cAAhB;EACD,GARD,MAQO;EACL,SAAK,OAAL,IAAgB,OAAhB;EACD;;EAED,OAAK,QAAL,IAAiB,OAAO,CAAC,QAAR,GAAmB,OAAO,CAAC,QAA3B,GAAsC,IAAvD;EACA,OAAK,MAAL,IAAe,EAAE,CAAC,MAAlB;EACA,OAAK,QAAL,IAAiB,QAAjB;EACA,OAAK,WAAL,IAAoB,EAAE,CAAC,QAAvB;EACA,OAAK,MAAL,IAAe,EAAE,CAAC,QAAlB;EACA,OAAK,IAAL,IAAa,SAAb;EACA,OAAK,EAAL,IAAW,cAAX;EACA,OAAK,EAAL,IAAW,aAAX;EACA,OAAK,IAAL,IAAa,SAAb;EACA,OAAK,QAAL,IAAiB,aAAjB;EACA,OAAK,KAAL,IAAc,kBAAd;EACA,OAAK,IAAL,IAAa,YAAb;EACA,SAAO,SAAP,CAnD2C;EAoD5C;;EAED,MAAM,CAAC,cAAP,CAAsB,kBAAtB,EAA0C,MAA1C,EAAkD;EAChD,EAAA,QAAQ,EAAE,IADsC;EAEhD,EAAA,KAAK,EAAE;EAFyC,CAAlD;;EAKA,kBAAkB,CAAC,kBAAnB,GAAwC,UACtC,OADsC,EAEtC,OAFsC,EAEE;EAExC,SAAOH,oBAAkB,CAAC,kBAAnB,CAAsC,OAAtC,EAA+C,OAA/C,CAAP;EACD,CALD;;EAOA,IAAM,mBAAmB,GAAmE;EAC1F,EAAA,eAAe,EAAEY,YAAU,CAAC,eAAD,CAD+D;EAE1F,EAAA,MAAM,EAAEA,YAAU,CAAC,MAAD,CAFwE;EAG1F,EAAA,WAAW,EAAEA,YAAU,CAAC,WAAD;EAHmE,CAA5F;;EAMA,IAAI,mBAAmBZ,oBAAkB,CAAC,SAA1C,EAAqD;EACnD,EAAA,mBAAmB,CAAC,aAApB,GAAoCY,YAAU,CAAC,aAAD,CAA9C;EACD;;EAED,IAAI,wBAAwBZ,oBAAkB,CAAC,SAA/C,EAA0D;EACxD,EAAA,mBAAmB,CAAC,kBAApB,GAAyCY,YAAU,CAAC,kBAAD,CAAnD;EACD;;EAED,kBAAkB,CAAC,SAAnB,GAA+B,MAAM,CAAC,MAAP,CAAcZ,oBAAkB,CAAC,SAAjC,EAA4C,mBAA5C,CAA/B;;EAGA,MAAM,CAAC,cAAP,CAAsB,kBAAtB,EAA0C,WAA1C,EAAuD;EACrD,EAAA,QAAQ,EAAE,KAD2C;EAErD,EAAA,UAAU,EAAE,KAFyC;EAGrD,EAAA,YAAY,EAAE;EAHuC,CAAvD;EAMO,IAAM,cAAc,GAAG,kBAAvB;;EAEP,SAAS,eAAT,GAAwB;EACtB,SAAO,KAAK,QAAL,EAAe,eAAf,EAAP;EACD;;EAED,SAAS,uBAAT,CACE,SADF,EAEE,QAFF,EAEmB;EAEjB,MAAI,CAAC,QAAL,EAAe,OAAO,SAAP;EACf,MAAM,OAAO,GAAG,SAAS,CAAC,eAAV,EAAhB;EACA,MAAI,OAAO,CAAC,QAAR,KAAqB,QAAzB,EAAmC,OAAO,SAAP,CAJlB;EAMjB;EACA;EACA;EACA;;EACA,MAAK,OAAe,CAAC,WAAD,CAAf,IAAiC,OAAe,CAAC,WAAD,CAArD,EAAoE;EAClE;EACA;EACA;EACA;EACA;EACA;EACA,WAAO,OAAO,CAAC,SAAD,CAAd;EACA,WAAO,OAAO,CAAC,KAAD,CAAd;EACA,WAAO,OAAO,CAAC,MAAD,CAAd;EACA,WAAO,OAAO,CAAC,OAAD,CAAd;EACA,WAAO,OAAO,CAAC,KAAD,CAAd;EACA,WAAO,OAAO,CAAC,MAAD,CAAd;EACA,WAAO,OAAO,CAAC,QAAD,CAAd;EACA,WAAO,OAAO,CAAC,QAAD,CAAd;EACA,WAAO,OAAO,CAAC,cAAD,CAAd;EACA,WAAQ,OAAe,CAAC,WAAD,CAAvB;EACA,WAAO,OAAO,CAAC,QAAD,CAAd;EACA,WAAQ,OAAe,CAAC,WAAD,CAAvB;EACD;;EACD,SAAO,IAAIA,oBAAJ,CAAuB,OAAO,CAAC,MAA/B,oCAA6C,OAA7C;EAAgG,IAAA,QAAQ,EAAR;EAAhG,KAAP;EACD;EAGD;;;EACA,SAAS,MAAT,CAEE,QAFF,EAGY;EAAA;;EAEV,0BAAuC,gBAAgB,CAAC,QAAD,EAAW,IAAX,CAAvD;EAAA,MAAM,OAAN,qBAAM,OAAN;EAAA,MAAe,SAAf,qBAAe,SAAf;EAAA,MAA0B,QAA1B,qBAA0B,QAA1B;;EACA,MAAI,OAAO,IAAI,SAAf,EAA0B;EACxB,IAAA,SAAS,GAAG,uBAAuB,CAAC,SAAD,EAAY,QAAZ,CAAnC;EACA,WAAO,SAAS,CAAC,MAAV,CAAiB,OAAO,CAAC,iBAAzB,CAAP;EACD;;EANS,oCAAP,IAAO;EAAP,IAAA,IAAO;EAAA;;EASV,SAAQ,uBAAK,QAAL,GAAe,MAAf,wBAAsD,QAAtD,SAAmE,IAAnE,EAAR;EACD;;EAED,SAAS,aAAT,CAEE,QAFF,EAGY;EAAA;;EAEV,2BAAuC,gBAAgB,CAAC,QAAD,EAAW,IAAX,CAAvD;EAAA,MAAM,OAAN,sBAAM,OAAN;EAAA,MAAe,SAAf,sBAAe,SAAf;EAAA,MAA0B,QAA1B,sBAA0B,QAA1B;;EACA,MAAI,OAAO,IAAI,SAAf,EAA0B;EACxB,IAAA,SAAS,GAAG,uBAAuB,CAAC,SAAD,EAAY,QAAZ,CAAnC;EACA,WAAO,SAAS,CAAC,aAAV,CAAwB,OAAO,CAAC,iBAAhC,CAAP;EACD;;EANS,qCAAP,IAAO;EAAP,IAAA,IAAO;EAAA;;EAYV,SAAQ,wBAAK,QAAL,GAAe,aAAf,yBAA6D,QAA7D,SAA0E,IAA1E,EAAR;EACD;;EAED,SAAS,WAAT,CAA+C,CAA/C,EAA4E,CAA5E,EAAuG;EACrG,MAAI,gBAAgB,CAAC,CAAD,CAAhB,IAAuB,gBAAgB,CAAC,CAAD,CAA3C,EAAgD;EAC9C,QAAI,CAAC,gBAAgB,CAAC,CAAD,EAAI,CAAJ,CAArB,EAA6B;EAC3B,YAAM,IAAI,SAAJ,CAAc,qEAAd,CAAN;EACD;;EACD,6BAII,gBAAgB,CAAC,CAAD,EAA0C,IAA1C,CAJpB;EAAA,QACW,EADX,sBACE,OADF;EAAA,QAEa,UAFb,sBAEE,SAFF;EAAA,QAGY,GAHZ,sBAGE,QAHF;;EAKA,6BAII,gBAAgB,CAAC,CAAD,EAA0C,IAA1C,CAJpB;EAAA,QACW,EADX,sBACE,OADF;EAAA,QAEa,UAFb,sBAEE,SAFF;EAAA,QAGY,GAHZ,sBAGE,QAHF;;EAKA,QAAI,GAAG,IAAI,GAAP,IAAc,GAAG,KAAK,GAA1B,EAA+B;EAC7B,YAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN;EACD;;EACD,QAAI,EAAE,IAAI,EAAN,IAAY,UAAZ,IAA0B,UAA1B,IAAwC,UAAU,KAAK,UAA3D,EAAuE;EACrE,UAAM,SAAS,GAAG,uBAAuB,CAAC,UAAD,EAAa,GAAb,CAAzC,CADqE;;EAGrE,aAAQ,SAAiC,CAAC,WAAlC,CAA8C,EAAE,CAAC,iBAAjD,EAAoE,EAAE,CAAC,iBAAvE,CAAR;EACD;EACF,GAvBoG;;;EAyBrG,SAAQ,KAAK,QAAL,EAAuC,WAAvC,CAAmD,CAAnD,EAAsD,CAAtD,CAAR;EACD;;EAED,SAAS,kBAAT,CAEE,CAFF,EAGE,CAHF,EAGoC;EAElC,MAAI,gBAAgB,CAAC,CAAD,CAAhB,IAAuB,gBAAgB,CAAC,CAAD,CAA3C,EAAgD;EAC9C,QAAI,CAAC,gBAAgB,CAAC,CAAD,EAAI,CAAJ,CAArB,EAA6B;EAC3B,YAAM,IAAI,SAAJ,CAAc,4EAAd,CAAN;EACD;;EACD,6BAA8D,gBAAgB,CAAC,CAAD,EAAI,IAAJ,CAA9E;EAAA,QAAiB,EAAjB,sBAAQ,OAAR;EAAA,QAAgC,UAAhC,sBAAqB,SAArB;EAAA,QAAsD,GAAtD,sBAA4C,QAA5C;;EACA,6BAA8D,gBAAgB,CAAC,CAAD,EAAI,IAAJ,CAA9E;EAAA,QAAiB,EAAjB,sBAAQ,OAAR;EAAA,QAAgC,UAAhC,sBAAqB,SAArB;EAAA,QAAsD,GAAtD,sBAA4C,QAA5C;;EACA,QAAI,GAAG,IAAI,GAAP,IAAc,GAAG,KAAK,GAA1B,EAA+B;EAC7B,YAAM,IAAI,UAAJ,CAAe,kDAAf,CAAN;EACD;;EACD,QAAI,EAAE,IAAI,EAAN,IAAY,UAAZ,IAA0B,UAA1B,IAAwC,UAAU,KAAK,UAA3D,EAAuE;EACrE,UAAM,SAAS,GAAG,uBAAuB,CAAC,UAAD,EAAa,GAAb,CAAzC,CADqE;;EAGrE,aAAQ,SAAiC,CAAC,kBAAlC,CAAqD,EAAE,CAAC,iBAAxD,EAA2E,EAAE,CAAC,iBAA9E,CAAR;EACD;EACF,GAhBiC;;;EAkBlC,SAAQ,KAAK,QAAL,EAAuC,kBAAvC,CAA0D,CAA1D,EAA6D,CAA7D,CAAR;EACD;;EAOD,SAAS,KAAT,GAA6F;EAAA,MAA9E,YAA8E,uEAAnC,EAAmC;EAAA,MAA/B,OAA+B,uEAAF,EAAE;EAC3F,MAAM,OAAO,GAAGG,cAAY,CAAC,EAAD,EAAK,YAAL,CAA5B;;EACA,0BAAkB,CAChB,MADgB,EAEhB,OAFgB,EAGhB,KAHgB,EAIhB,MAJgB,EAKhB,QALgB,EAMhB,QANgB,EAOhB,SAPgB,EAQhB,WARgB,EAShB,cATgB,EAUhB,WAVgB,EAWhB,WAXgB,CAAlB,0BAYY;EAZP,QAAM,GAAG,WAAT;EAeF,IAAA,OAAO,CAAC,GAAD,CAAP,GAAoC,GAAG,IAAI,OAAP,GAAiB,OAAO,CAAC,GAAD,CAAxB,GAAgC,OAAO,CAAC,GAAD,CAA3E;EACD,QAAK,OAAO,CAAC,GAAD,CAAP,KAAsC,KAAtC,IAA+C,OAAO,CAAC,GAAD,CAAP,KAAiB,SAArE,EAAgF,OAAO,OAAO,CAAC,GAAD,CAAd;EACjF;;EACD,SAAO,OAAP;EACD;;EAID,SAAS,SAAT,CAAmB,YAAnB,EAAgE;EAC9D,MAAI,OAAO,GAAG,KAAK,CAAC,YAAD,EAAe;EAChC,IAAA,IAAI,EAAE,KAD0B;EAEhC,IAAA,KAAK,EAAE,KAFyB;EAGhC,IAAA,GAAG,EAAE,KAH2B;EAIhC,IAAA,OAAO,EAAE,KAJuB;EAKhC,IAAA,YAAY,EAAE,KALkB;EAMhC,IAAA,SAAS,EAAE;EANqB,GAAf,CAAnB;;EAQA,MAAI,CAAC,cAAc,CAAC,OAAD,CAAnB,EAA8B;EAC5B,IAAA,OAAO,GAAGA,cAAY,CAAC,EAAD,EAAK,OAAL,EAAc;EAClC,MAAA,IAAI,EAAE,SAD4B;EAElC,MAAA,MAAM,EAAE,SAF0B;EAGlC,MAAA,MAAM,EAAE;EAH0B,KAAd,CAAtB;EAKD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,cAAT,CAAwB,YAAxB,EAA0E;EACxE,MAAI,OAAO,GAAG,KAAK,CAAC,YAAD,EAAe;EAChC,IAAA,GAAG,EAAE,KAD2B;EAEhC,IAAA,IAAI,EAAE,KAF0B;EAGhC,IAAA,MAAM,EAAE,KAHwB;EAIhC,IAAA,MAAM,EAAE,KAJwB;EAKhC,IAAA,OAAO,EAAE,KALuB;EAMhC,IAAA,SAAS,EAAE,KANqB;EAOhC,IAAA,YAAY,EAAE,KAPkB;EAQhC,IAAA,SAAS,EAAE,KARqB;EAShC,IAAA,SAAS,EAAE;EATqB,GAAf,CAAnB;;EAWA,MAAI,EAAE,UAAU,OAAV,IAAqB,WAAW,OAAlC,CAAJ,EAAgD;EAC9C,IAAA,OAAO,GAAGA,cAAY,CAAC,OAAD,EAAU;EAAE,MAAA,IAAI,EAAE,SAAR;EAAmB,MAAA,KAAK,EAAE;EAA1B,KAAV,CAAtB;EACD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,aAAT,CAAuB,YAAvB,EAAwE;EACtE,MAAI,OAAO,GAAG,KAAK,CAAC,YAAD,EAAe;EAChC,IAAA,IAAI,EAAE,KAD0B;EAEhC,IAAA,IAAI,EAAE,KAF0B;EAGhC,IAAA,MAAM,EAAE,KAHwB;EAIhC,IAAA,MAAM,EAAE,KAJwB;EAKhC,IAAA,OAAO,EAAE,KALuB;EAMhC,IAAA,SAAS,EAAE,KANqB;EAOhC,IAAA,YAAY,EAAE,KAPkB;EAQhC,IAAA,SAAS,EAAE,KARqB;EAShC,IAAA,SAAS,EAAE;EATqB,GAAf,CAAnB;;EAWA,MAAI,EAAE,WAAW,OAAX,IAAsB,SAAS,OAAjC,CAAJ,EAA+C;EAC7C,IAAA,OAAO,GAAGA,cAAY,CAAC,EAAD,EAAK,OAAL,EAAc;EAAE,MAAA,KAAK,EAAE,SAAT;EAAoB,MAAA,GAAG,EAAE;EAAzB,KAAd,CAAtB;EACD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,SAAT,CAAmB,YAAnB,EAAgE;EAC9D,MAAI,OAAO,GAAG,KAAK,CAAC,YAAD,EAAe;EAChC,IAAA,IAAI,EAAE,KAD0B;EAEhC,IAAA,MAAM,EAAE,KAFwB;EAGhC,IAAA,MAAM,EAAE,KAHwB;EAIhC,IAAA,SAAS,EAAE,KAJqB;EAKhC,IAAA,YAAY,EAAE,KALkB;EAMhC,IAAA,SAAS,EAAE;EANqB,GAAf,CAAnB;;EAQA,MAAI,CAAC,cAAc,CAAC,OAAD,CAAnB,EAA8B;EAC5B,IAAA,OAAO,GAAGA,cAAY,CAAC,EAAD,EAAK,OAAL,EAAc;EAClC,MAAA,IAAI,EAAE,SAD4B;EAElC,MAAA,KAAK,EAAE,SAF2B;EAGlC,MAAA,GAAG,EAAE;EAH6B,KAAd,CAAtB;EAKD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,aAAT,CAAuB,YAAvB,EAAwE;EACtE,MAAI,OAAO,GAAG,KAAK,CAAC,YAAD,EAAe;EAAE,IAAA,YAAY,EAAE;EAAhB,GAAf,CAAnB;;EACA,MAAI,CAAC,cAAc,CAAC,OAAD,CAAf,IAA4B,CAAC,cAAc,CAAC,OAAD,CAA/C,EAA0D;EACxD,IAAA,OAAO,GAAGA,cAAY,CAAC,EAAD,EAAK,OAAL,EAAc;EAClC,MAAA,IAAI,EAAE,SAD4B;EAElC,MAAA,KAAK,EAAE,SAF2B;EAGlC,MAAA,GAAG,EAAE,SAH6B;EAIlC,MAAA,IAAI,EAAE,SAJ4B;EAKlC,MAAA,MAAM,EAAE,SAL0B;EAMlC,MAAA,MAAM,EAAE;EAN0B,KAAd,CAAtB;EAQD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,kBAAT,CAA4B,YAA5B,EAAyE;EACvE,MAAI,OAAO,GAAG,YAAd;;EACA,MAAI,CAAC,cAAc,CAAC,OAAD,CAAf,IAA4B,CAAC,cAAc,CAAC,OAAD,CAA/C,EAA0D;EACxD,IAAA,OAAO,GAAGA,cAAY,CAAC,EAAD,EAAK,OAAL,EAAc;EAClC,MAAA,IAAI,EAAE,SAD4B;EAElC,MAAA,KAAK,EAAE,SAF2B;EAGlC,MAAA,GAAG,EAAE,SAH6B;EAIlC,MAAA,IAAI,EAAE,SAJ4B;EAKlC,MAAA,MAAM,EAAE,SAL0B;EAMlC,MAAA,MAAM,EAAE;EAN0B,KAAd,CAAtB;EAQA,QAAI,OAAO,CAAC,YAAR,KAAyB,SAA7B,EAAwC,OAAO,CAAC,YAAR,GAAuB,OAAvB;EACzC;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,YAAT,CAAsB,YAAtB,EAAiE;EAC/D,MAAI,OAAO,GAAG,YAAd;;EACA,MAAI,CAAC,cAAc,CAAC,OAAD,CAAf,IAA4B,CAAC,cAAc,CAAC,OAAD,CAA/C,EAA0D;EACxD,IAAA,OAAO,GAAGA,cAAY,CAAC,EAAD,EAAK,OAAL,EAAc;EAClC,MAAA,IAAI,EAAE,SAD4B;EAElC,MAAA,KAAK,EAAE,SAF2B;EAGlC,MAAA,GAAG,EAAE,SAH6B;EAIlC,MAAA,IAAI,EAAE,SAJ4B;EAKlC,MAAA,MAAM,EAAE,SAL0B;EAMlC,MAAA,MAAM,EAAE;EAN0B,KAAd,CAAtB;EAQD;;EACD,SAAO,OAAP;EACD;;EAED,SAAS,cAAT,CAAwB,OAAxB,EAAqE;EACnE,SAAO,UAAU,OAAV,IAAqB,WAAW,OAAhC,IAA2C,SAAS,OAApD,IAA+D,aAAa,OAA5E,IAAuF,eAAe,OAA7G;EACD;;EAED,SAAS,cAAT,CAAwB,OAAxB,EAAqE;EACnE,SACE,UAAU,OAAV,IAAqB,YAAY,OAAjC,IAA4C,YAAY,OAAxD,IAAmE,eAAe,OAAlF,IAA6F,eAAe,OAD9G;EAGD;;EAED,SAAS,gBAAT,CACE,GADF,EACc;EASZ,SACEW,cAAA,CAAkB,GAAlB,KACAC,cAAA,CAAkB,GAAlB,CADA,IAEAC,kBAAA,CAAsB,GAAtB,CAFA,IAGAC,uBAAA,CAA2B,GAA3B,CAHA,IAIAC,mBAAA,CAAuB,GAAvB,CAJA,IAKAC,kBAAA,CAAsB,GAAtB,CALA,IAMAC,iBAAA,CAAqB,GAArB,CAPF;EASD;;EAED,SAAS,gBAAT,CAA0B,CAA1B,EAAsC,CAAtC,EAAgD;EAC9C,MAAI,CAAC,gBAAgB,CAAC,CAAD,CAAjB,IAAwB,CAAC,gBAAgB,CAAC,CAAD,CAA7C,EAAkD,OAAO,KAAP;EAClD,MAAIL,cAAA,CAAkB,CAAlB,KAAwB,CAACA,cAAA,CAAkB,CAAlB,CAA7B,EAAmD,OAAO,KAAP;EACnD,MAAID,cAAA,CAAkB,CAAlB,KAAwB,CAACA,cAAA,CAAkB,CAAlB,CAA7B,EAAmD,OAAO,KAAP;EACnD,MAAIE,kBAAA,CAAsB,CAAtB,KAA4B,CAACA,kBAAA,CAAsB,CAAtB,CAAjC,EAA2D,OAAO,KAAP;EAC3D,MAAIC,uBAAA,CAA2B,CAA3B,KAAiC,CAACA,uBAAA,CAA2B,CAA3B,CAAtC,EAAqE,OAAO,KAAP;EACrE,MAAIC,mBAAA,CAAuB,CAAvB,KAA6B,CAACA,mBAAA,CAAuB,CAAvB,CAAlC,EAA6D,OAAO,KAAP;EAC7D,MAAIC,kBAAA,CAAsB,CAAtB,KAA4B,CAACA,kBAAA,CAAsB,CAAtB,CAAjC,EAA2D,OAAO,KAAP;EAC3D,MAAIC,iBAAA,CAAqB,CAArB,KAA2B,CAACA,iBAAA,CAAqB,CAArB,CAAhC,EAAyD,OAAO,KAAP;EACzD,SAAO,IAAP;EACD;;EAWD,SAAS,gBAAT,CAA0B,WAA1B,EAA4D,IAA5D,EAAoF;EAClF,MAAM,QAAQ,GAAG,YAAY,CAAC,0BAAD,CAA7B;;EAEA,MAAIL,cAAA,CAAkB,WAAlB,CAAJ,EAAoC;EAClC,QAAM,IAAI,GAAG,OAAO,CAAC,WAAD,EAAc,QAAd,CAApB;EACA,QAAM,MAAM,GAAG,OAAO,CAAC,WAAD,EAAc,UAAd,CAAtB;EACA,QAAM,MAAM,GAAG,OAAO,CAAC,WAAD,EAAc,UAAd,CAAtB;EACA,QAAM,WAAW,GAAG,OAAO,CAAC,WAAD,EAAc,eAAd,CAA3B;EACA,QAAM,WAAW,GAAG,OAAO,CAAC,WAAD,EAAc,eAAd,CAA3B;EACA,QAAM,UAAU,GAAG,OAAO,CAAC,WAAD,EAAc,cAAd,CAA1B;EACA,QAAM,QAAQ,GAAG,IAAI,QAAJ,CAAa,IAAb,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,IAAzB,EAA+B,MAA/B,EAAuC,MAAvC,EAA+C,WAA/C,EAA4D,WAA5D,EAAyE,UAAzE,EAAqF,IAAI,CAAC,MAAD,CAAzF,CAAjB;EACA,WAAO;EACL,MAAA,OAAO,EAAEM,4BAAA,CAAgC,uBAAuB,CAAC,IAAD,CAAvD,EAA+D,QAA/D,EAAyE,YAAzE,CADJ;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,IAAP;EAFjB,KAAP;EAID;;EAED,MAAIH,mBAAA,CAAuB,WAAvB,CAAJ,EAAyC;EACvC,QAAM,OAAO,GAAG,OAAO,CAAC,WAAD,EAAc,QAAd,CAAvB;EACA,QAAM,QAAQ,GAAG,OAAO,CAAC,WAAD,EAAc,SAAd,CAAxB;EACA,QAAM,eAAe,GAAG,OAAO,CAAC,WAAD,EAAc,OAAd,CAA/B;EACA,QAAM,QAAQ,GAAGI,QAAA,CAAY,OAAO,CAAC,WAAD,EAAc,QAAd,CAAnB,CAAjB;;EACA,QAAI,QAAQ,KAAK,IAAI,CAAC,MAAD,CAArB,EAA+B;EAC7B,YAAM,IAAI,UAAJ,sDAC0C,QAD1C,sCAC8E,IAAI,CAAC,MAAD,CADlF,EAAN;EAGD;;EACD,QAAM,SAAQ,GAAG,IAAI,QAAJ,CAAa,OAAb,EAAsB,QAAtB,EAAgC,eAAhC,EAAiD,EAAjD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,CAAjE,EAAoE,QAApE,CAAjB;;EACA,WAAO;EACL,MAAA,OAAO,EAAED,4BAAA,CAAgC,uBAAuB,CAAC,IAAD,CAAvD,EAA+D,SAA/D,EAAyE,YAAzE,CADJ;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,EAAP;EAFjB,KAAP;EAID;;EAED,MAAIF,kBAAA,CAAsB,WAAtB,CAAJ,EAAwC;EACtC,QAAM,gBAAgB,GAAG,OAAO,CAAC,WAAD,EAAc,QAAd,CAAhC;;EACA,QAAM,SAAQ,GAAG,OAAO,CAAC,WAAD,EAAc,SAAd,CAAxB;;EACA,QAAM,MAAM,GAAG,OAAO,CAAC,WAAD,EAAc,OAAd,CAAtB;;EACA,QAAM,SAAQ,GAAGG,QAAA,CAAY,OAAO,CAAC,WAAD,EAAc,QAAd,CAAnB,CAAjB;;EACA,QAAI,SAAQ,KAAK,IAAI,CAAC,MAAD,CAArB,EAA+B;EAC7B,YAAM,IAAI,UAAJ,qDACyC,SADzC,sCAC6E,IAAI,CAAC,MAAD,CADjF,EAAN;EAGD;;EACD,QAAM,UAAQ,GAAG,IAAI,QAAJ,CAAa,gBAAb,EAA+B,SAA/B,EAAyC,MAAzC,EAAiD,EAAjD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,CAAjE,EAAoE,SAApE,CAAjB;;EACA,WAAO;EACL,MAAA,OAAO,EAAED,4BAAA,CAAgC,uBAAuB,CAAC,IAAD,CAAvD,EAA+D,UAA/D,EAAyE,YAAzE,CADJ;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,EAAP;EAFjB,KAAP;EAID;;EAED,MAAIP,cAAA,CAAkB,WAAlB,CAAJ,EAAoC;EAClC,QAAM,QAAO,GAAG,OAAO,CAAC,WAAD,EAAc,QAAd,CAAvB;;EACA,QAAM,UAAQ,GAAG,OAAO,CAAC,WAAD,EAAc,SAAd,CAAxB;;EACA,QAAM,OAAM,GAAG,OAAO,CAAC,WAAD,EAAc,OAAd,CAAtB;;EACA,QAAM,UAAQ,GAAGQ,QAAA,CAAY,OAAO,CAAC,WAAD,EAAc,QAAd,CAAnB,CAAjB;;EACA,QAAI,UAAQ,KAAK,SAAb,IAA0B,UAAQ,KAAK,IAAI,CAAC,MAAD,CAA/C,EAAyD;EACvD,YAAM,IAAI,UAAJ,iDAAwD,UAAxD,sCAA4F,IAAI,CAAC,MAAD,CAAhG,EAAN;EACD;;EACD,QAAM,UAAQ,GAAG,IAAI,QAAJ,CAAa,QAAb,EAAsB,UAAtB,EAAgC,OAAhC,EAAwC,EAAxC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,IAAI,CAAC,MAAD,CAA/D,CAAjB;;EACA,WAAO;EACL,MAAA,OAAO,EAAED,4BAAA,CAAgC,uBAAuB,CAAC,IAAD,CAAvD,EAA+D,UAA/D,EAAyE,YAAzE,CADJ;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,IAAP;EAFjB,KAAP;EAID;;EAED,MAAIL,kBAAA,CAAsB,WAAtB,CAAJ,EAAwC;EACtC,QAAM,SAAO,GAAG,OAAO,CAAC,WAAD,EAAc,QAAd,CAAvB;;EACA,QAAM,UAAQ,GAAG,OAAO,CAAC,WAAD,EAAc,SAAd,CAAxB;;EACA,QAAM,QAAM,GAAG,OAAO,CAAC,WAAD,EAAc,OAAd,CAAtB;;EACA,QAAM,KAAI,GAAG,OAAO,CAAC,WAAD,EAAc,QAAd,CAApB;;EACA,QAAM,OAAM,GAAG,OAAO,CAAC,WAAD,EAAc,UAAd,CAAtB;;EACA,QAAM,OAAM,GAAG,OAAO,CAAC,WAAD,EAAc,UAAd,CAAtB;;EACA,QAAM,YAAW,GAAG,OAAO,CAAC,WAAD,EAAc,eAAd,CAA3B;;EACA,QAAM,YAAW,GAAG,OAAO,CAAC,WAAD,EAAc,eAAd,CAA3B;;EACA,QAAM,WAAU,GAAG,OAAO,CAAC,WAAD,EAAc,cAAd,CAA1B;;EACA,QAAM,UAAQ,GAAGM,QAAA,CAAY,OAAO,CAAC,WAAD,EAAc,QAAd,CAAnB,CAAjB;;EACA,QAAI,UAAQ,KAAK,SAAb,IAA0B,UAAQ,KAAK,IAAI,CAAC,MAAD,CAA/C,EAAyD;EACvD,YAAM,IAAI,UAAJ,qDACyC,UADzC,sCAC6E,IAAI,CAAC,MAAD,CADjF,EAAN;EAGD;;EACD,QAAI,UAAQ,GAAG,WAAf;;EACA,QAAI,UAAQ,KAAK,SAAjB,EAA4B;EAC1B,MAAA,UAAQ,GAAG,IAAI,QAAJ,CACT,SADS,EAET,UAFS,EAGT,QAHS,EAIT,KAJS,EAKT,OALS,EAMT,OANS,EAOT,YAPS,EAQT,YARS,EAST,WATS,EAUT,IAAI,CAAC,MAAD,CAVK,CAAX;EAYD;;EACD,WAAO;EACL,MAAA,OAAO,EAAED,4BAAA,CAAgC,uBAAuB,CAAC,IAAD,CAAvD,EAA+D,UAA/D,EAAyE,YAAzE,CADJ;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,QAAP;EAFjB,KAAP;EAID;;EAED,MAAIJ,uBAAA,CAA2B,WAA3B,CAAJ,EAA6C;EAC3C,QAAM,UAAQ,GAAGK,QAAA,CAAY,OAAO,CAAC,WAAD,EAAc,QAAd,CAAnB,CAAjB;;EACA,QAAI,UAAQ,KAAK,SAAb,IAA0B,UAAQ,KAAK,IAAI,CAAC,MAAD,CAA/C,EAAyD;EACvD,YAAM,IAAI,UAAJ,qDACyC,UADzC,sCAC6E,IAAI,CAAC,MAAD,CADjF,EAAN;EAGD;;EAED,QAAM,QAAQ,GAAG,OAAO,CAAC,WAAD,EAAc,SAAd,CAAxB;EACA,QAAM,WAAW,GAAGA,QAAA,CAAY,QAAZ,CAApB;;EACA,QAAI,IAAI,CAAC,QAAD,CAAJ,IAAkB,IAAI,CAAC,QAAD,CAAJ,KAAmB,WAAzC,EAAsD;EACpD,YAAM,IAAI,UAAJ,2BAAkC,IAAI,CAAC,QAAD,CAAtC,6CAAmF,WAAnF,EAAN;EACD;;EAED,WAAO;EACL,MAAA,OAAO,EAAE,OAAO,CAAC,WAAD,EAAc,OAAd,CADX;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,KAAP,CAFjB;EAGL,MAAA,QAAQ,EAAE;EAHL,KAAP;EAKD;;EAED,MAAIF,iBAAA,CAAqB,WAArB,CAAJ,EAAuC;EACrC,WAAO;EACL,MAAA,OAAO,EAAE,WADJ;EAEL,MAAA,SAAS,EAAE,WAAW,CAAC,IAAD,EAAO,IAAP;EAFjB,KAAP;EAID;;EAED,SAAO,EAAP;EACD;;;;;;;MCxoBY,OAAb;EACE,mBAAY,gBAAZ,EAA2C;EAAA;;EACzC;EACA;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,SAAJ,CAAc,gDAAd,CAAN;EACD;;EAED,QAAM,EAAE,GAAGG,QAAA,CAAY,gBAAZ,CAAX;EACA,IAAAC,wBAAA,CAA4B,EAA5B;EACA,IAAA,WAAW,CAAC,IAAD,CAAX;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,gBAAP,EAAyB,EAAzB,CAAP;;EAEA,IAAW;EACT,UAAM,IAAI,GAAGC,uBAAA,CAA2B,IAA3B,EAAiC,SAAjC,EAA4C,MAA5C,CAAb;EACA,MAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpC,QAAA,KAAK,YAAK,KAAK,MAAM,CAAC,WAAZ,CAAL,eAAkC,IAAlC,MAD+B;EAEpC,QAAA,QAAQ,EAAE,KAF0B;EAGpC,QAAA,UAAU,EAAE,KAHwB;EAIpC,QAAA,YAAY,EAAE;EAJsB,OAAtC;EAMD;EACF;;EAtBH;EAAA;EAAA,SAwBE,eAAgB;EACd,UAAI,CAACL,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAArB;EACA,aAAO,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,KAAZ,EAAmB,OAAnB,CAAd,CAAP;EACD;EA5BH;EAAA;EAAA,SA6BE,eAAqB;EACnB,UAAI,CAACA,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,UAAM,KAAK,GAAG,IAAI,CAAC,MAAL,CAAY,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAnB,CAAd;EACA,aAAO,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,KAAZ,EAAmB,OAAnB,CAAd,CAAP;EACD;EAjCH;EAAA;EAAA,SAkCE,eAAqB;EACnB,UAAI,CAACA,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,UAAM,KAAK,GAAG,IAAI,CAAC,MAAL,CAAY,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAnB,CAAd;EACA,aAAOM,gBAAA,CAAoB,IAAI,CAAC,MAAL,CAAY,KAAZ,EAAmB,QAAnB,CAApB,CAAP;EACD;EAtCH;EAAA;EAAA,SAuCE,eAAoB;EAClB,UAAI,CAACN,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAOM,gBAAA,CAAoB,IAAI,CAAC,MAAL,CAAY,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAnB,CAApB,CAAP;EACD;EA1CH;EAAA;EAAA,WA4CE,aAAI,oBAAJ,EAA0C;EACxC,UAAI,CAACN,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAOO,0CAAA,CAA8C,KAA9C,EAAqD,IAArD,EAA2D,oBAA3D,CAAP;EACD;EA/CH;EAAA;EAAA,WAgDE,kBAAS,oBAAT,EAAoD;EAClD,UAAI,CAACP,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAOO,0CAAA,CAA8C,UAA9C,EAA0D,IAA1D,EAAgE,oBAAhE,CAAP;EACD;EAnDH;EAAA;EAAA,WAoDE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAACP,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAOQ,yBAAA,CAA6B,OAA7B,EAAsC,IAAtC,EAA4C,KAA5C,EAAmD,OAAnD,CAAP;EACD;EAvDH;EAAA;EAAA,WAwDE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAACR,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAOQ,yBAAA,CAA6B,OAA7B,EAAsC,IAAtC,EAA4C,KAA5C,EAAmD,OAAnD,CAAP;EACD;EA3DH;EAAA;EAAA,WA4DE,eAAM,YAAN,EAAsC;EACpC,UAAI,CAACR,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,UAAI,YAAY,KAAK,SAArB,EAAgC,MAAM,IAAI,SAAJ,CAAc,+BAAd,CAAN;EAChC,UAAM,OAAO,GACX,OAAO,YAAP,KAAwB,QAAxB,GACKS,mBAAA,CAAuB,cAAvB,EAAuC,YAAvC,CADL,GAEIC,gBAAA,CAAoB,YAApB,CAHN;EAIA,UAAM,YAAY,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,cAA5B,EAA4C,MAA5C,EAAoDC,QAApD,CAArB;EACA,UAAM,YAAY,GAAGC,sBAAA,CAA0B,OAA1B,EAAmC,YAAnC,CAArB;EACA,UAAM,iBAAiB,GAAG;EACxB,QAAA,IAAI,EAAE,EADkB;EAExB,QAAA,MAAM,EAAE,IAFgB;EAGxB,QAAA,MAAM,EAAE,KAHgB;EAIxB,QAAA,WAAW,EAAE,OAJW;EAKxB,QAAA,WAAW,EAAE,OALW;EAMxB,QAAA,UAAU,EAAE;EANY,OAA1B;EAQA,UAAM,iBAAiB,GAAGC,2BAAA,CAA+B,OAA/B,EAAwC,iBAAiB,CAAC,YAAD,CAAzD,EAAyE,IAAzE,CAA1B;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAlB;EACA,UAAM,SAAS,GAAGC,YAAA,CAAgB,EAAhB,EAAoB,iBAApB,EAAuC,YAAvC,EAAqD,YAArD,CAAlB;EACA,aAAO,IAAI,OAAJ,CAAY,SAAZ,CAAP;EACD;EAjFH;EAAA;EAAA,WAkFE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAACf,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,UAAM,KAAK,GAAGgB,iBAAA,CAAqB,UAArB,CAAd;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAnB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,KAAD,EAAQ,gBAAR,CAAnB;EACA,aAAO,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAX,EAA6B,IAAI,CAAC,MAAL,CAAY,GAAZ,CAA7B,CAAP;EACD;EAxFH;EAAA;EAAA,WAyFE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAAChB,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,UAAM,OAAO,GAAGU,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAI,QAAQ,GAAG,OAAO,CAAC,QAAvB;EACA,UAAI,QAAQ,KAAK,SAAjB,EAA4B,QAAQ,GAAGjB,kBAAA,CAAsB,QAAtB,CAAX,CAJ0B;;EAMtD,kCAAuCwB,wBAAA,CAA4B,OAA5B,CAAvC;EAAA,UAAQ,SAAR,yBAAQ,SAAR;EAAA,UAAmB,IAAnB,yBAAmB,IAAnB;EAAA,UAAyB,SAAzB,yBAAyB,SAAzB;;EACA,UAAM,YAAY,GAAGJ,sBAAA,CAA0B,OAA1B,EAAmC,OAAnC,CAArB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAlB;EACA,UAAM,SAAS,GAAGE,YAAA,CAAgB,EAAhB,EAAoB,SAApB,EAA+B,IAA/B,EAAqC,YAArC,CAAlB;EACA,UAAM,cAAc,GAAG,IAAI,OAAJ,CAAY,SAAZ,CAAvB;EACA,aAAOV,uBAAA,CAA2B,cAA3B,EAA2C,QAA3C,EAAkF,SAAlF,CAAP;EACD;EArGH;EAAA;EAAA,WAsGE,kBAAM;EACJ,UAAI,CAACL,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAOK,uBAAA,CAA2B,IAA3B,EAAiC,SAAjC,EAA4C,MAA5C,CAAP;EACD;EAzGH;EAAA;EAAA,WA0GE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACL,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACjC,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EAhHH;EAAA;EAAA,WAiHE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,uDAAd,CAAN;EACD;EAnHH;EAAA;EAAA,WAoHE,yBAAgB,IAAhB,EAAkD;EAChD,UAAI,CAACA,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EACjC,UAAI,CAACkB,QAAA,CAAY,IAAZ,CAAL,EAAwB;EACtB,cAAM,IAAI,SAAJ,CAAc,qCAAd,CAAN;EACD;;EACD,UAAM,YAAY,GAAG,IAAI,CAAC,QAA1B;;EACA,UAAI,YAAY,KAAK,SAArB,EAAgC;EAC9B,cAAM,IAAI,SAAJ,CAAc,8CAAd,CAAN;EACD;;EACD,UAAM,QAAQ,GAAGC,kBAAA,CAAsB,YAAtB,CAAjB;EACA,UAAM,oBAAoB,GAAG,IAAI,CAAC,QAAlC;;EACA,UAAI,oBAAoB,KAAK,SAA7B,EAAwC;EACtC,cAAM,IAAI,SAAJ,CAAc,8CAAd,CAAN;EACD;;EACD,UAAM,QAAQ,GAAG1B,kBAAA,CAAsB,oBAAtB,CAAjB;EACA,aAAO2B,2BAAA,CAA+B,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAtC,EAAgE,QAAhE,EAA0E,QAA1E,CAAP;EACD;EApIH;EAAA;EAAA,WAqIE,4BAAmB,SAAnB,EAA6D;EAC3D,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACpB,iBAAA,CAAqB,IAArB,CAAL,EAAiC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EACjC,UAAIkB,QAAA,CAAY,IAAZ,CAAJ,EAAuB;EACrB,YAAM,gBAAgB,GAAG,IAAI,CAAC,QAA9B;;EACA,YAAI,gBAAgB,KAAK,SAAzB,EAAoC;EAClC,UAAA,IAAI,GAAG,gBAAP;EACD;EACF;;EACD,UAAM,QAAQ,GAAGzB,kBAAA,CAAsB,IAAtB,CAAjB;EACA,UAAM,QAAQ,GAAG4B,kBAAA,EAAjB;EACA,aAAOD,2BAAA,CAA+B,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAtC,EAAgE,QAAhE,EAA0E,QAA1E,CAAP;EACD;EAjJH;EAAA;EAAA,WAmJE,0BAAwB,iBAAxB,EAAwE;EACtE,UAAM,YAAY,GAAGE,QAAA,CAAY,iBAAZ,CAArB;EACA,UAAM,gBAAgB,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,YAAZ,CAAd,EAAyC,OAAzC,CAAzB;EACA,MAAAlB,wBAAA,CAA4B,gBAA5B;EACA,aAAO,IAAI,OAAJ,CAAY,gBAAZ,CAAP;EACD;EAxJH;EAAA;EAAA,WAyJE,+BACE,sBADF,EAC4D;EAE1D,UAAM,iBAAiB,GAAGkB,QAAA,CAAY,sBAAZ,CAA1B;EACA,UAAM,gBAAgB,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,iBAAZ,CAAd,EAA8C,OAA9C,CAAzB;EACA,MAAAlB,wBAAA,CAA4B,gBAA5B;EACA,aAAO,IAAI,OAAJ,CAAY,gBAAZ,CAAP;EACD;EAhKH;EAAA;EAAA,WAiKE,+BACE,sBADF,EAC4D;EAE1D,UAAM,iBAAiB,GAAGD,QAAA,CAAY,sBAAZ,CAA1B;EACA,UAAM,gBAAgB,GAAG,IAAI,CAAC,QAAL,CAAc,iBAAd,EAAiC,QAAjC,CAAzB;EACA,MAAAC,wBAAA,CAA4B,gBAA5B;EACA,aAAO,IAAI,OAAJ,CAAY,gBAAZ,CAAP;EACD;EAxKH;EAAA;EAAA,WAyKE,8BACE,qBADF,EAC0D;EAExD,UAAM,gBAAgB,GAAGD,QAAA,CAAY,qBAAZ,CAAzB;EACA,MAAAC,wBAAA,CAA4B,gBAA5B;EACA,aAAO,IAAI,OAAJ,CAAY,gBAAZ,CAAP;EACD;EA/KH;EAAA;EAAA,WAgLE,cAAY,IAAZ,EAAmC;EACjC,UAAIJ,iBAAA,CAAqB,IAArB,CAAJ,EAAgC;EAC9B,eAAO,IAAI,OAAJ,CAAY,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAnB,CAAP;EACD;;EACD,aAAOgB,iBAAA,CAAqB,IAArB,CAAP;EACD;EArLH;EAAA;EAAA,WAsLE,iBAAe,QAAf,EAA+C,QAA/C,EAA6E;EAC3E,UAAM,GAAG,GAAGA,iBAAA,CAAqB,QAArB,CAAZ;EACA,UAAM,GAAG,GAAGA,iBAAA,CAAqB,QAArB,CAAZ;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,GAAD,EAAM,gBAAN,CAArB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,GAAD,EAAM,gBAAN,CAArB;EACA,UAAI,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,KAArB,CAAJ,EAAiC,OAAO,CAAC,CAAR;EACjC,UAAI,IAAI,CAAC,WAAL,CAAiB,KAAjB,EAAwB,KAAxB,CAAJ,EAAoC,OAAO,CAAP;EACpC,aAAO,CAAP;EACD;EA9LH;;EAAA;EAAA;EAkMA,kBAAkB,CAAC,OAAD,EAAU,kBAAV,CAAlB;;;ECnLA,IAAM,aAAa,GAAG,KAAK,CAAC,SAAN,CAAgB,QAAtC;EACA,IAAM,kBAAkB,GAAG,KAAK,CAAC,SAAN,CAAgB,IAA3C;EACA,IAAM,kBAAkB,GAAG,UAAU,CAAC,IAAX,CAAgB,cAA3C;EACA,IAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,IAAlC;EACA,IAAM,OAAO,GAAG,IAAI,CAAC,GAArB;EACA,IAAM,SAAS,GAAG,IAAI,CAAC,KAAvB;EACA,IAAM,aAAa,GAAG,MAAM,CAAC,OAA7B;EACA,IAAM,UAAU,GAAG,MAAM,CAAC,IAA1B;EA4DA;;;EAGG;;EACH,IAAM,IAAI,GAAG,EAAb;EAMA;;;;;;;;;;;EAWG;;MACU,QAAb;EACE,oBAAY,OAAZ,EAA6C;EAAA;;EAC3C;EACA;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,UAAJ,CAAe,kCAAf,CAAN;EACD;;EAED,QAAM,EAAE,GAAGd,QAAA,CAAY,OAAZ,CAAX;EACA,QAAI,CAACqB,iBAAA,CAAqB,EAArB,CAAL,EAA+B,MAAM,IAAI,UAAJ,uCAA8C,EAA9C,EAAN;EAC/B,IAAA,WAAW,CAAC,IAAD,CAAX;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,WAAP,EAAoB,EAApB,CAAP;;EAEA,IAAW;EACT,MAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpC,QAAA,KAAK,YAAK,KAAK,MAAM,CAAC,WAAZ,CAAL,eAAkC,EAAlC,MAD+B;EAEpC,QAAA,QAAQ,EAAE,KAF0B;EAGpC,QAAA,UAAU,EAAE,KAHwB;EAIpC,QAAA,YAAY,EAAE;EAJsB,OAAtC;EAMD;EACF;;EArBH;EAAA;EAAA,SAsBE,eAAM;EACJ,UAAI,CAACC,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOtB,QAAA,CAAY,IAAZ,CAAP;EACD;EAzBH;EAAA;EAAA,WA0BE,wBACE,MADF,EAEuD;EAAA,UAArD,YAAqD,uEAAT,SAAS;EAErD,UAAI,CAACsB,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAACN,QAAA,CAAY,MAAZ,CAAL,EAA0B,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAC1B,UAAM,OAAO,GAAGR,gBAAA,CAAoB,YAApB,CAAhB;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,cAAjC,CAAgD,MAAhD,EAAwD,OAAxD,EAAiE,IAAjE,CAAP;EACD;EAlCH;EAAA;EAAA,WAmCE,6BACE,MADF,EAE4D;EAAA,UAA1D,YAA0D,uEAAT,SAAS;EAE1D,UAAI,CAACc,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAACN,QAAA,CAAY,MAAZ,CAAL,EAA0B,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAC1B,UAAM,OAAO,GAAGR,gBAAA,CAAoB,YAApB,CAAhB;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,mBAAjC,CAAqD,MAArD,EAA6D,OAA7D,EAAsE,IAAtE,CAAP;EACD;EA3CH;EAAA;EAAA,WA4CE,4BACE,MADF,EAE2D;EAAA,UAAzD,YAAyD,uEAAT,SAAS;EAEzD,UAAI,CAACc,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAACN,QAAA,CAAY,MAAZ,CAAL,EAA0B,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAC1B,UAAM,OAAO,GAAGR,gBAAA,CAAoB,YAApB,CAAhB;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,kBAAjC,CAAoD,MAApD,EAA4D,OAA5D,EAAqE,IAArE,CAAP;EACD;EApDH;EAAA;EAAA,WAqDE,gBAAO,OAAP,EAAkC;EAChC,UAAI,CAACc,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,WAAW,GAAG,EAApB;EACA,UAAM,OAAO,GAAG,IAAI,GAAJ,CAAQ,CACtB,MADsB,EAEtB,OAFsB,EAGtB,WAHsB,EAItB,KAJsB,EAKtB,MALsB,EAMtB,QANsB,EAOtB,QAPsB,EAQtB,aARsB,EAStB,aATsB,EAUtB,YAVsB,CAAR,CAAhB;;EAHgC,iDAeb,OAfa;EAAA;;EAAA;EAehC,4DAA2B;EAAA,cAAhB,IAAgB;EACzB,cAAI,OAAO,IAAP,KAAgB,QAApB,EAA8B,MAAM,IAAI,SAAJ,CAAc,gBAAd,CAAN;EAC9B,cAAI,CAAC,OAAO,CAAC,GAAR,CAAY,IAAZ,CAAL,EAAwB,MAAM,IAAI,UAAJ,8BAAqC,IAArC,EAAN;EACxB,UAAA,OAAO,CAAC,MAAR,CAAe,IAAf;EACA,UAAA,kBAAkB,CAAC,IAAnB,CAAwB,WAAxB,EAAqC,IAArC;EACD;EApB+B;EAAA;EAAA;EAAA;EAAA;;EAqBhC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,MAAjC,CAAwC,WAAxC,CAAP;EACD;EA3EH;EAAA;EAAA,WA4EE,qBAAY,MAAZ,EAA8C,gBAA9C,EAAwF;EACtF,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,WAAjC,CAA6C,MAA7C,EAAqD,gBAArD,CAAP;EACD;EA/EH;EAAA;EAAA,WAgFE,iBACE,SADF,EAEE,aAFF,EAGgD;EAAA,UAA9C,YAA8C,uEAAT,SAAS;EAE9C,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,IAAI,GAAGC,cAAA,CAAkB,SAAlB,CAAb;EACA,UAAM,QAAQ,GAAGC,kBAAA,CAAsB,aAAtB,CAAjB;EACA,UAAM,OAAO,GAAGhB,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,QAAQ,GAAGiB,kBAAA,CAAsB,OAAtB,CAAjB;;EACA,gCAAiBC,eAAA,CACf,OAAO,CAAC,QAAD,EAAW,IAAX,CADQ,EAEf,OAAO,CAAC,QAAD,EAAW,KAAX,CAFQ,EAGf,OAAO,CAAC,QAAD,EAAW,OAAX,CAHQ,EAIf,OAAO,CAAC,QAAD,EAAW,OAAX,CAJQ,EAKf,OAAO,CAAC,QAAD,EAAW,YAAX,CALQ,EAMf,OAAO,CAAC,QAAD,EAAW,YAAX,CANQ,EAOf,OAAO,CAAC,QAAD,EAAW,WAAX,CAPQ,EAQf,KARe,CAAjB;EAAA,UAAQ,IAAR,uBAAQ,IAAR;;EAUA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,OAAjC,CACL,IADK,EAEL,OAAO,CAAC,QAAD,EAAW,KAAX,CAFF,EAGL,OAAO,CAAC,QAAD,EAAW,MAAX,CAHF,EAIL,OAAO,CAAC,QAAD,EAAW,KAAX,CAJF,EAKL,IALK,EAML,QANK,EAOL,IAPK,CAAP;EASD;EA7GH;EAAA;EAAA,WA8GE,mBACE,QADF,EAEE,QAFF,EAGkD;EAAA,UAAhD,YAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACJ,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,GAAG,GAAGC,cAAA,CAAkB,QAAlB,CAAZ;EACA,UAAM,GAAG,GAAGA,cAAA,CAAkB,QAAlB,CAAZ;EACA,UAAM,OAAO,GAAGf,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAI,WAAW,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,aAA5B,EAA2C,MAA3C,EAAmD,MAAnD,CAAlB;EACA,UAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,KAAd;;EAC5B,kCAAuC,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,SAAjC,CAA2C,GAA3C,EAAgD,GAAhD,EAAqD,WAArD,CAAvC;EAAA,UAAQ,KAAR,yBAAQ,KAAR;EAAA,UAAe,MAAf,yBAAe,MAAf;EAAA,UAAuB,KAAvB,yBAAuB,KAAvB;EAAA,UAA8B,IAA9B,yBAA8B,IAA9B;;EACA,UAAM,QAAQ,GAAG,YAAY,CAAC,qBAAD,CAA7B;EACA,aAAO,IAAI,QAAJ,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAA5B,EAAmC,IAAnC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,CAAP;EACD;EA5HH;EAAA;EAAA,WA6HE,cAAK,SAAL,EAAiC;EAC/B,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACa,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,IAAjC,CAAsC,IAAtC,CAAP;EACD;EAlIH;EAAA;EAAA,WAmIE,eAAM,SAAN,EAAmC;EACjC,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAIzB,kBAAA,CAAsB,IAAtB,CAAJ,EAAiC,MAAM,IAAI,SAAJ,CAAc,wCAAd,CAAN;EACjC,UAAI,CAACD,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,KAAjC,CAAuC,IAAvC,CAAP;EACD;EAzIH;EAAA;EAAA,WA0IE,mBAAU,SAAV,EAA2C;EACzC,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAD,IAAiC,CAACC,kBAAA,CAAsB,IAAtB,CAAtC,EAAmE,IAAI,GAAG0B,cAAA,CAAkB,IAAlB,CAAP;EACnE,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,SAAjC,CACL,IADK,CAAP;EAGD;EAjJH;EAAA;EAAA,WAkJE,aAAI,SAAJ,EAA+B;EAC7B,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAACzB,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,IAAI,GAAG0B,cAAA,CAAkB,IAAlB,CAAP;EAClC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,GAAjC,CAAqC,IAArC,CAAP;EACD;EAvJH;EAAA;EAAA,WAwJE,aAAI,SAAJ,EAA+B;EAC7B,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,GAAjC,CAAqC,IAArC,CAAP;EACD;EA7JH;EAAA;EAAA,WA8JE,iBAAQ,SAAR,EAAuC;EACrC,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,OAAjC,CAAyC,IAAzC,CAAP;EACD;EAnKH;EAAA;EAAA,WAoKE,mBAAU,SAAV,EAA2C;EACzC,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,IAAI,GAAGC,cAAA,CAAkB,SAAlB,CAAb;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,SAAjC,CAA2C,IAA3C,CAAP;EACD;EAxKH;EAAA;EAAA,WAyKE,mBAAU,SAAV,EAA2C;EACzC,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,IAAI,GAAGC,cAAA,CAAkB,SAAlB,CAAb;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,SAAjC,CAA2C,IAA3C,CAAP;EACD;EA7KH;EAAA;EAAA,WA8KE,oBAAW,SAAX,EAA6C;EAC3C,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,IAAI,GAAGC,cAAA,CAAkB,SAAlB,CAAb;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,UAAjC,CAA4C,IAA5C,CAAP;EACD;EAlLH;EAAA;EAAA,WAmLE,oBAAW,SAAX,EAA6C;EAC3C,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,IAAI,GAAGC,cAAA,CAAkB,SAAlB,CAAb;EACA,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,UAAjC,CAA4C,IAA5C,CAAP;EACD;EAvLH;EAAA;EAAA,WAwLE,qBAAY,SAAZ,EAA+C;EAC7C,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,WAAjC,CAA6C,IAA7C,CAAP;EACD;EA7LH;EAAA;EAAA,WA8LE,oBAAW,SAAX,EAA6C;EAC3C,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,UAAjC,CAA4C,IAA5C,CAAP;EACD;EAnMH;EAAA;EAAA,WAoME,sBAAa,SAAb,EAAiD;EAC/C,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,YAAjC,CAA8C,IAA9C,CAAP;EACD;EAzMH;EAAA;EAAA,WA0ME,oBAAW,SAAX,EAA6C;EAC3C,UAAI,IAAI,GAAG,SAAX;EACA,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAAC1B,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,IAAI,GAAG2B,cAAA,CAAkB,IAAlB,CAAP;EACnC,aAAO,IAAI,CAAC,OAAO,CAAC,IAAD,EAAO,WAAP,CAAR,CAAJ,CAAiC,UAAjC,CAA4C,IAA5C,CAAP;EACD;EA/MH;EAAA;EAAA,WAgNE,oBAAQ;EACN,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,WAAP,CAAd;EACD;EAnNH;EAAA;EAAA,WAoNE,kBAAM;EACJ,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOtB,QAAA,CAAY,IAAZ,CAAP;EACD;EAvNH;EAAA;EAAA,WAwNE,cAAY,IAAZ,EAAmC;EACjC,aAAOiB,kBAAA,CAAsB,IAAtB,CAAP;EACD;EA1NH;;EAAA;EAAA;EA8NA,kBAAkB,CAAC,QAAD,EAAW,mBAAX,CAAlB;EACA,eAAe,CAAC,wBAAD,EAA2B,QAAQ,CAAC,IAApC,CAAf;EAEA;;;;EAIG;;EACH,IAAI,CAAC,SAAD,CAAJ,GAAkB;EAChB,EAAA,cADgB,0BACD,WADC,EACY,OADZ,EACqB,QADrB,EAC6B;EAC3C,QAAM,QAAQ,GAAGQ,kBAAA,CAAsB,OAAtB,CAAjB;EACA,QAAI,MAAM,GAAGE,qBAAA,CAAyB,WAAzB,EAAsC,CAAC,KAAD,EAAQ,OAAR,EAAiB,WAAjB,EAA8B,MAA9B,CAAtC,EAA6E,CAAC,MAAD,EAAS,KAAT,CAA7E,CAAb;EACA,IAAA,MAAM,GAAG,wBAAwB,CAAC,MAAD,CAAjC;EACA,mBAA2B,MAA3B;EAAA,QAAM,IAAN,YAAM,IAAN;EAAA,QAAY,KAAZ,YAAY,KAAZ;EAAA,QAAmB,GAAnB,YAAmB,GAAnB;;EAJ2C,8BAKnBC,eAAA,CAAmB,IAAnB,EAAyB,KAAzB,EAAgC,GAAhC,EAAqC,QAArC,CALmB;;EAKxC,IAAA,IALwC,uBAKxC,IALwC;EAKlC,IAAA,KALkC,uBAKlC,KALkC;EAK3B,IAAA,GAL2B,uBAK3B,GAL2B;EAM3C,WAAOC,kBAAA,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC,GAAnC,EAAwC,QAAxC,CAAP;EACD,GARe;EAShB,EAAA,mBATgB,+BASI,WATJ,EASiB,OATjB,EAS0B,QAT1B,EASkC;EAChD,QAAM,QAAQ,GAAGJ,kBAAA,CAAsB,OAAtB,CAAjB;EACA,QAAI,MAAM,GAAGE,qBAAA,CAAyB,WAAzB,EAAsC,CAAC,OAAD,EAAU,WAAV,EAAuB,MAAvB,CAAtC,EAAsE,CAAC,MAAD,CAAtE,CAAb;EACA,IAAA,MAAM,GAAG,wBAAwB,CAAC,MAAD,CAAjC;EACA,mBAAsB,MAAtB;EAAA,QAAM,IAAN,YAAM,IAAN;EAAA,QAAY,KAAZ,YAAY,KAAZ;;EAJgD,gCAK7BG,oBAAA,CAAwB,IAAxB,EAA8B,KAA9B,EAAqC,QAArC,CAL6B;;EAK7C,IAAA,IAL6C,yBAK7C,IAL6C;EAKvC,IAAA,KALuC,yBAKvC,KALuC;EAMhD,WAAOC,uBAAA,CAA2B,IAA3B,EAAiC,KAAjC,EAAwC,QAAxC;EAAkD;EAAwB,KAA1E,CAAP;EACD,GAhBe;EAiBhB,EAAA,kBAjBgB,8BAiBG,WAjBH,EAiBgB,OAjBhB,EAiByB,QAjBzB,EAiBiC;EAC/C,QAAM,QAAQ,GAAGN,kBAAA,CAAsB,OAAtB,CAAjB;EACA,QAAI,MAAM,GAAGE,qBAAA,CAAyB,WAAzB,EAAsC,CAAC,KAAD,EAAQ,OAAR,EAAiB,WAAjB,EAA8B,MAA9B,CAAtC,EAA6E,CAAC,KAAD,CAA7E,CAAb;;EACA,QAAI,MAAM,CAAC,KAAP,KAAiB,SAAjB,IAA8B,MAAM,CAAC,IAAP,KAAgB,SAA9C,IAA2D,MAAM,CAAC,SAAP,KAAqB,SAApF,EAA+F;EAC7F,YAAM,IAAI,SAAJ,CAAc,8CAAd,CAAN;EACD;;EACD,QAAM,OAAO,GAAG,MAAM,CAAC,SAAP,KAAqB,SAArC;EACA,QAAM,gBAAgB,GAAG,IAAzB;EACA,IAAA,MAAM,GAAG,wBAAwB,CAAC,MAAD,CAAjC;EACA,mBAA2B,MAA3B;EAAA,QAAM,KAAN,YAAM,KAAN;EAAA,QAAa,GAAb,YAAa,GAAb;EAAA,QAAkB,IAAlB,YAAkB,IAAlB;;EAT+C,+BAU7BC,eAAA,CAAmB,OAAO,GAAG,IAAH,GAAU,gBAApC,EAAsD,KAAtD,EAA6D,GAA7D,EAAkE,QAAlE,CAV6B;;EAU5C,IAAA,KAV4C,wBAU5C,KAV4C;EAUrC,IAAA,GAVqC,wBAUrC,GAVqC;EAW/C,WAAOI,sBAAA,CAA0B,KAA1B,EAAiC,GAAjC,EAAsC,QAAtC,EAAgD,gBAAhD,CAAP;EACD,GA7Be;EA8BhB,EAAA,MA9BgB,kBA8BT,QA9BS,EA8BH;EACX,WAAO,QAAP;EACD,GAhCe;EAiChB,EAAA,WAjCgB,uBAiCJ,MAjCI,EAiCI,gBAjCJ,EAiCoB;EAClC,QAAM,MAAM,GAAkB,EAA9B;;EADkC,gDAEZ,UAAU,CAAC,MAAD,CAFE;EAAA;;EAAA;EAElC,6DAA0C;EAAA,YAA/B,OAA+B;EACxC,YAAI,OAAO,KAAK,OAAZ,IAAuB,OAAO,KAAK,WAAvC,EAAoD;EACpD,QAAA,MAAM,CAAC,OAAD,CAAN,GAAkB,MAAM,CAAC,OAAD,CAAxB;EACD;EALiC;EAAA;EAAA;EAAA;EAAA;;EAMlC,QAAM,OAAO,GAAG,UAAU,CAAC,gBAAD,CAA1B;;EANkC,gDAOZ,OAPY;EAAA;;EAAA;EAOlC,6DAA+B;EAAA,YAApB,QAAoB;EAC7B,QAAA,MAAM,CAAC,QAAD,CAAN,GAAkB,gBAAgB,CAAC,QAAD,CAAlC;EACD;EATiC;EAAA;EAAA;EAAA;EAAA;;EAUlC,QAAI,CAAC,aAAa,CAAC,IAAd,CAAmB,OAAnB,EAA4B,OAA5B,CAAD,IAAyC,CAAC,aAAa,CAAC,IAAd,CAAmB,OAAnB,EAA4B,WAA5B,CAA9C,EAAwF;EACtF,UAAQ,KAAR,GAA6B,MAA7B,CAAQ,KAAR;EAAA,UAAe,SAAf,GAA6B,MAA7B,CAAe,SAAf;EACA,UAAI,KAAK,KAAK,SAAd,EAAyB,MAAM,CAAC,KAAP,GAAe,KAAf;EACzB,UAAI,SAAS,KAAK,SAAlB,EAA6B,MAAM,CAAC,SAAP,GAAmB,SAAnB;EAC9B;;EACD,WAAO,MAAP;EACD,GAjDe;EAkDhB,EAAA,OAlDgB,mBAkDR,IAlDQ,EAkDF,KAlDE,EAkDK,MAlDL,EAkDa,KAlDb,EAkDoB,IAlDpB,EAkD0B,QAlD1B,EAkDoC,QAlDpC,EAkD4C;EAC1D,QAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlB;EACA,QAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAnB;EACA,QAAI,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAAjB;;EAH0D,yBAIlCC,UAAA,CAAc,IAAd,EAAoB,KAApB,EAA2B,GAA3B,EAAgC,KAAhC,EAAuC,MAAvC,EAA+C,KAA/C,EAAsD,IAAtD,EAA4D,QAA5D,CAJkC;;EAIvD,IAAA,IAJuD,kBAIvD,IAJuD;EAIjD,IAAA,KAJiD,kBAIjD,KAJiD;EAI1C,IAAA,GAJ0C,kBAI1C,GAJ0C;EAK1D,WAAOJ,kBAAA,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC,GAAnC,EAAwC,QAAxC,CAAP;EACD,GAxDe;EAyDhB,EAAA,SAzDgB,qBAyDN,GAzDM,EAyDD,GAzDC,EAyDI,WAzDJ,EAyDe;EAC7B,WAAOK,iBAAA,CACL,OAAO,CAAC,GAAD,EAAM,QAAN,CADF,EAEL,OAAO,CAAC,GAAD,EAAM,SAAN,CAFF,EAGL,OAAO,CAAC,GAAD,EAAM,OAAN,CAHF,EAIL,OAAO,CAAC,GAAD,EAAM,QAAN,CAJF,EAKL,OAAO,CAAC,GAAD,EAAM,SAAN,CALF,EAML,OAAO,CAAC,GAAD,EAAM,OAAN,CANF,EAOL,WAPK,CAAP;EASD,GAnEe;EAoEhB,EAAA,IApEgB,gBAoEX,IApEW,EAoEP;EACP,WAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD,GAtEe;EAuEhB,EAAA,GAvEgB,iBAuEb;EACD,WAAO,SAAP;EACD,GAzEe;EA0EhB,EAAA,OA1EgB,qBA0ET;EACL,WAAO,SAAP;EACD,GA5Ee;EA6EhB,EAAA,KA7EgB,iBA6EV,IA7EU,EA6EN;EACR,WAAO,OAAO,CAAC,IAAD,EAAO,SAAP,CAAd;EACD,GA/Ee;EAgFhB,EAAA,SAhFgB,qBAgFN,IAhFM,EAgFF;EACZ,WAAO,cAAc,CAAC,OAAO,CAAC,IAAD,EAAO,SAAP,CAAR,CAArB;EACD,GAlFe;EAmFhB,EAAA,GAnFgB,eAmFZ,IAnFY,EAmFR;EACN,WAAO,OAAO,CAAC,IAAD,EAAO,OAAP,CAAd;EACD,GArFe;EAsFhB,EAAA,SAtFgB,qBAsFN,IAtFM,EAsFF;EACZ,WAAOC,SAAA,CAAa,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB,EAAsC,OAAO,CAAC,IAAD,EAAO,SAAP,CAA7C,EAAgE,OAAO,CAAC,IAAD,EAAO,OAAP,CAAvE,CAAP;EACD,GAxFe;EAyFhB,EAAA,SAzFgB,qBAyFN,IAzFM,EAyFF;EACZ,WAAOC,SAAA,CAAa,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB,EAAsC,OAAO,CAAC,IAAD,EAAO,SAAP,CAA7C,EAAgE,OAAO,CAAC,IAAD,EAAO,OAAP,CAAvE,CAAP;EACD,GA3Fe;EA4FhB,EAAA,UA5FgB,sBA4FL,IA5FK,EA4FD;EACb,WAAOC,UAAA,CAAc,OAAO,CAAC,IAAD,EAAO,QAAP,CAArB,EAAuC,OAAO,CAAC,IAAD,EAAO,SAAP,CAA9C,EAAiE,OAAO,CAAC,IAAD,EAAO,OAAP,CAAxE,CAAP;EACD,GA9Fe;EA+FhB,EAAA,UA/FgB,wBA+FN;EACR,WAAO,CAAP;EACD,GAjGe;EAkGhB,EAAA,WAlGgB,uBAkGJ,IAlGI,EAkGA;EACd,WAAOC,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAzB,EAA2C,OAAO,CAAC,IAAD,EAAO,SAAP,CAAlD,CAAP;EACD,GApGe;EAqGhB,EAAA,UArGgB,sBAqGL,SArGK,EAqGI;EAClB,QAAI,IAAI,GAAG,SAAX;EACA,QAAI,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,CAAZ,EAA8B,IAAI,GAAGf,cAAA,CAAkB,IAAlB,CAAP;EAC9B,WAAOgB,QAAA,CAAY,OAAO,CAAC,IAAD,EAAO,QAAP,CAAnB,IAAuC,GAAvC,GAA6C,GAApD;EACD,GAzGe;EA0GhB,EAAA,YA1GgB,0BA0GJ;EACV,WAAO,EAAP;EACD,GA5Ge;EA6GhB,EAAA,UA7GgB,sBA6GL,SA7GK,EA6GI;EAClB,QAAI,IAAI,GAAG,SAAX;EACA,QAAI,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,CAAZ,EAA8B,IAAI,GAAGhB,cAAA,CAAkB,IAAlB,CAAP;EAC9B,WAAOgB,QAAA,CAAY,OAAO,CAAC,IAAD,EAAO,QAAP,CAAnB,CAAP;EACD;EAjHe,CAAlB;;EA6KA,SAAS,mBAAT,CAA6B,SAA7B,EAA8C;EAC5C,MAAI,CAAC,SAAS,CAAC,UAAV,CAAqB,GAArB,CAAL,EAAgC;EAC9B,UAAM,IAAI,UAAJ,+BAAsC,SAAtC,uCAAN;EACD;;EACD,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,KAAV,CAAgB,CAAhB,CAAf;EACA,MAAI,KAAK,CAAC,KAAD,CAAT,EAAkB,MAAM,IAAI,UAAJ,+BAAsC,SAAtC,EAAN;EAClB,SAAO,KAAP;EACD;;EAED,SAAS,cAAT,CAAwB,KAAxB,EAA4D;EAAA,MAAZ,IAAY,uEAAL,KAAK;EAC1D,oBAAW,KAAK,CAAC,QAAN,GAAiB,QAAjB,CAA0B,CAA1B,EAA6B,GAA7B,CAAX,SAA+C,IAAI,GAAG,GAAH,GAAS,EAA5D;EACD;EAED;;;;EAIK;;;EACL,SAAS,wBAAT,CACE,YADF,EAGoB;EAAA,MADlB,QACkB,uEADe,SACf;EAAA,MAAlB,aAAkB,uEAAF,EAAE;EAElB,MAAM,KAAN,GAA2B,YAA3B,CAAM,KAAN;EAAA,MAAa,SAAb,GAA2B,YAA3B,CAAa,SAAb;;EACA,MAAI,SAAS,KAAK,SAAlB,EAA6B;EAC3B,QAAI,KAAK,KAAK,SAAd,EAAyB,MAAM,IAAI,SAAJ,CAAc,wCAAd,CAAN,CADE;EAG3B;EACA;;EACA,QAAI,QAAQ,KAAK,QAAjB,EAA2BC,aAAA,CAAiB,KAAjB,EAAwB,CAAxB,EAA2B,aAA3B;EAC3B,QAAI,QAAQ,KAAK,WAAjB,EAA8B,KAAK,GAAGC,gBAAA,CAAoB,KAApB,EAA2B,CAA3B,EAA8B,aAA9B,CAAR;EAC9B,IAAA,SAAS,GAAG,cAAc,CAAC,KAAD,CAA1B;EACD,GARD,MAQO;EACL,QAAM,UAAU,GAAG,mBAAmB,CAAC,SAAD,CAAtC;;EACA,QAAI,KAAK,KAAK,SAAV,IAAuB,KAAK,KAAK,UAArC,EAAiD;EAC/C,YAAM,IAAI,UAAJ,qBAA4B,SAA5B,wBAAmD,KAAnD,qCAAN;EACD;;EACD,QAAI,SAAS,KAAK,cAAc,CAAC,UAAD,CAAhC,EAA8C;EAC5C,YAAM,IAAI,UAAJ,+BAAsC,SAAtC,EAAN;EACD;;EACD,IAAA,KAAK,GAAG,UAAR;EACA,QAAI,KAAK,GAAG,CAAR,IAAa,KAAK,GAAG,aAAzB,EAAwC,MAAM,IAAI,UAAJ,8BAAqC,SAArC,EAAN;EACzC;;EACD,2CAAY,YAAZ;EAA0B,IAAA,KAAK,EAAL,KAA1B;EAAiC,IAAA,SAAS,EAAT;EAAjC;EACD;EAID;;;;;;;EAOG;;;MACG;EAMJ,0BAAY,YAAZ,EAAyC;EAAA;;EALzC,SAAA,GAAA,GAAM,IAAI,GAAJ,EAAN;EACA,SAAA,KAAA,GAAQ,CAAR;EAEA,SAAA,IAAA,GAAO,CAAP;EACA,SAAA,MAAA,GAAS,CAAT;EAEE,SAAK,GAAL,GAAW,UAAU,CAAC,WAAX,GAAyB,UAAU,CAAC,WAAX,CAAuB,GAAvB,EAAzB,GAAwD,IAAI,CAAC,GAAL,EAAnE;;EACA,QAAI,YAAY,KAAK,SAArB,EAAgC;EAC9B,UAAI,CAAC,GAAG,CAAR;;EAD8B,kDAEV,YAAY,CAAC,GAAb,CAAiB,OAAjB,EAFU;EAAA;;EAAA;EAE9B,+DAAgD;EAAA;;EAAA,cAArC,KAAqC;EAC9C,cAAI,EAAE,CAAF,GAAM,cAAc,CAAC,iBAAzB,EAA4C;;EAC5C,4BAAK,GAAL,EAAS,GAAT,qCAAgB,KAAhB;EACD;EAL6B;EAAA;EAAA;EAAA;EAAA;EAM/B;EACF;;;;aACD,aAAI,GAAJ,EAAe;EACb,UAAM,MAAM,GAAG,KAAK,GAAL,CAAS,GAAT,CAAa,GAAb,CAAf;;EACA,UAAI,MAAJ,EAAY;EACV,aAAK,IAAL;EACA,aAAK,MAAL;EACD;;EACD,WAAK,KAAL;EACA,aAAO,MAAP;EACD;;;aACD,aAAI,GAAJ,EAAiB,KAAjB,EAA+B;EAC7B,WAAK,GAAL,CAAS,GAAT,CAAa,GAAb,EAAkB,KAAlB;EACA,WAAK,MAAL;EACA,WAAK,MAAL;EACD;;;aACD,kBAAM;EACJ;;;;;EAKE;EACH;;;aACD,mBAAU,GAAV,EAA0B;EACxB,UAAI,cAAc,CAAC,SAAf,CAAyB,GAAzB,CAA6B,GAA7B,CAAJ,EAAuC,MAAM,IAAI,UAAJ,CAAe,uBAAf,CAAN;EACvC,MAAA,cAAc,CAAC,SAAf,CAAyB,GAAzB,CAA6B,GAA7B,EAAkC,IAAlC;EACA,WAAK,MAAL;EACD;EAKD;;;;;EAKG;;;;aACH,2BAAyB,GAAzB,EAAyC;EACvC,UAAI,KAAK,GAAG,cAAc,CAAC,SAAf,CAAyB,GAAzB,CAA6B,GAA7B,CAAZ;;EACA,UAAI,CAAC,KAAL,EAAY;EACV,QAAA,KAAK,GAAG,IAAI,cAAJ,EAAR;EACA,QAAA,cAAc,CAAC,SAAf,CAAyB,GAAzB,CAA6B,GAA7B,EAAkC,KAAlC;EACD;;EACD,aAAO,KAAP;EACD;;;;;;EAhBM,cAAA,CAAA,SAAA,GAAY,IAAI,OAAJ,EAAZ;EACA,cAAA,CAAA,iBAAA,GAAoB,IAApB;;EAkBT,SAAS,kBAAT,OAAgH;EAAA,MAAlF,OAAkF,QAAlF,OAAkF;EAAA,MAAzE,QAAyE,QAAzE,QAAyE;EAAA,MAA/D,MAA+D,QAA/D,MAA+D;EAC9G,MAAM,UAAU,GAAGC,aAAA,CAAiB,OAAjB,CAAnB;EACA,MAAM,WAAW,GAAGC,qBAAA,CAAyB,QAAzB,CAApB;EACA,MAAM,SAAS,GAAGA,qBAAA,CAAyB,MAAzB,CAAlB;EACA,mBAAU,UAAV,cAAwB,WAAxB,cAAuC,SAAvC;EACD;;EAED,SAAS,cAAT,CAAwB,GAAxB,EAA0C,GAA1C,EAA0D;EACxD,SAAO;EACL,IAAA,KAAK,EAAE,GAAG,CAAC,IAAJ,GAAW,GAAG,CAAC,IADjB;EAEL,IAAA,MAAM,EAAE,GAAG,CAAC,KAAJ,GAAY,GAAG,CAAC,KAFnB;EAGL,IAAA,IAAI,EAAE,GAAG,CAAC,GAAJ,GAAU,GAAG,CAAC;EAHf,GAAP;EAKD;EAED;;EAEG;;;MACY;EAAf,wBAAA;EAAA;;EAojBE;EACA;EACA,SAAA,SAAA,GAA+C,OAA/C,CAtjBF;;EAwjBE,SAAA,MAAA,GAAS,IAAT;EA2CD;;;;aAvlBC,wBAAY;EACV;EACA;EACA;EACA;EACA;EACA;EACA,UAAI,OAAO,KAAK,SAAZ,KAA0B,WAA9B,EAA2C;EACzC,aAAK,SAAL,GAAiB,IAAI,kBAAJ,sBAAqC,KAAK,EAA1C,GAAgD;EAC/D,UAAA,GAAG,EAAE,SAD0D;EAE/D,UAAA,KAAK,EAAE,SAFwD;EAG/D,UAAA,IAAI,EAAE,SAHyD;EAI/D,UAAA,GAAG,EAAE,KAAK,SAJqD;EAK/D,UAAA,QAAQ,EAAE;EALqD,SAAhD,CAAjB;EAOD;;EACD,aAAO,KAAK,SAAZ;EACD;;;aACD,2BAAkB,OAAlB,EAAmC,KAAnC,EAAwD;EAAA;;EACtD,UAAc,OAAd,GAAwD,OAAxD,CAAQ,IAAR;EAAA,UAA8B,QAA9B,GAAwD,OAAxD,CAAuB,KAAvB;EAAA,UAA6C,MAA7C,GAAwD,OAAxD,CAAwC,GAAxC;EACA,UAAM,GAAG,GAAG,IAAI,CAAC,SAAL,CAAe;EAAE,QAAA,IAAI,EAAE,mBAAR;EAA6B,QAAA,OAAO,EAAP,OAA7B;EAAsC,QAAA,QAAQ,EAAR,QAAtC;EAAgD,QAAA,MAAM,EAAN,MAAhD;EAAwD,QAAA,EAAE,EAAE,KAAK;EAAjE,OAAf,CAAZ;EACA,UAAM,MAAM,GAAG,KAAK,CAAC,GAAN,CAAU,GAAV,CAAf;EACA,UAAI,MAAJ,EAAY,OAAO,MAAP;EAEZ,UAAM,cAAc,GAAG,KAAK,YAAL,EAAvB;EACA,UAAI,KAAJ,EAAW,SAAX;;EACA,UAAI;EACF,QAAA,SAAS,GAAG,kBAAkB,CAAC;EAAE,UAAA,OAAO,EAAP,OAAF;EAAW,UAAA,QAAQ,EAAR,QAAX;EAAqB,UAAA,MAAM,EAAN;EAArB,SAAD,CAA9B;EACA,QAAA,KAAK,GAAG,cAAc,CAAC,aAAf,CAA6B,IAAI,IAAJ,CAAS,SAAT,CAA7B,CAAR;EACD,OAHD,CAGE,OAAO,CAAP,EAAmB;EACnB,cAAM,IAAI,UAAJ,6BAAoC,IAAI,CAAC,SAAL,CAAe;EAAE,UAAA,OAAO,EAAP,OAAF;EAAW,UAAA,QAAQ,EAAR,QAAX;EAAqB,UAAA,MAAM,EAAN;EAArB,SAAf,CAApC,EAAN;EACD;;EACD,UAAM,MAAM,GAA8B,EAA1C;;EAdsD,kDAe1B,KAf0B;EAAA;;EAAA;EAetD,+DAAmC;EAAA;EAAA,cAAxB,IAAwB,gBAAxB,IAAwB;EAAA,cAAlB,KAAkB,gBAAlB,KAAkB;EACjC,cAAI,IAAI,KAAK,MAAb,EAAqB,MAAM,CAAC,OAAP,GAAiB,CAAC,KAAlB,CADY;;EAGjC,cAAI,IAAI,KAAM,aAAd,EAA8D,MAAM,CAAC,OAAP,GAAiB,CAAC,KAAlB;;EAC9D,cAAI,IAAI,KAAK,OAAb,EAAsB;EACpB,gBAAM,OAAO,GAAG,kBAAkB,IAAlB,CAAuB,KAAvB,CAAhB;;EACA,gBAAI,CAAC,OAAD,IAAY,OAAO,CAAC,MAAR,IAAkB,CAA9B,IAAoC,CAAC,OAAO,CAAC,CAAD,CAAR,IAAe,CAAC,OAAO,CAAC,CAAD,CAA/D,EAAqE;EACnE,oBAAM,IAAI,UAAJ,6BAAoC,KAApC,EAAN;EACD,aAJmB;EAMpB;EACA;EACA;EACA;EACA;;;EACA,YAAA,MAAM,CAAC,KAAP,GAAe,OAAO,CAAC,CAAD,CAAP,GAAa,CAAC,OAAO,CAAC,CAAD,CAArB,GAA2B,CAA1C;;EACA,gBAAI,MAAM,CAAC,KAAP,GAAe,CAAnB,EAAsB;EACpB,oBAAM,IAAI,UAAJ,CACJ,wBAAiB,KAAjB,mBAA+B,SAA/B,mBAAiD,KAAK,EAAtD,SACE,0EAFE,CAAN;EAID;;EACD,gBAAI,MAAM,CAAC,KAAP,GAAe,EAAnB,EAAuB;EACrB,oBAAM,IAAI,UAAJ,CACJ,wBAAiB,KAAjB,mBAA+B,SAA/B,mBAAiD,KAAK,EAAtD,SACE,0EAFE,CAAN;EAID,aAvBmB;EA0BpB;EACA;EACA;;;EACA,gBAAI,OAAO,CAAC,CAAD,CAAX,EAAgB,MAAM,CAAC,UAAP,GAAoB,OAAO,CAAC,CAAD,CAA3B;EACjB;;EACD,cAAI,IAAI,KAAK,KAAb,EAAoB,MAAM,CAAC,GAAP,GAAa,CAAC,KAAd;;EACpB,cAAI,KAAK,MAAL,IAAe,IAAI,KAAK,KAAxB,IAAiC,KAAK,IAAI,IAA1C,IAAkD,KAAK,KAAK,EAAhE,EAAoE;EAClE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAA,KAAK,GAAG,KAAK,CAAC,KAAN,CAAY,IAAZ,EAAkB,CAAlB,CAAR;EACA,YAAA,MAAM,CAAC,GAAP,GAAa,KAAK,CACf,SADU,CACA,KADA,EAEV,OAFU,CAEF,gsPAFE,EAEiB,EAFjB,EAGV,OAHU,CAGF,GAHE,EAGG,GAHH,EAIV,WAJU,EAAb;EAKD;EACF;EAlEqD;EAAA;EAAA;EAAA;EAAA;;EAmEtD,UAAI,MAAM,CAAC,OAAP,KAAmB,SAAvB,EAAkC;EAChC;EACA;EACA,cAAM,IAAI,UAAJ,kEACsD,KAAK,EAD3D,iDAAN;EAGD,OAzEqD;EA2EtD;;;EACA,UAAI,KAAK,aAAT,EAAwB;EACtB,kCAAyB,KAAK,aAAL,CAAmB,MAAnB,EAA2B,OAA3B,CAAzB;EAAA,YAAQ,GAAR,uBAAQ,GAAR;EAAA,YAAa,OAAb,uBAAa,OAAb;;EACA,QAAA,MAAM,CAAC,GAAP,GAAa,GAAb;EACA,QAAA,MAAM,CAAC,OAAP,GAAiB,OAAjB;EACD;;EACD,UAAI,KAAK,YAAT,EAAuB,KAAK,YAAL,CAAkB,OAAlB;EAEvB,UAAM,YAAY,GAAG,KAAK,kBAAL,CAAwB,MAAxB,EAAgC,KAAhC,EAAuC,WAAvC,EAAoD,IAApD,CAArB;EACA,UAAI,YAAY,CAAC,IAAb,KAAsB,SAA1B,EAAqC,MAAM,IAAI,UAAJ,mCAA0C,IAAI,CAAC,SAAL,CAAe,OAAf,CAA1C,EAAN;EACrC,UAAI,YAAY,CAAC,KAAb,KAAuB,SAA3B,EAAsC,MAAM,IAAI,UAAJ,oCAA2C,IAAI,CAAC,SAAL,CAAe,OAAf,CAA3C,EAAN;EACtC,UAAI,YAAY,CAAC,GAAb,KAAqB,SAAzB,EAAoC,MAAM,IAAI,UAAJ,kCAAyC,IAAI,CAAC,SAAL,CAAe,OAAf,CAAzC,EAAN;EACpC,MAAA,KAAK,CAAC,GAAN,CAAU,GAAV,EAAe,YAAf,EAvFsD;;EAyFtD,OAAC,WAAD,EAAc,QAAd,EAAwB,OAAxB,CAAgC,UAAC,QAAD,EAAa;EAC3C,YAAM,UAAU,GAAG,IAAI,CAAC,SAAL,CAAe;EAChC,UAAA,IAAI,EAAE,mBAD0B;EAEhC,UAAA,IAAI,EAAE,YAAY,CAAC,IAFa;EAGhC,UAAA,KAAK,EAAE,YAAY,CAAC,KAHY;EAIhC,UAAA,GAAG,EAAE,YAAY,CAAC,GAJc;EAKhC,UAAA,QAAQ,EAAR,QALgC;EAMhC,UAAA,EAAE,EAAE,KAAI,CAAC;EANuB,SAAf,CAAnB;EAQA,QAAA,KAAK,CAAC,GAAN,CAAU,UAAV,EAAsB,OAAtB;EACD,OAVD;EAWA,aAAO,YAAP;EACD;;;aACD,8BAAqB,YAArB,EAA4D;EAC1D,UAAQ,GAAR,GAAkE,YAAlE,CAAQ,GAAR;EAAA,UAAa,KAAb,GAAkE,YAAlE,CAAa,KAAb;EAAA,UAAoB,IAApB,GAAkE,YAAlE,CAAoB,IAApB;EAAA,UAA0B,GAA1B,GAAkE,YAAlE,CAA0B,GAA1B;EAAA,UAA+B,OAA/B,GAAkE,YAAlE,CAA+B,OAA/B;EAAA,UAAwC,SAAxC,GAAkE,YAAlE,CAAwC,SAAxC;EAAA,UAAmD,UAAnD,GAAkE,YAAlE,CAAmD,UAAnD,CAD0D;EAG1D;;EACA,UAAI,UAAU,KAAK,SAAnB,EAA8B,MAAM,IAAI,UAAJ,CAAe,+BAAf,CAAN;EAC9B,UAAI,IAAI,KAAK,SAAT,IAAsB,OAAO,KAAK,SAAtC,EAAiD,MAAM,IAAI,SAAJ,CAAc,6BAAd,CAAN;EACjD,UAAI,KAAK,KAAK,SAAV,IAAuB,SAAS,KAAK,SAAzC,EAAoD,MAAM,IAAI,SAAJ,CAAc,gCAAd,CAAN;EACpD,UAAI,GAAG,KAAK,SAAZ,EAAuB,MAAM,IAAI,UAAJ,CAAe,aAAf,CAAN;;EACvB,UAAI,SAAS,KAAK,SAAlB,EAA6B;EAC3B,YAAI,OAAO,SAAP,KAAqB,QAAzB,EAAmC;EACjC,gBAAM,IAAI,UAAJ,mDAAyD,SAAzD,GAAN;EACD;;EACD,YAAI,CAAC,mBAAmB,IAAnB,CAAwB,SAAxB,CAAL,EAAyC,MAAM,IAAI,UAAJ,8BAAqC,SAArC,EAAN;EAC1C;;EACD,UAAI,KAAK,WAAT,EAAsB;EACpB,YAAI,GAAG,KAAK,SAAR,IAAqB,GAAG,KAAK,KAAK,WAAtC,EAAmD;EACjD,gBAAM,IAAI,UAAJ,uBAA8B,KAAK,WAAnC,mBAAuD,GAAvD,EAAN;EACD;;EACD,YAAI,OAAO,KAAK,SAAZ,IAAyB,IAAI,KAAK,SAAlC,IAA+C,OAAO,KAAK,IAA/D,EAAqE;EACnE,gBAAM,IAAI,UAAJ,mBAA0B,OAA1B,kCAAyD,IAAzD,EAAN;EACD;EACF;EACF;EACD;;;;;;;;;;EAUK;;;;aACL,4BACE,iBADF,EAMwB;EAAA,UAJtB,KAIsB,uEAJc,SAId;EAAA,UAHtB,QAGsB,uEAHD,WAGC;EAEtB,UAAI,KAAK,YAAL,KAAsB,WAA1B,EAAuC,MAAM,IAAI,UAAJ,CAAe,2CAAf,CAAN;EACvC,UAAI,YAAY,GAAG,iBAAnB;EACA,WAAK,oBAAL,CAA0B,YAA1B,EAJsB;EAMtB;;EACA,UAAI,KAAK,WAAT,EAAsB;EACpB;EACA,4BAA0B,YAA1B;EAAA,YAAQ,IAAR,iBAAQ,IAAR;EAAA,YAAc,OAAd,iBAAc,OAAd;EACA,QAAA,YAAY,qCACP,YADO;EAEV,UAAA,GAAG,EAAE,KAAK,WAFA;EAGV,UAAA,IAAI,EAAE,IAAI,KAAK,SAAT,GAAqB,IAArB,GAA4B,OAHxB;EAIV,UAAA,OAAO,EAAE,OAAO,KAAK,SAAZ,GAAwB,OAAxB,GAAkC;EAJjC,UAAZ;EAMD;;EAED,UAAM,YAAY,GAAG,KAAK,YAAL,CAAkB,YAAlB,EAAoD,KAApD,CAArB;EACA,2BAA2B,YAA3B;EAAA,UAAM,KAAN,kBAAM,KAAN;EAAA,UAAa,SAAb,kBAAa,SAAb;;EAnBsB,kCAqBE,wBAAwB,CAAC,YAAD,EAAe,QAAf,EAAyB,YAAzB,CArB1B;;EAqBnB,MAAA,KArBmB,yBAqBnB,KArBmB;EAqBZ,MAAA,SArBY,yBAqBZ,SArBY;EAsBtB,+CAAa,YAAb;EAAiE,QAAA,KAAK,EAAL,KAAjE;EAAwE,QAAA,SAAS,EAAT;EAAxE;EACD;;;aACD,+BAAsB,YAAtB,EAAsD,QAAtD,EAA0E,KAA1E,EAA+F;EAC7F,UAAM,YAAY,GAAG,KAAK,YAAL,CAAkB,YAAlB,EAAgC,KAAhC,CAArB;EACA,UAAM,KAAN,GAAqB,YAArB,CAAM,KAAN;EAAA,UAAa,GAAb,GAAqB,YAArB,CAAa,GAAb;;EACA,UAAI,QAAQ,KAAK,QAAjB,EAA2B;EACzB,QAAAH,aAAA,CAAiB,KAAjB,EAAwB,CAAxB,EAA2B,YAA3B;EACA,QAAAA,aAAA,CAAiB,GAAjB,EAAsB,CAAtB,EAAyB,KAAK,kBAAL,CAAwB,YAAxB,CAAzB;EACD,OAHD,MAGO;EACL,QAAA,KAAK,GAAGC,gBAAA,CAAoB,KAApB,EAA2B,CAA3B,EAA8B,YAA9B,CAAR;EACA,QAAA,GAAG,GAAGA,gBAAA,CAAoB,GAApB,EAAyB,CAAzB,EAA4B,KAAK,kBAAL,mCAA6B,YAA7B;EAA2C,UAAA,KAAK,EAAL;EAA3C,WAA5B,CAAN;EACD;;EACD,+CAAY,YAAZ;EAA0B,QAAA,KAAK,EAAL,KAA1B;EAAiC,QAAA,GAAG,EAAH;EAAjC;EACD;;;aACD,2BAAkB,SAAlB,EAAwG;EAAA;;EAAA,UAAvD,QAAuD,uEAAlC,WAAkC;EAAA,UAArB,KAAqB;EACtG,UAAM,YAAY,GAAG,SAArB,CADsG;EAGtG;;EACA,UAAI,IAAI,GAAG,KAAK,kBAAL,CAAwB,SAAxB,EAAmC,KAAnC,EAA0C,QAA1C,EAAoD,KAApD,CAAX,CAJsG;EAOtG;EACA;;EACA,MAAA,IAAI,GAAG,KAAK,qBAAL,CAA2B,IAA3B,EAAiC,QAAjC,EAA2C,KAA3C,CAAP;EAEA,kBAA6B,IAA7B;EAAA,UAAQ,IAAR,SAAQ,IAAR;EAAA,UAAc,KAAd,SAAc,KAAd;EAAA,UAAqB,GAArB,SAAqB,GAArB;EACA,UAAM,GAAG,GAAG,IAAI,CAAC,SAAL,CAAe;EAAE,QAAA,IAAI,EAAE,mBAAR;EAA6B,QAAA,IAAI,EAAJ,IAA7B;EAAmC,QAAA,KAAK,EAAL,KAAnC;EAA0C,QAAA,GAAG,EAAH,GAA1C;EAA+C,QAAA,QAAQ,EAAR,QAA/C;EAAyD,QAAA,EAAE,EAAE,KAAK;EAAlE,OAAf,CAAZ;EACA,UAAI,MAAM,GAAG,KAAK,CAAC,GAAN,CAAU,GAAV,CAAb;EACA,UAAI,MAAJ,EAAY,OAAO,MAAP,CAd0F;EAgBtG;;EACA,UAAI,WAAJ;;EACA,UACE,YAAY,CAAC,IAAb,KAAsB,SAAtB,IACA,YAAY,CAAC,KAAb,KAAuB,SADvB,IAEA,YAAY,CAAC,GAAb,KAAqB,SAFrB,KAGC,YAAY,CAAC,IAAb,KAAsB,IAAI,CAAC,IAA3B,IAAmC,YAAY,CAAC,KAAb,KAAuB,IAAI,CAAC,KAA/D,IAAwE,YAAY,CAAC,GAAb,KAAqB,IAAI,CAAC,GAHnG,CADF,EAKE;EACA,QAAA,WAAW,GAAG,IAAI,CAAC,SAAL,CAAe;EAC3B,UAAA,IAAI,EAAE,mBADqB;EAE3B,UAAA,IAAI,EAAE,YAAY,CAAC,IAFQ;EAG3B,UAAA,KAAK,EAAE,YAAY,CAAC,KAHO;EAI3B,UAAA,GAAG,EAAE,YAAY,CAAC,GAJS;EAK3B,UAAA,QAAQ,EAAR,QAL2B;EAM3B,UAAA,EAAE,EAAE,KAAK;EANkB,SAAf,CAAd;EAQA,QAAA,MAAM,GAAG,KAAK,CAAC,GAAN,CAAU,WAAV,CAAT;EACA,YAAI,MAAJ,EAAY,OAAO,MAAP;EACb,OAlCqG;;;EAqCtG,UAAI,WAAW,GAAG,KAAK,eAAL,CAAqB;EAAE,QAAA,IAAI,EAAJ,IAAF;EAAQ,QAAA,KAAK,EAAL,KAAR;EAAe,QAAA,GAAG,EAAH;EAAf,OAArB,CAAlB;;EACA,UAAM,wBAAwB,GAAG,SAA3B,wBAA2B,CAAC,QAAD,EAAqB;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAI,eAAe,GAAG,MAAI,CAAC,UAAL,CAAgB,WAAhB,EAA6B,QAA7B,CAAtB;;EACA,YAAI,IAAI,CAAC,GAAL,GAAW,MAAI,CAAC,kBAAL,CAAwB,IAAxB,CAAf,EAA8C;EAC5C;EACA;EACA,cAAI,gBAAgB,GAAG,MAAI,CAAC,iBAAL,CAAuB,eAAvB,EAAwC,KAAxC,CAAvB;;EACA,iBAAO,gBAAgB,CAAC,KAAjB,KAA2B,KAA3B,IAAoC,gBAAgB,CAAC,IAAjB,KAA0B,IAArE,EAA2E;EACzE,gBAAI,QAAQ,KAAK,QAAjB,EAA2B;EACzB,oBAAM,IAAI,UAAJ,eAAsB,GAAtB,sCAAqD,KAArD,sBAAsE,IAAtE,EAAN;EACD,aAHwE;;;EAKzE,YAAA,eAAe,GAAG,MAAI,CAAC,UAAL,CAAgB,eAAhB,EAAiC,CAAC,CAAlC,CAAlB;EACA,YAAA,gBAAgB,GAAG,MAAI,CAAC,iBAAL,CAAuB,eAAvB,EAAwC,KAAxC,CAAnB;EACD;EACF;;EACD,eAAO,eAAP;EACD,OAxBD;;EAyBA,UAAI,IAAI,GAAG,CAAX;EACA,UAAI,iBAAiB,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,KAApC,CAAxB;EACA,UAAI,IAAI,GAAG,cAAc,CAAC,IAAD,EAAO,iBAAP,CAAzB;;EACA,UAAI,IAAI,CAAC,KAAL,KAAe,CAAf,IAAoB,IAAI,CAAC,MAAL,KAAgB,CAApC,IAAyC,IAAI,CAAC,IAAL,KAAc,CAA3D,EAA8D;EAC5D,YAAM,qBAAqB,GAAG,IAAI,CAAC,KAAL,GAAa,GAAb,GAAmB,IAAI,CAAC,MAAL,GAAc,EAAjC,GAAsC,IAAI,CAAC,IAAzE;EACA,QAAA,WAAW,GAAG,KAAK,UAAL,CAAgB,WAAhB,EAA6B,qBAA7B,CAAd;EACA,QAAA,iBAAiB,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,KAApC,CAApB;EACA,QAAA,IAAI,GAAG,cAAc,CAAC,IAAD,EAAO,iBAAP,CAArB;;EACA,YAAI,IAAI,CAAC,KAAL,KAAe,CAAf,IAAoB,IAAI,CAAC,MAAL,KAAgB,CAAxC,EAA2C;EACzC,UAAA,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAN,CAAtC;EACD,SAFD,MAEO;EACL,UAAA,IAAI,GAAG,KAAK,oBAAL,CAA0B,IAA1B,EAAgC,iBAAhC,CAAP;EACD;EACF,OA5EqG;EA8EtG;;;EACA,UAAI,SAAS,GAAG,CAAhB;EACA,UAAI,gBAAgB,GAAG,KAAvB;;EACA,aAAO,IAAP,EAAa;EACX,QAAA,WAAW,GAAG,KAAK,UAAL,CAAgB,WAAhB,EAA6B,IAAI,GAAG,SAApC,CAAd;EACA,YAAM,oBAAoB,GAAG,iBAA7B;EACA,QAAA,iBAAiB,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,KAApC,CAApB;EACA,YAAM,OAAO,GAAG,IAAhB;EACA,QAAA,IAAI,GAAG,KAAK,oBAAL,CAA0B,IAA1B,EAAgC,iBAAhC,CAAP;;EACA,YAAI,IAAJ,EAAU;EACR,UAAA,IAAI,GAAG,cAAc,CAAC,IAAD,EAAO,iBAAP,CAArB;;EACA,cAAI,IAAI,CAAC,KAAL,KAAe,CAAf,IAAoB,IAAI,CAAC,MAAL,KAAgB,CAAxC,EAA2C;EACzC,YAAA,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAN,CAAtC,CADyC;;EAGzC,YAAA,IAAI,GAAG,CAAP,CAHyC;EAKzC;EACA;EACA;;EACA,YAAA,gBAAgB,GAAG,IAAI,CAAC,GAAL,GAAW,KAAK,kBAAL,CAAwB,IAAxB,CAA9B;EACD,WATD,MASO,IAAI,OAAO,IAAI,IAAI,KAAK,OAAxB,EAAiC;EACtC,gBAAI,SAAS,GAAG,CAAhB,EAAmB;EACjB;EACA;EACA,cAAA,SAAS,IAAI,CAAb;EACD,aAJD,MAIO;EACL;EACA;EACA;EACA;EACA,kBAAI,QAAQ,KAAK,QAAjB,EAA2B;EACzB,sBAAM,IAAI,UAAJ,mDAA0D,IAAI,CAAC,SAAL,oBAAoB,YAApB,EAA1D,EAAN;EACD,eAFD,MAEO;EACL;EACA,oBAAM,KAAK,GAAG,KAAK,oBAAL,CAA0B,iBAA1B,EAA6C,oBAA7C,CAAd,CAFK;;EAIL,oBAAI,KAAK,GAAG,CAAZ,EAAe,WAAW,GAAG,KAAK,UAAL,CAAgB,WAAhB,EAA6B,CAAC,CAA9B,CAAd;EACf,gBAAA,gBAAgB,GAAG,IAAnB;EACA,gBAAA,IAAI,GAAG,CAAP;EACD;EACF;EACF;EACF;EACF;;EACD,MAAA,KAAK,CAAC,GAAN,CAAU,GAAV,EAAe,WAAf;EACA,UAAI,WAAJ,EAAiB,KAAK,CAAC,GAAN,CAAU,WAAV,EAAuB,WAAvB;;EACjB,UACE,IAAI,CAAC,IAAL,KAAc,SAAd,IACA,IAAI,CAAC,KAAL,KAAe,SADf,IAEA,IAAI,CAAC,GAAL,KAAa,SAFb,IAGA,IAAI,CAAC,SAAL,KAAmB,SAHnB,IAIC,KAAK,MAAL,KAAgB,IAAI,CAAC,GAAL,KAAa,SAAb,IAA0B,IAAI,CAAC,OAAL,KAAiB,SAA3D,CALH,EAME;EACA,cAAM,IAAI,UAAJ,CAAe,6BAAf,CAAN;EACD;;EACD,UAAI,CAAC,gBAAL,EAAuB;EACrB;EACA,YAAM,UAAU,GAAG,IAAI,CAAC,SAAL,CAAe;EAChC,UAAA,IAAI,EAAE,mBAD0B;EAEhC,UAAA,OAAO,EAAE,WAAW,CAAC,IAFW;EAGhC,UAAA,QAAQ,EAAE,WAAW,CAAC,KAHU;EAIhC,UAAA,MAAM,EAAE,WAAW,CAAC,GAJY;EAKhC,UAAA,EAAE,EAAE,KAAK;EALuB,SAAf,CAAnB;EAOA,QAAA,KAAK,CAAC,GAAN,CAAU,UAAV,EAAsB,IAAtB;EACD;;EACD,aAAO,WAAP;EACD;;;aACD,gCACE,IADF,EAEE,KAFF,EAEuB;EAErB,UAAM,OAAO,GAAG;EAAE,QAAA,IAAI,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CAAf;EAAiC,QAAA,KAAK,EAAE,OAAO,CAAC,IAAD,EAAO,SAAP,CAA/C;EAAkE,QAAA,GAAG,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP;EAA9E,OAAhB;EACA,UAAM,MAAM,GAAG,KAAK,iBAAL,CAAuB,OAAvB,EAAgC,KAAhC,CAAf;EACA,aAAO,MAAP;EACD;;;aACD,8BAAqB,UAArB,EAAuD,UAAvD,EAAuF;EACrF;EACA;EACA,UAAM,KAAK,GAAGd,qBAAA,CAAyB,UAAzB,EAAqC,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,CAArC,EAA+D,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,CAA/D,CAAd;EACA,UAAM,KAAK,GAAGA,qBAAA,CAAyB,UAAzB,EAAqC,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,CAArC,EAA+D,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,CAA/D,CAAd;EACA,UAAI,KAAK,CAAC,IAAN,KAAe,KAAK,CAAC,IAAzB,EAA+B,OAAOiB,gBAAA,CAAoB,KAAK,CAAC,IAAN,GAAa,KAAK,CAAC,IAAvC,CAAP;EAC/B,UAAI,KAAK,CAAC,KAAN,KAAgB,KAAK,CAAC,KAA1B,EAAiC,OAAOA,gBAAA,CAAoB,KAAK,CAAC,KAAN,GAAc,KAAK,CAAC,KAAxC,CAAP;EACjC,UAAI,KAAK,CAAC,GAAN,KAAc,KAAK,CAAC,GAAxB,EAA6B,OAAOA,gBAAA,CAAoB,KAAK,CAAC,GAAN,GAAY,KAAK,CAAC,GAAtC,CAAP;EAC7B,aAAO,CAAP;EACD;EACD;;;;aACA,sBAAa,YAAb,EAA+F;EAAA,UAAvD,QAAuD,uEAAlC,WAAkC;EAAA,UAArB,KAAqB;EAC7F,UAAM,OAAO,GAAG,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,QAArC,EAA+C,KAA/C,CAAhB;EACA,aAAO,KAAK,iBAAL,CAAuB,OAAvB,EAAgC,KAAhC,CAAP;EACD;;;aACD,oBAAW,OAAX,EAA4B,IAA5B,EAAwC;EACtC,UAAM,KAAK,GAAGX,UAAA,CAAc,OAAO,CAAC,IAAtB,EAA4B,OAAO,CAAC,KAApC,EAA2C,OAAO,CAAC,GAAnD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,IAAjE,EAAuE,WAAvE,CAAd;EACA,aAAO,KAAP;EACD;;;aACD,yBAAgB,YAAhB,EAA2C,IAA3C,EAAyD,KAAzD,EAA8E;EAC5E,UAAM,OAAO,GAAG,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,WAArC,EAAkD,KAAlD,CAAhB;EACA,UAAM,QAAQ,GAAG,KAAK,UAAL,CAAgB,OAAhB,EAAyB,IAAzB,CAAjB;EACA,UAAM,aAAa,GAAG,KAAK,iBAAL,CAAuB,QAAvB,EAAiC,KAAjC,CAAtB;EACA,aAAO,aAAP;EACD;;;aACD,2BACE,iBADF,EAEE,MAFF,EAGE,QAHF,EAIE,KAJF,EAIuB;EAErB,UAAI,YAAY,GAAG,iBAAnB;EACA,2BAAgB,YAAhB;EAAA,UAAQ,GAAR,kBAAQ,GAAR;;EACA,WAAK,IAAI,CAAC,GAAG,CAAR,EAAW,SAAS,GAAG,OAAO,CAAC,MAAD,CAAnC,EAA6C,CAAC,GAAG,SAAjD,EAA4D,CAAC,EAA7D,EAAiE;EAC/D,6BAAkB,YAAlB;EAAA,YAAQ,KAAR,kBAAQ,KAAR;EACA,YAAM,eAAe,GAAG,YAAxB;EACA,YAAM,IAAI,GACR,MAAM,GAAG,CAAT,GACI,CAAC,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,KAAK,mBAAL,CAAyB,YAAzB,EAAuC,KAAvC,CAAd,CADL,GAEI,KAAK,WAAL,CAAiB,YAAjB,EAA+B,KAA/B,CAHN;EAIA,YAAM,OAAO,GAAG,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,WAArC,EAAkD,KAAlD,CAAhB;EACA,YAAI,QAAQ,GAAG,KAAK,UAAL,CAAgB,OAAhB,EAAyB,IAAzB,CAAf;EACA,QAAA,YAAY,GAAG,KAAK,iBAAL,CAAuB,QAAvB,EAAiC,KAAjC,CAAf,CAT+D;EAY/D;EACA;EACA;EACA;;EACA,YAAI,MAAM,GAAG,CAAb,EAAgB;EACd,cAAM,eAAe,GAAG,KAAK,YAAL,CAAkB,eAAlB,EAAmC,KAAnC,CAAxB;;EACA,iBAAO,YAAY,CAAC,KAAb,GAAqB,CAArB,KAA2B,KAAK,GAAG,eAA1C,EAA2D;EACzD,YAAA,QAAQ,GAAG,KAAK,UAAL,CAAgB,QAAhB,EAA0B,CAAC,CAA3B,CAAX;EACA,YAAA,YAAY,GAAG,KAAK,iBAAL,CAAuB,QAAvB,EAAiC,KAAjC,CAAf;EACD;EACF;;EAED,YAAI,YAAY,CAAC,GAAb,KAAqB,GAAzB,EAA8B;EAC5B;EACA,UAAA,YAAY,GAAG,KAAK,YAAL,mCAAuB,YAAvB;EAAqC,YAAA,GAAG,EAAH;EAArC,cAA4C,WAA5C,EAAyD,KAAzD,CAAf;EACD;EACF;;EACD,UAAI,QAAQ,KAAK,QAAb,IAAyB,YAAY,CAAC,GAAb,KAAqB,GAAlD,EAAuD;EACrD,cAAM,IAAI,UAAJ,eAAsB,GAAtB,iDAAN;EACD;;EACD,aAAO,YAAP;EACD;;;aACD,qBACE,YADF,SAGE,QAHF,EAIE,KAJF,EAIuB;EAAA,8BAFnB,KAEmB;EAAA,UAFnB,KAEmB,4BAFX,CAEW;EAAA,+BAFR,MAEQ;EAAA,UAFR,MAEQ,6BAFC,CAED;EAAA,8BAFI,KAEJ;EAAA,UAFI,KAEJ,4BAFY,CAEZ;EAAA,6BAFe,IAEf;EAAA,UAFe,IAEf,2BAFsB,CAEtB;EAErB,UAAQ,IAAR,GAAiC,YAAjC,CAAQ,IAAR;EAAA,UAAc,GAAd,GAAiC,YAAjC,CAAc,GAAd;EAAA,UAAmB,SAAnB,GAAiC,YAAjC,CAAmB,SAAnB;EACA,UAAM,UAAU,GAAG,KAAK,kBAAL,CAAwB;EAAE,QAAA,IAAI,EAAE,IAAI,GAAG,KAAf;EAAsB,QAAA,SAAS,EAAT,SAAtB;EAAiC,QAAA,GAAG,EAAH;EAAjC,OAAxB,EAAgE,KAAhE,CAAnB;EACA,UAAM,WAAW,GAAG,KAAK,iBAAL,CAAuB,UAAvB,EAAmC,MAAnC,EAA2C,QAA3C,EAAqD,KAArD,CAApB;EACA,UAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,CAAnC;EACA,UAAM,SAAS,GAAG,KAAK,eAAL,CAAqB,WAArB,EAAkC,WAAlC,EAA+C,KAA/C,CAAlB;EACA,aAAO,SAAP;EACD;;;aACD,uBACE,WADF,EAEE,WAFF,EAGE,WAHF,EAIE,KAJF,EAIuB;EAErB,UAAI,IAAI,GAAG,CAAX;EACA,UAAI,KAAK,GAAG,CAAZ;EACA,UAAI,MAAM,GAAG,CAAb;EACA,UAAI,KAAK,GAAG,CAAZ;;EACA,cAAQ,WAAR;EACE,aAAK,KAAL;EACE,UAAA,IAAI,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAP;EACA;;EACF,aAAK,MAAL;EAAa;EACX,gBAAM,SAAS,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAlB;EACA,YAAA,IAAI,GAAG,SAAS,GAAG,CAAnB;EACA,YAAA,KAAK,GAAG,CAAC,SAAS,GAAG,IAAb,IAAqB,CAA7B;EACA;EACD;;EACD,aAAK,OAAL;EACA,aAAK,MAAL;EAAa;EACX,gBAAM,SAAS,GAAG,WAAW,CAAC,IAAZ,GAAmB,WAAW,CAAC,IAAjD;EACA,gBAAM,UAAU,GAAG,WAAW,CAAC,KAAZ,GAAoB,WAAW,CAAC,KAAnD;EACA,gBAAM,QAAQ,GAAG,WAAW,CAAC,GAAZ,GAAkB,WAAW,CAAC,GAA/C;EACA,gBAAM,IAAI,GAAG,KAAK,oBAAL,CAA0B,WAA1B,EAAuC,WAAvC,CAAb;;EACA,gBAAI,CAAC,IAAL,EAAW;EACT,qBAAO;EAAE,gBAAA,KAAK,EAAE,CAAT;EAAY,gBAAA,MAAM,EAAE,CAApB;EAAuB,gBAAA,KAAK,EAAE,CAA9B;EAAiC,gBAAA,IAAI,EAAE;EAAvC,eAAP;EACD;;EACD,gBAAI,WAAW,KAAK,MAAhB,IAA0B,SAA9B,EAAyC;EACvC,kBAAM,kBAAkB,GAAG,UAAU,GAAG,IAAb,GAAoB,CAApB,IAA0B,UAAU,KAAK,CAAf,IAAoB,QAAQ,GAAG,IAAX,GAAkB,CAA3F;EACA,cAAA,KAAK,GAAG,kBAAkB,GAAG,SAAS,GAAG,IAAf,GAAsB,SAAhD;EACD;;EACD,gBAAM,UAAU,GAAG,KAAK,GAAG,KAAK,WAAL,CAAiB,WAAjB,EAA8B;EAAE,cAAA,KAAK,EAAL;EAAF,aAA9B,EAAyC,WAAzC,EAAsD,KAAtD,CAAH,GAAkE,WAA1F,CAZW;EAcX;EACA;;EACA,gBAAI,OAAJ;EACA,gBAAI,IAAI,GAAgB,UAAxB;;EACA,eAAG;EACD,cAAA,MAAM,IAAI,IAAV;EACA,cAAA,OAAO,GAAG,IAAV;EACA,cAAA,IAAI,GAAG,KAAK,iBAAL,CAAuB,OAAvB,EAAgC,IAAhC,EAAsC,WAAtC,EAAmD,KAAnD,CAAP;;EACA,kBAAI,IAAI,CAAC,GAAL,KAAa,WAAW,CAAC,GAA7B,EAAkC;EAChC;EACA,gBAAA,IAAI,GAAG,KAAK,YAAL,mCAAuB,IAAvB;EAA6B,kBAAA,GAAG,EAAE,WAAW,CAAC;EAA9C,oBAAqD,WAArD,EAAkE,KAAlE,CAAP;EACD;EACF,aARD,QAQS,KAAK,oBAAL,CAA0B,WAA1B,EAAuC,IAAvC,IAA+C,IAA/C,IAAuD,CARhE;;EASA,YAAA,MAAM,IAAI,IAAV,CA3BW;;EA4BX,gBAAM,aAAa,GAAG,KAAK,iBAAL,CAAuB,OAAvB,EAAgC,WAAhC,EAA6C,KAA7C,CAAtB;EACA,YAAA,IAAI,GAAG,aAAP;EACA;EACD;EA1CH;;EA4CA,aAAO;EAAE,QAAA,KAAK,EAAL,KAAF;EAAS,QAAA,MAAM,EAAN,MAAT;EAAiB,QAAA,KAAK,EAAL,KAAjB;EAAwB,QAAA,IAAI,EAAJ;EAAxB,OAAP;EACD;;;aACD,qBAAY,YAAZ,EAAuC,KAAvC,EAA4D;EAC1D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAQ,GAAR,GAAgB,YAAhB,CAAQ,GAAR;EACA,UAAM,GAAG,GAAG,KAAK,kBAAL,CAAwB,YAAxB,CAAZ;EACA,UAAM,GAAG,GAAG,KAAK,kBAAL,CAAwB,YAAxB,CAAZ,CAX0D;;EAa1D,UAAI,GAAG,KAAK,GAAZ,EAAiB,OAAO,GAAP,CAbyC;;EAgB1D,UAAM,SAAS,GAAG,GAAG,IAAI,GAAG,GAAG,GAAb,GAAmB,GAAnB,GAAyB,GAA3C;EACA,UAAM,OAAO,GAAG,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,WAArC,EAAkD,KAAlD,CAAhB;EACA,UAAM,YAAY,GAAG,KAAK,UAAL,CAAgB,OAAhB,EAAyB,SAAzB,CAArB;EACA,UAAM,iBAAiB,GAAG,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,KAArC,CAA1B,CAnB0D;;EAsB1D,UAAM,aAAa,GAAG,KAAK,UAAL,CAAgB,YAAhB,EAA8B,CAAC,iBAAiB,CAAC,GAAjD,CAAtB;EACA,UAAM,kBAAkB,GAAG,KAAK,iBAAL,CAAuB,aAAvB,EAAsC,KAAtC,CAA3B;EACA,aAAO,kBAAkB,CAAC,GAA1B;EACD;;;aACD,6BAAoB,YAApB,EAA+C,KAA/C,EAAoE;EAClE,UAAQ,GAAR,GAA6B,YAA7B,CAAQ,GAAR;EAAA,UAAa,KAAb,GAA6B,YAA7B,CAAa,KAAb;EAAA,UAAoB,IAApB,GAA6B,YAA7B,CAAoB,IAApB,CADkE;;EAIlE,UAAM,iBAAiB,GAAG,KAAK,GAAG,CAAR,GAAY,IAAZ,GAAmB,IAAI,GAAG,CAApD;EACA,UAAI,iBAAiB,GAAG;EAAE,QAAA,IAAI,EAAE,iBAAR;EAA2B,QAAA,KAAK,EAAL,KAA3B;EAAkC,QAAA,GAAG,EAAE;EAAvC,OAAxB;EACA,UAAM,aAAa,GAAG,KAAK,GAAG,CAAR,GAAY,KAAK,GAAG,CAApB,GAAwB,KAAK,YAAL,CAAkB,iBAAlB,EAAqC,KAArC,CAA9C;EACA,MAAA,iBAAiB,qCAAQ,iBAAR;EAA2B,QAAA,KAAK,EAAE;EAAlC,QAAjB;EACA,UAAM,GAAG,GAAG,KAAK,kBAAL,CAAwB,iBAAxB,CAAZ;EACA,UAAM,GAAG,GAAG,KAAK,kBAAL,CAAwB,iBAAxB,CAAZ;EACA,UAAI,GAAG,KAAK,GAAZ,EAAiB,OAAO,GAAP;EAEjB,UAAM,OAAO,GAAG,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,WAArC,EAAkD,KAAlD,CAAhB;EACA,UAAM,yBAAyB,GAAG,KAAK,UAAL,CAAgB,OAAhB,EAAyB,CAAC,GAA1B,CAAlC;EACA,UAAM,8BAA8B,GAAG,KAAK,iBAAL,CAAuB,yBAAvB,EAAkD,KAAlD,CAAvC;EACA,aAAO,8BAA8B,CAAC,GAAtC;EACD;;;aACD,6BAAoB,YAApB,EAAkD;EAChD,aAAO;EAAE,QAAA,IAAI,EAAE,YAAY,CAAC,IAArB;EAA2B,QAAA,KAAK,EAAE,CAAlC;EAAqC,QAAA,SAAS,EAAE,KAAhD;EAAuD,QAAA,GAAG,EAAE;EAA5D,OAAP;EACD;;;aACD,8BAAqB,YAArB,EAA6C;EAC3C,aAAO;EAAE,QAAA,IAAI,EAAE,YAAY,CAAC,IAArB;EAA2B,QAAA,KAAK,EAAE,YAAY,CAAC,KAA/C;EAAsD,QAAA,GAAG,EAAE;EAA3D,OAAP;EACD;;;aACD,2BAAkB,WAAlB,EAA4C,WAA5C,EAAsE,KAAtE,EAA2F;EACzF,UAAM,MAAM,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAf;EACA,UAAM,MAAM,GAAG,KAAK,iBAAL,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAf;EACA,aAAO,KAAK,YAAL,CAAkB,MAAlB,EAA0B,MAA1B,CAAP;EACD;;;aACD,sBAAa,MAAb,EAA6B,MAA7B,EAA2C;EACzC,UAAM,QAAQ,GAAGC,iBAAA,CACf,MAAM,CAAC,IADQ,EAEf,MAAM,CAAC,KAFQ,EAGf,MAAM,CAAC,GAHQ,EAIf,MAAM,CAAC,IAJQ,EAKf,MAAM,CAAC,KALQ,EAMf,MAAM,CAAC,GANQ,EAOf,KAPe,CAAjB;EASA,aAAO,QAAQ,CAAC,IAAhB;EACD;;;aAMD,4BAAmB,MAAnB,EAAsD,QAAtD,EAA0E,KAA1E,EAA+F;EAC7F,UAAM,IAAN,GAAoD,MAApD,CAAM,IAAN;EAAA,UAAY,KAAZ,GAAoD,MAApD,CAAY,KAAZ;EAAA,UAAmB,SAAnB,GAAoD,MAApD,CAAmB,SAAnB;EAAA,UAA8B,GAA9B,GAAoD,MAApD,CAA8B,GAA9B;EAAA,UAAmC,GAAnC,GAAoD,MAApD,CAAmC,GAAnC;EAAA,UAAwC,OAAxC,GAAoD,MAApD,CAAwC,OAAxC;;EACA,UAAI,SAAS,KAAK,SAAlB,EAA6B;EAC3B,YAAI,IAAI,KAAK,SAAT,KAAuB,GAAG,KAAK,SAAR,IAAqB,OAAO,KAAK,SAAxD,CAAJ,EAAwE;EACtE,gBAAM,IAAI,SAAJ,CAAc,yDAAd,CAAN;EACD;;EAH0B,oCAIJ,KAAK,kBAAL,CAAwB;EAAE,UAAA,IAAI,EAAJ,IAAF;EAAQ,UAAA,KAAK,EAAL,KAAR;EAAe,UAAA,SAAS,EAAT,SAAf;EAA0B,UAAA,GAAG,EAAH,GAA1B;EAA+B,UAAA,GAAG,EAAH,GAA/B;EAAoC,UAAA,OAAO,EAAP;EAApC,SAAxB,EAAuE,KAAvE,EAA8E,QAA9E,CAJI;;EAIxB,QAAA,SAJwB,yBAIxB,SAJwB;EAIb,QAAA,IAJa,yBAIb,IAJa;EAK5B;;EAED,UAAI,OAAJ,EAAa,QAAb,EAAuB,MAAvB;EACA,UAAI,eAAJ,EAAqB,UAArB,CAV6F;EAY7F;EACA;EACA;;EACA,UAAM,YAAY,GAAG;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAArB;;EACA,kCAA+B,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,KAArC,CAA/B;EAAA,UAAc,YAAd,yBAAQ,IAAR;;EACA,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,GAApB,EAAyB,CAAC,EAA1B,EAA8B;EAC5B,YAAM,gBAAgB,GAAqB,KAAK,kBAAL,CACzC;EAAE,UAAA,GAAG,EAAH,GAAF;EAAO,UAAA,SAAS,EAAT,SAAP;EAAkB,UAAA,IAAI,EAAE,YAAY,GAAG;EAAvC,SADyC,EAEzC,KAFyC,CAA3C;EAIA,YAAM,OAAO,GAAG,KAAK,iBAAL,CAAuB,gBAAvB,EAAyC,WAAzC,EAAsD,KAAtD,CAAhB;EACA,YAAM,qBAAqB,GAAG,KAAK,iBAAL,CAAuB,OAAvB,EAAgC,KAAhC,CAA9B;EACS,QAAA,OAPmB,GAOuB,OAPvB,CAOzB,IAPyB;EAOH,QAAA,QAPG,GAOuB,OAPvB,CAOV,KAPU;EAOY,QAAA,MAPZ,GAOuB,OAPvB,CAOO,GAPP;;EAQ5B,YAAI,qBAAqB,CAAC,SAAtB,KAAoC,SAApC,IAAiD,qBAAqB,CAAC,GAAtB,KAA8B,GAAnF,EAAwF;EACtF,iBAAO;EAAE,YAAA,KAAK,EAAE,QAAT;EAAmB,YAAA,GAAG,EAAE,MAAxB;EAAgC,YAAA,IAAI,EAAE;EAAtC,WAAP;EACD,SAFD,MAEO,IAAI,QAAQ,KAAK,WAAjB,EAA8B;EACnC;EACA,cACE,eAAe,KAAK,SAApB,IACC,qBAAqB,CAAC,SAAtB,KAAoC,eAAe,CAAC,SAApD,IACC,qBAAqB,CAAC,GAAtB,GAA4B,eAAe,CAAC,GAHhD,EAIE;EACA,YAAA,eAAe,GAAG,qBAAlB;EACA,YAAA,UAAU,GAAG,OAAb;EACD;EACF;EACF;;EACD,UAAI,QAAQ,KAAK,WAAb,IAA4B,UAAU,KAAK,SAA/C,EAA0D,OAAO,UAAP;EAC1D,YAAM,IAAI,UAAJ,qBAA4B,KAAK,EAAjC,kCAA2D,SAA3D,sBAAgF,GAAhF,EAAN;EACD;;;;;;MA4BG;;;;;EAAN,0BAAA;EAAA;;EAAA;;;EACE,WAAA,EAAA,GAAK,QAAL;EACA,WAAA,YAAA,GAAe,WAAf;EAgCA,WAAA,MAAA,GAA0B;EACxB,MAAA,MAAM,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAA/C,OADgB;EAExB,MAAA,OAAO,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAAE,UAAA,GAAG,EAAE,EAAP;EAAW,UAAA,GAAG,EAAE;EAAhB;EAA/C,OAFe;EAGxB,MAAA,MAAM,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAAE,UAAA,GAAG,EAAE,EAAP;EAAW,UAAA,GAAG,EAAE;EAAhB;EAA/C,OAHgB;EAIxB,MAAA,KAAK,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAA/C,OAJiB;EAKxB,MAAA,MAAM,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAA/C,OALgB;EAMxB,MAAA,IAAI,EAAE;EAAE,QAAA,IAAI,EAAE,SAAR;EAAmB,QAAA,OAAO,EAAE,CAA5B;EAA+B,QAAA,SAAS,EAAE,KAA1C;EAAiD,QAAA,IAAI,EAAE;EAAvD,OANkB;EAOxB,gBAAU;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,SAApB;EAA+B,QAAA,SAAS,EAAE,MAA1C;EAAkD,QAAA,IAAI,EAAE;EAAxD,OAPc;EAQxB,iBAAW;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,SAApB;EAA+B,QAAA,SAAS,EAAE,KAA1C;EAAiD,QAAA,IAAI,EAAE;EAAvD,OARa;EASxB,MAAA,KAAK,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAA/C,OATiB;EAUxB,MAAA,IAAI,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,OAAO,EAAE,CAApB;EAAuB,QAAA,SAAS,EAAE,KAAlC;EAAyC,QAAA,IAAI,EAAE;EAA/C,OAVkB;EAWxB,MAAA,KAAK,EAAE;EAAE,QAAA,IAAI,EAAE,EAAR;EAAY,QAAA,OAAO,EAAE,CAArB;EAAwB,QAAA,SAAS,EAAE,KAAnC;EAA0C,QAAA,IAAI,EAAE;EAAhD,OAXiB;EAYxB,MAAA,KAAK,EAAE;EAAE,QAAA,IAAI,EAAE,EAAR;EAAY,QAAA,OAAO,EAAE,EAArB;EAAyB,QAAA,SAAS,EAAE,KAApC;EAA2C,QAAA,IAAI,EAAE;EAAjD,OAZiB;EAaxB,MAAA,EAAE,EAAE;EAAE,QAAA,IAAI,EAAE,EAAR;EAAY,QAAA,OAAO,EAAE,EAArB;EAAyB,QAAA,SAAS,EAAE,KAApC;EAA2C,QAAA,IAAI,EAAE;EAAjD,OAboB;EAcxB,MAAA,IAAI,EAAE;EAAE,QAAA,IAAI,EAAE,EAAR;EAAY,QAAA,OAAO,EAAE,EAArB;EAAyB,QAAA,SAAS,EAAE,KAApC;EAA2C,QAAA,IAAI,EAAE;EAAjD;EAdkB,KAA1B,CAlCF;;EA0IW,WAAA,MAAA,GAAS,KAAT;EA1IX;EA2IC;;;;aAxIC,oBAAW,YAAX,EAAyC;EACvC,UAAQ,IAAR,GAAiB,YAAjB,CAAQ,IAAR,CADuC;EAGvC;EACA;EACA;EACA;;EACA,aAAO,CAAC,IAAI,IAAJ,GAAW,CAAZ,IAAiB,EAAjB,GAAsB,CAA7B;EACD;;;aACD,sBAAa,YAAb,EAA2C;EACzC,aAAO,KAAK,UAAL,CAAgB,YAAhB,IAAgC,EAAhC,GAAqC,EAA5C;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,aAAO,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,KAArC,CAAP;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,aAAO,KAAK,iBAAL,CAAuB,YAAvB,EAAqC,KAArC,CAAP;EACD;;;aACD,2BAAkB,YAAlB,EAA4C,QAA5C,EAAmE;EACjE,UAAQ,KAAR,GAAwB,YAAxB,CAAQ,KAAR;EAAA,UAAe,IAAf,GAAwB,YAAxB,CAAe,IAAf;EACA,UAAM,SAAS,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAwB,KAAxB,CAAlB;EACA,UAAM,SAAS,GAAG,aAAa,CAAC,KAAK,MAAN,CAAb,CAA2B,IAA3B,CAAgC,UAAC,CAAD;EAAA,eAAO,CAAC,CAAC,CAAD,CAAD,CAAK,SAAL,KAAmB,SAA1B;EAAA,OAAhC,CAAlB;EACA,UAAI,SAAS,KAAK,SAAlB,EAA6B,MAAM,IAAI,UAAJ,mCAA0C,KAA1C,EAAN;EAC7B,UAAM,WAAW,GAAG,SAAS,CAAC,CAAD,CAAT,CAAa,IAAjC;EACA,aAAO,OAAO,WAAP,KAAuB,QAAvB,GAAkC,WAAlC,GAAgD,WAAW,CAAC,QAAD,CAAlE;EACD;EACD;;;;aACA,yBAAgB,YAAhB,EAAyC;EACvC,UAAQ,IAAR,GAAiB,YAAjB,CAAQ,IAAR;EACA,aAAO;EAAE,QAAA,IAAI,EAAE,IAAI,GAAG,IAAf;EAAqB,QAAA,KAAK,EAAE,CAA5B;EAA+B,QAAA,GAAG,EAAE;EAApC,OAAP;EACD;;;aAiBD,sBAAa,IAAb,EAA2B,KAA3B,EAAwC;EACtC,UAAI,KAAK,UAAL,CAAgB;EAAE,QAAA,IAAI,EAAJ;EAAF,OAAhB,CAAJ,EAA+B;EAC7B,eAAO,KAAK,KAAK,CAAV,GAAc,cAAc,CAAC,CAAD,EAAI,IAAJ,CAA5B,GAAwC,cAAc,CAAC,KAAK,GAAG,CAAR,GAAY,KAAZ,GAAoB,KAAK,GAAG,CAA7B,CAA7D;EACD,OAFD,MAEO;EACL,eAAO,cAAc,CAAC,KAAD,CAArB;EACD;EACF;;;aACQ,4BACP,YADO,EAEP,KAFO,EAIe;EAAA,UADtB,QACsB,uEADD,WACC;EAAA,UAAtB,cAAsB,uEAAL,KAAK;EAEtB;EACA;EACA;EACA;EACA,UAAM,IAAN,GAA2D,YAA3D,CAAM,IAAN;EAAA,UAAY,OAAZ,GAA2D,YAA3D,CAAY,OAAZ;EAAA,UAAqB,KAArB,GAA2D,YAA3D,CAAqB,KAArB;EAAA,UAA4B,SAA5B,GAA2D,YAA3D,CAA4B,SAA5B;EAAA,UAAuC,GAAvC,GAA2D,YAA3D,CAAuC,GAAvC;EAAA,UAA4C,UAA5C,GAA2D,YAA3D,CAA4C,UAA5C;EAIA,UAAI,IAAI,KAAK,SAAT,IAAsB,OAAO,KAAK,SAAtC,EAAiD,IAAI,GAAG,OAAP;EACjD,UAAI,OAAO,KAAK,SAAZ,IAAyB,IAAI,KAAK,SAAtC,EAAiD,OAAO,GAAG,IAAV;;EACjD,UAAI,cAAJ,EAAoB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAI,UAAJ,EAAgB;EACd,cAAM,SAAS,GAAG,KAAK,MAAL,CAAY,UAAZ,CAAlB;EACA,cAAI,CAAC,SAAL,EAAgB,MAAM,IAAI,UAAJ,kDAAyD,UAAzD,EAAN;EAChB,UAAA,KAAK,GAAG,KAAK,UAAL,CAAgB;EAAE,YAAA,IAAI,EAAJ;EAAF,WAAhB,IAA4B,SAAS,CAAC,IAAtC,GAA6C,SAAS,CAAC,OAA/D;EACD,SAZiB;;;EAclB,QAAA,SAAS,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAwB,KAAxB,CAAZ;EACA,YAAM,MAAM,GAAG;EAAE,UAAA,IAAI,EAAJ,IAAF;EAAQ,UAAA,KAAK,EAAE,KAAf;EAAgC,UAAA,GAAG,EAAH,GAAhC;EAAqC,UAAA,GAAG,EAAE,SAA1C;EAA2E,UAAA,OAAO,EAAP,OAA3E;EAAoF,UAAA,SAAS,EAAT;EAApF,SAAf;EACA,eAAO,MAAP;EACD,OAjBD,MAiBO;EACL;EACA;EACA,aAAK,oBAAL,CAA0B,YAA1B;;EACA,YAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,cAAK,SAAoB,CAAC,QAArB,CAA8B,GAA9B,CAAL,EAAyC;EACvC,gBAAI,SAAS,KAAK,MAAlB,EAA0B;EACxB,oBAAM,IAAI,UAAJ,2DAAkE,SAAlE,EAAN;EACD;;EACD,YAAA,KAAK,GAAG,CAAR;;EACA,gBAAI,CAAC,KAAK,UAAL,CAAgB;EAAE,cAAA,IAAI,EAAJ;EAAF,aAAhB,CAAL,EAAgC;EAC9B,kBAAI,QAAQ,KAAK,QAAjB,EAA2B;EACzB,sBAAM,IAAI,UAAJ,oDAA2D,IAA3D,+BAAN;EACD,eAFD,MAEO;EACL;EACA,gBAAA,KAAK,GAAG,CAAR;EACA,gBAAA,GAAG,GAAG,EAAN;EACA,gBAAA,SAAS,GAAG,KAAZ;EACD;EACF;EACF,WAfD,MAeO;EACL,YAAA,KAAK,GAAG,mBAAmB,CAAC,SAAD,CAA3B,CADK;;EAGL,gBAAI,KAAK,UAAL,CAAgB;EAAE,cAAA,IAAI,EAAJ;EAAF,aAAhB,KAA6B,KAAK,IAAI,CAA1C,EAA6C,KAAK;EAClD,gBAAM,YAAY,GAAG,KAAK,YAAL,CAAkB;EAAE,cAAA,IAAI,EAAJ;EAAF,aAAlB,CAArB;EACA,gBAAI,KAAK,GAAG,CAAR,IAAa,KAAK,GAAG,YAAzB,EAAuC,MAAM,IAAI,UAAJ,8BAAqC,SAArC,EAAN;EACxC;EACF,SAvBD,MAuBO;EACL,cAAI,QAAQ,KAAK,QAAjB,EAA2B;EACzB,YAAAM,aAAA,CAAiB,KAAjB,EAAwB,CAAxB,EAA2B,KAAK,YAAL,CAAkB;EAAE,cAAA,IAAI,EAAJ;EAAF,aAAlB,CAA3B;EACA,YAAAA,aAAA,CAAiB,GAAjB,EAAsB,CAAtB,EAAyB,KAAK,kBAAL,CAAwB;EAAE,cAAA,IAAI,EAAJ,IAAF;EAAQ,cAAA,KAAK,EAAL;EAAR,aAAxB,CAAzB;EACD,WAHD,MAGO;EACL,YAAA,KAAK,GAAGC,gBAAA,CAAoB,KAApB,EAA2B,CAA3B,EAA8B,KAAK,YAAL,CAAkB;EAAE,cAAA,IAAI,EAAJ;EAAF,aAAlB,CAA9B,CAAR;EACA,YAAA,GAAG,GAAGA,gBAAA,CAAoB,GAApB,EAAyB,CAAzB,EAA4B,KAAK,kBAAL,CAAwB;EAAE,cAAA,IAAI,EAAJ,IAAF;EAAQ,cAAA,KAAK,EAAL;EAAR,aAAxB,CAA5B,CAAN;EACD;;EACD,cAAI,SAAS,KAAK,SAAlB,EAA6B;EAC3B,YAAA,SAAS,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAwB,KAAxB,CAAZ;EACD,WAFD,MAEO;EACL,gBAAM,mBAAmB,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAwB,KAAxB,CAA5B;;EACA,gBAAI,mBAAmB,KAAK,SAA5B,EAAuC;EACrC,oBAAM,IAAI,UAAJ,qBAA4B,SAA5B,0CAAqE,KAArE,6BAA6F,IAA7F,EAAN;EACD;EACF;EACF;;EACD,iDAAY,YAAZ;EAA0B,UAAA,GAAG,EAAH,GAA1B;EAA+B,UAAA,KAAK,EAAL,KAA/B;EAAsC,UAAA,SAAS,EAAE,SAAjD;EAAsE,UAAA,IAAI,EAAJ,IAAtE;EAA4E,UAAA,OAAO,EAAP;EAA5E;EACD;EACF;;;;IAxIwB;EA6I3B;;;EAGG;;;MACY;;;;;EAAf,+BAAA;EAAA;;EAAA;;;EAEE,WAAA,YAAA,GAAe,OAAf;EAeA,WAAA,qBAAA,GAAwB,MAAM,KAAK,EAAnC;EACA,WAAA,iBAAA,GAAoB,QAApB;EACS,WAAA,WAAA,GAAc,IAAd;EAnBX;EAwBC;;;;aArBC,oBAAW,YAAX,EAA2C,KAA3C,EAAgE;EAC9D;EACA,UAAM,IAAI,GAAG,KAAK,WAAL,CAAiB;EAAE,QAAA,IAAI,EAAE,YAAY,CAAC,IAArB;EAA2B,QAAA,KAAK,EAAE,EAAlC;EAAsC,QAAA,GAAG,EAAE;EAA3C,OAAjB,EAAiE,KAAjE,CAAb;EACA,aAAO,IAAI,KAAK,EAAhB;EACD;;;aACD;EAAa;EAAb,mBAAsC;EACpC,aAAO,EAAP;EACD;;;aACD;EAAmB;EAAnB,yBAAqC;EACnC,aAAO,EAAP;EACD;;;aACD;EAAmB;EAAnB,yBAAqC;EACnC,aAAO,EAAP;EACD;;;aAID,yBAAgB,YAAhB,EAAyC;EACvC,mCAAiB,KAAK,kBAAL,CAAwB,YAAxB,CAAjB;EAAA,UAAQ,IAAR,0BAAQ,IAAR;;EACA,aAAO;EAAE,QAAA,IAAI,EAAE,SAAS,CAAE,IAAI,GAAG,KAAK,qBAAb,GAAsC,KAAK,iBAA5C,CAAT,GAA0E,GAAlF;EAAuF,QAAA,KAAK,EAAE,CAA9F;EAAiG,QAAA,GAAG,EAAE;EAAtG,OAAP;EACD;;;;IAvBsC;EA2BzC;EACA;;;MACM;;;;;EAAN,2BAAA;EAAA;;EAAA;;;EACE,WAAA,EAAA,GAAK,SAAL;EADF;EAEC;;;IAF2B;;MAGtB;;;;;EAAN,mCAAA;EAAA;;EAAA;;;EACE,WAAA,EAAA,GAAK,kBAAL;EADF;EAEC;;;IAFmC;;MAG9B;;;;;EAAN,+BAAA;EAAA;;EAAA;;;EACE,WAAA,EAAA,GAAK,cAAL;EADF;EAEC;;;IAF+B;;MAG1B;;;;;EAAN,gCAAA;EAAA;;EAAA;;;EACE,WAAA,EAAA,GAAK,eAAL;EADF;EAEC;;;IAFgC;;MAG3B;;;;;EAAN,+BAAA;EAAA;;EAAA;;;EACE,WAAA,EAAA,GAAK,cAAL;EADF;EAEC;;;IAF+B;;MAG1B;;;;;EAAN,6BAAA;EAAA;;EAAA;;;EACE,YAAA,EAAA,GAAK,UAAL;EADF;EAEC;;;IAF6B;;MAIxB;;;;;EAAN,2BAAA;EAAA;;EAAA;;;EACE,YAAA,EAAA,GAAK,SAAL;EACA,YAAA,YAAA,GAAe,OAAf;EAmBS,YAAA,WAAA,GAAc,IAAd;EArBX;EA0BC;;;;aAvBC,oBAAW,YAAX,EAA2C,KAA3C,EAAgE;EAC9D;EACA;EACA,aAAO,aAAa,CAAC,SAAd,CAAwB,UAAxB,CAAmC,IAAnC,CAAwC,IAAxC,EAA8C,YAA9C,EAA4D,KAA5D,CAAP;EACD;;;aACD;EAAa;EAAb,mBAAsC;EACpC,aAAO,EAAP;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,UAAQ,KAAR,GAAkB,YAAlB,CAAQ,KAAR;EACA,UAAI,KAAK,KAAK,EAAd,EAAkB,OAAO,EAAP;EAClB,aAAO,KAAK,IAAI,CAAT,GAAa,EAAb,GAAkB,EAAzB;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,UAAQ,KAAR,GAAkB,YAAlB,CAAQ,KAAR;EACA,UAAI,KAAK,KAAK,EAAd,EAAkB,OAAO,EAAP;EAClB,aAAO,KAAK,IAAI,CAAT,GAAa,EAAb,GAAkB,EAAzB;EACD;;;aAED,yBAAgB,YAAhB,EAAyC;EACvC,mCAAiB,KAAK,kBAAL,CAAwB,YAAxB,CAAjB;EAAA,UAAQ,IAAR,0BAAQ,IAAR;;EACA,aAAO;EAAE,QAAA,IAAI,EAAE,IAAI,GAAG,GAAf;EAAoB,QAAA,KAAK,EAAE,CAA3B;EAA8B,QAAA,GAAG,EAAE;EAAnC,OAAP;EACD;;;;IAzByB;;MA0CtB;;;;;EAAN,0BAAA;EAAA;;EAAA;;;EACE,YAAA,EAAA,GAAK,QAAL;EACA,YAAA,YAAA,GAAe,OAAf;EAkBS,YAAA,WAAA,GAAc,MAAd,CApBX;EAsBE;EACA;;EACA,YAAA,MAAA,GAA0B;EACxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE,EAA7B;EAAiC,QAAA,IAAI,EAAE;EAAE,UAAA,MAAM,EAAE,EAAV;EAAc,UAAA,KAAK,EAAE,CAArB;EAAwB,UAAA,GAAG,EAAE;EAA7B;EAAvC,OADqB;EAExB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAFqB;EAGxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAHqB;EAIxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAJqB;EAKxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OALqB;EAMxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OANqB;EAOxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAPqB;EAQxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,EAArB;EAAyB,QAAA,GAAG,EAAE;EAA9B,OARqB;EASxB,SAAG;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,EAArB;EAAyB,QAAA,GAAG,EAAE;EAA9B,OATqB;EAUxB,UAAI;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,EAArB;EAAyB,QAAA,GAAG,EAAE;EAA9B,OAVoB;EAWxB,UAAI;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,QAAQ,EAAE,IAAlC;EAAwC,QAAA,GAAG,EAAE;EAA7C,OAXoB;EAYxB,UAAI;EAAE,QAAA,MAAM,EAAE,EAAV;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,QAAQ,EAAE,IAAlC;EAAwC,QAAA,GAAG,EAAE;EAA7C;EAZoB,KAA1B,CAxBF;EAyDE;EACA;EACA;;EACA,YAAA,kBAAA,GACE,IAAI,IAAJ,CAAS,mBAAT,EAA8B,kBAA9B,CAAiD,mBAAjD,EAAsE;EAAE,MAAA,QAAQ,EAAE;EAAZ,KAAtE,MAA+F,gBADjG;EA5DF;EAsEC;;;;aAnEC,oBAAW,YAAX,EAAyC;EACvC;EACA;EACA;EACA;EACA;EACA,aAAO,mBAAmB,CAAC,YAAY,CAAC,IAAb,GAAoB,EAArB,CAA1B;EACD;;;aACD;EAAa;EAAb,mBAAsC;EACpC,aAAO,EAAP;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,aAAO,KAAK,YAAL,CAAkB,YAAlB,EAAgC,MAAvC;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,aAAO,KAAK,YAAL,CAAkB,YAAlB,EAAgC,MAAvC;EACD;;;aAmBD,sBAAa,YAAb,EAAqC;EACnC,UAAQ,KAAR,GAAkB,YAAlB,CAAQ,KAAR;EACA,UAAI,SAAS,GAAG,KAAK,MAAL,CAAY,KAAZ,CAAhB;EACA,UAAI,SAAS,KAAK,SAAlB,EAA6B,MAAM,IAAI,UAAJ,0BAAiC,KAAjC,EAAN;EAC7B,UAAI,KAAK,UAAL,CAAgB,YAAhB,KAAiC,SAAS,CAAC,IAA/C,EAAqD,SAAS,GAAG,SAAS,CAAC,IAAtB;EACrD,aAAO,SAAP;EACD;;;aACD,yBAAgB,iBAAhB,EAA8C;EAC5C;EACA;EACA,UAAM,YAAY,GAAG,KAAK,kBAAL,CAAwB,iBAAxB,CAArB;EACA,UAAM,SAAS,GAAG,KAAK,YAAL,CAAkB,YAAlB,CAAlB;EACA,UAAM,OAAO,GAAG,YAAY,CAAC,IAAb,GAAoB,EAApB,IAA0B,SAAS,CAAC,QAAV,GAAqB,CAArB,GAAyB,CAAnD,CAAhB;EACA,UAAM,QAAQ,GAAG,SAAS,CAAC,KAA3B;EACA,UAAM,MAAM,GAAG,SAAS,CAAC,GAAzB;EACA,UAAM,OAAO,GAAGR,UAAA,CAAc,OAAd,EAAuB,QAAvB,EAAiC,MAAjC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,YAAY,CAAC,GAAb,GAAmB,CAArE,EAAwE,WAAxE,CAAhB;EACA,aAAO,OAAP;EACD;;;aAOQ,sBAAa,OAAb,EAA4B;EACnC,UAAI,KAAK,kBAAL,IAA2B,OAAO,CAAC,IAAR,GAAe,CAA9C,EAAiD;EAC/C,cAAM,IAAI,UAAJ,CACJ,oBAAa,KAAK,EAAlB,mDACE,8DAFE,CAAN;EAID;EACF;;;;IArEwB;EAiK3B;;;;;;EAMK;;;EACL,SAAS,UAAT,CAAoB,SAApB,EAAyC;EACvC,MAAI,IAAI,GAAuB,SAA/B;;EACA,MAAI,IAAI,CAAC,MAAL,KAAgB,CAApB,EAAuB;EACrB,UAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EACD;;EACD,MAAI,IAAI,CAAC,MAAL,KAAgB,CAAhB,IAAqB,IAAI,CAAC,CAAD,CAAJ,CAAQ,SAAjC,EAA4C;EAC1C,UAAM,IAAI,UAAJ,CAAe,2DAAf,CAAN;EACD;;EACD,MAAI,IAAI,CAAC,MAAL,KAAgB,CAAhB,IAAqB,CAAC,IAAI,CAAC,CAAD,CAAJ,CAAQ,IAAlC,EAAwC;EACtC,UAAM,IAAI,UAAJ,CAAe,sDAAf,CAAN;EACD;;EACD,MAAI,IAAI,CAAC,MAAL,CAAY,UAAC,CAAD;EAAA,WAAO,CAAC,CAAC,SAAF,IAAe,IAAtB;EAAA,GAAZ,EAAwC,MAAxC,GAAiD,CAArD,EAAwD;EACtD,UAAM,IAAI,UAAJ,CAAe,0DAAf,CAAN;EACD,GAbsC;EAgBvC;EACA;;;EACA,MAAI,SAAJ;EACA,EAAA,IAAI,CAAC,OAAL,CAAa,UAAC,CAAD,EAAM;EACjB,QAAI,CAAC,CAAC,QAAF,IAAe,CAAC,CAAC,CAAC,WAAH,IAAkB,CAAC,CAAC,CAAC,SAAxC,EAAoD;EAClD,UAAI,SAAJ,EAAe,MAAM,IAAI,UAAJ,CAAe,oDAAf,CAAN;EACf,MAAA,SAAS,GAAG,CAAZ;EACA,MAAA,CAAC,CAAC,WAAF,GAAgB;EAAE,QAAA,IAAI,EAAE,CAAC,CAAC,WAAF,GAAgB,CAAhB,GAAoB;EAA5B,OAAhB;EACD,KAJD,MAIO,IAAI,CAAC,CAAC,CAAC,IAAP,EAAa;EAClB,YAAM,IAAI,UAAJ,CAAe,iDAAf,CAAN;EACD;EACF,GARD,EAnBuC;EA8BvC;EACA;EACA;;EACA,EAAA,IAAI,GAAG,IAAI,CAAC,MAAL,CAAY,UAAC,CAAD;EAAA,WAAO,CAAC,CAAC,IAAT;EAAA,GAAZ,CAAP;EAEA,EAAA,IAAI,CAAC,OAAL,CAAa,UAAC,CAAD,EAAM;EACjB;EACA;EACA;EACA,QAAQ,SAAR,GAAsB,CAAtB,CAAQ,SAAR;;EACA,QAAI,SAAJ,EAAe;EACb,UAAM,WAAW,GAAG,IAAI,CAAC,IAAL,CAAU,UAAC,GAAD;EAAA,eAAS,GAAG,CAAC,IAAJ,KAAa,SAAtB;EAAA,OAAV,CAApB;EACA,UAAI,WAAW,KAAK,SAApB,EAA+B,MAAM,IAAI,UAAJ,sDAA6D,SAA7D,EAAN;EAC/B,MAAA,CAAC,CAAC,SAAF,GAAc,WAAd;EACA,MAAA,CAAC,CAAC,WAAF,GAAgB,WAAW,CAAC,WAA5B;EACA,MAAA,CAAC,CAAC,QAAF,GAAa,WAAW,CAAC,QAAzB;EACD;;EAMD,QAAK,CAAC,CAAC,WAAF,CAAsB,KAAtB,KAAgC,SAArC,EAAiD,CAAC,CAAC,WAAF,CAAsB,KAAtB,GAA8B,CAA9B;EACjD,QAAK,CAAC,CAAC,WAAF,CAAsB,GAAtB,KAA8B,SAAnC,EAA+C,CAAC,CAAC,WAAF,CAAsB,GAAtB,GAA4B,CAA5B;EAChD,GAnBD,EAnCuC;EAyDvC;EACA;;EACA,EAAA,SAAS,CAAC,IAAV,CAAe,IAAf,EAAqB,UAAC,EAAD,EAAK,EAAL,EAAW;EAC9B,QAAI,EAAE,CAAC,SAAP,EAAkB,OAAO,CAAP;EAClB,QAAI,EAAE,CAAC,SAAP,EAAkB,OAAO,CAAC,CAAR;EAClB,QAAI,CAAC,EAAE,CAAC,QAAJ,IAAgB,CAAC,EAAE,CAAC,QAAxB,EAAkC,MAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EAClC,WAAO,EAAE,CAAC,QAAH,CAAY,IAAZ,GAAmB,EAAE,CAAC,QAAH,CAAY,IAAtC;EACD,GALD,EA3DuC;EAmEvC;;EACA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAL,GAAc,CAAf,CAAJ,CAAsB,SAA9C;;EACA,MAAI,eAAJ,EAAqB;EACnB,QAAI,eAAe,KAAK,IAAI,CAAC,IAAI,CAAC,MAAL,GAAc,CAAf,CAA5B,EAA+C,MAAM,IAAI,UAAJ,CAAe,4CAAf,CAAN;EAChD,GAvEsC;EA0EvC;EACA;;;EACA,EAAA,IAAI,CAAC,OAAL,CAAa,UAAC,CAAD,EAAI,CAAJ,EAAS;EACnB,IAAA,CAAS,CAAC,WAAV,gBAA8B,IAAI,CAAC,MAAL,GAAc,CAAd,GAAkB,CAAhD;EACF,GAFD;EAIA,SAAO;EAAE,IAAA,IAAI,EAAE,IAAR;EAAuB,IAAA,SAAS,EAAG,SAAS,IAAI,IAAI,CAAC,CAAD;EAApD,GAAP;EACD;;EAED,SAAS,mBAAT,CAA6B,IAA7B,EAAyC;EACvC,SAAO,IAAI,GAAG,CAAP,KAAa,CAAb,KAAmB,IAAI,GAAG,GAAP,KAAe,CAAf,IAAoB,IAAI,GAAG,GAAP,KAAe,CAAtD,CAAP;EACD;EAED;;;MACe;;;;;EAKb,+BAAY,EAAZ,EAAmC,YAAnC,EAA2D;EAAA;;EAAA;;EACzD;EAMF,YAAA,YAAA,GAAe,OAAf,CAP2D;EA+G3D;EACA;;EACA,YAAA,yBAAA,GAA4B,IAAI,IAAJ,CAAS,sBAAT,EACzB,kBADyB,CACN,qBADM,EACiB;EAAE,MAAA,QAAQ,EAAE;EAAZ,KADjB,EAEzB,UAFyB,CAEd,IAFc,CAA5B;EAGA,YAAA,+BAAA,GAAkC,KAAlC;EAlHE,YAAK,EAAL,GAAU,EAAV;;EACA,sBAA4B,UAAU,CAAC,YAAD,CAAtC;EAAA,QAAQ,IAAR,eAAQ,IAAR;EAAA,QAAc,SAAd,eAAc,SAAd;;EACA,YAAK,SAAL,GAAiB,SAAjB;EACA,YAAK,IAAL,GAAY,IAAZ;EALyD;EAM1D;;;;aAED,oBAAW,YAAX,EAAyC;EACvC;EACA;EACA;EACA,kCAAiB,KAAK,eAAL,CAAqB;EAAE,QAAA,KAAK,EAAE,CAAT;EAAY,QAAA,GAAG,EAAE,CAAjB;EAAoB,QAAA,IAAI,EAAE,YAAY,CAAC;EAAvC,OAArB,CAAjB;EAAA,UAAQ,IAAR,yBAAQ,IAAR;;EACA,aAAO,mBAAmB,CAAC,IAAD,CAA1B;EACD;;;aACD;EAAa;EAAb,mBAA+B;EAC7B,aAAO,EAAP;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,UAAQ,KAAR,GAAkB,YAAlB,CAAQ,KAAR;EACA,UAAI,KAAK,KAAK,CAAd,EAAiB,OAAO,KAAK,UAAL,CAAgB,YAAhB,IAAgC,EAAhC,GAAqC,EAA5C;EACjB,aAAO,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV,EAAc,OAAd,CAAsB,KAAtB,KAAgC,CAAhC,GAAoC,EAApC,GAAyC,EAAhD;EACD;;;aACD,4BAAmB,YAAnB,EAA2C;EACzC,aAAO,KAAK,kBAAL,CAAwB,YAAxB,CAAP;EACD;EACD;;;;aACA,yBAAgB,YAAhB,EAAuD;EAAA;;EACrD,UAAM,UAAU,GAAG,SAAb,UAAa,CAAC,IAAD,EAA+B,KAA/B,EAAqE;EACtF,YAAM,YAAY,GAAG,YAAY,CAAC,IAAD,CAAjC;;EACA,YAAI,YAAY,IAAI,IAAhB,IAAwB,YAAY,IAAI,KAA5C,EAAmD;EACjD,gBAAM,IAAI,UAAJ,iBAAwB,IAAxB,cAAgC,YAAhC,6CAA+E,KAA/E,EAAN;EACD;EACF,OALD;;EAMA,UAAM,WAAW,GAAG,SAAd,WAAc,CAAC,IAAD,EAAiB;EACnC,YAAI,OAAJ;;EACA,YAAM,oBAAoB,qCAAQ,YAAR;EAAsB,UAAA,IAAI,EAAJ;EAAtB,UAA1B;;EACA,YAAM,WAAW,GAAG,OAAI,CAAC,IAAL,CAAU,IAAV,CAAe,UAAC,CAAD,EAAI,CAAJ,EAAS;EAC1C,cAAI,CAAC,KAAK,OAAI,CAAC,IAAL,CAAU,MAAV,GAAmB,CAA7B,EAAgC;EAC9B,gBAAI,CAAC,CAAC,SAAN,EAAiB;EACf;EACA;EACA,kBAAI,IAAI,GAAG,CAAX,EAAc,MAAM,IAAI,UAAJ,uBAA8B,IAA9B,iCAAyD,CAAC,CAAC,IAA3D,EAAN;EACd,cAAA,OAAO,GAAG,CAAC,CAAC,WAAF,CAAc,IAAd,GAAqB,IAA/B;EACA,qBAAO,IAAP;EACD,aAP6B;EAS9B;;;EACA,YAAA,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,WAAF,CAAc,IAArB,IAA6B,CAAC,CAAC,WAAF,GAAgB,CAAhB,GAAoB,CAAjD,CAAV;EACA,mBAAO,IAAP;EACD;;EACD,cAAM,UAAU,GAAG,OAAI,CAAC,oBAAL,CAA0B,oBAA1B,EAAgD,CAAC,CAAC,WAAlD,CAAnB;;EACA,cAAI,UAAU,IAAI,CAAlB,EAAqB;EACnB,YAAA,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,WAAF,CAAc,IAArB,IAA6B,CAAC,CAAC,WAAF,GAAgB,CAAhB,GAAoB,CAAjD,CAAV;EACA,mBAAO,IAAP;EACD;;EACD,iBAAO,KAAP;EACD,SApBmB,CAApB;;EAqBA,YAAI,CAAC,WAAL,EAAkB,MAAM,IAAI,UAAJ,gBAAuB,IAAvB,iCAAN;EAClB,eAAO;EAAE,UAAA,OAAO,EAAE,OAAX;EAAyC,UAAA,GAAG,EAAE,WAAW,CAAC;EAA1D,SAAP;EACD,OA1BD;;EA4BA,UAAM,IAAN,GAA6B,YAA7B,CAAM,IAAN;EAAA,UAAY,OAAZ,GAA6B,YAA7B,CAAY,OAAZ;EAAA,UAAqB,GAArB,GAA6B,YAA7B,CAAqB,GAArB;;EACA,UAAI,IAAI,IAAI,IAAZ,EAAkB;EAAA,2BACI,WAAW,CAAC,IAAD,CADf;;EACb,QAAA,OADa,gBACb,OADa;EACJ,QAAA,GADI,gBACJ,GADI;EAEhB,QAAA,UAAU,CAAC,KAAD,EAAQ,GAAR,CAAV;EACA,QAAA,UAAU,CAAC,SAAD,EAAY,OAAZ,CAAV;EACD,OAJD,MAIO,IAAI,OAAO,IAAI,IAAf,EAAqB;EAC1B,YAAM,WAAW,GACf,GAAG,KAAK,SAAR,GAAoB,SAApB,GAAgC,KAAK,IAAL,CAAU,IAAV,CAAe,UAAC,CAAD;EAAA,iBAAO,CAAC,CAAC,IAAF,KAAW,GAAX,IAAkB,CAAC,CAAC,WAAF,KAAkB,GAA3C;EAAA,SAAf,CADlC;EAEA,YAAI,CAAC,WAAL,EAAkB,MAAM,IAAI,UAAJ,eAAsB,GAAtB,wBAAuC,OAAvC,kCAAN;;EAClB,YAAI,OAAO,GAAG,CAAV,IAAe,WAAW,CAAC,SAA/B,EAA0C;EACxC,gBAAM,IAAI,UAAJ,oBAA2B,GAA3B,wCAA4D,IAA5D,EAAN;EACD;;EACD,YAAI,WAAW,CAAC,SAAhB,EAA2B;EACzB,UAAA,IAAI,GAAG,WAAW,CAAC,WAAZ,CAAwB,IAAxB,GAA+B,OAAtC;EACD,SAFD,MAEO;EACL,UAAA,IAAI,GAAG,OAAO,GAAG,WAAW,CAAC,WAAZ,CAAwB,IAAlC,IAA0C,WAAW,CAAC,WAAZ,GAA0B,CAA1B,GAA8B,CAAxE,CAAP;EACD;;EACD,QAAA,UAAU,CAAC,MAAD,EAAS,IAAT,CAAV,CAZ0B;EAc1B;EACA;EACA;;EAhB0B,4BAiBN,WAAW,CAAC,IAAD,CAjBL;;EAiBvB,QAAA,OAjBuB,iBAiBvB,OAjBuB;EAiBd,QAAA,GAjBc,iBAiBd,GAjBc;EAkB3B,OAlBM,MAkBA;EACL,cAAM,IAAI,UAAJ,CAAe,mDAAf,CAAN;EACD;;EACD,+CAAY,YAAZ;EAA0B,QAAA,IAAI,EAAJ,IAA1B;EAAgC,QAAA,OAAO,EAAP,OAAhC;EAAyC,QAAA,GAAG,EAAH;EAAzC;EACD;;;aACQ,4BACP,iBADO,EAEP,KAFO,EAGyB;EAAA,UAAhC,QAAgC,uEAAX,WAAW;EAEhC,UAAI,YAAY,GAAG,iBAAnB,CAFgC;;EAIhC,2BAA6B,YAA7B;EAAA,UAAQ,KAAR,kBAAQ,KAAR;EAAA,UAAe,SAAf,kBAAe,SAAf;EACA,UAAI,KAAK,KAAK,SAAd,EAAyB,YAAY,qCAAQ,YAAR;EAAsB,QAAA,KAAK,EAAE,mBAAmB,CAAC,SAAD;EAAhD,QAAZ;EACzB,WAAK,oBAAL,CAA0B,YAA1B;EACA,MAAA,YAAY,GAAG,KAAK,eAAL,CAAqB,YAArB,CAAf;EACA,yGAAgC,YAAhC,EAA8C,KAA9C,EAAqD,QAArD;EACD;;;aACD,yBAAgB,iBAAhB,EAA8C;EAC5C,UAAM,YAAY,GAAG,KAAK,kBAAL,CAAwB,iBAAxB,CAArB;EACA,UAAQ,IAAR,GAA6B,YAA7B,CAAQ,IAAR;EAAA,UAAc,KAAd,GAA6B,YAA7B,CAAc,KAAd;EAAA,UAAqB,GAArB,GAA6B,YAA7B,CAAqB,GAArB;EACA,UAAQ,SAAR,GAAsB,IAAtB,CAAQ,SAAR;EACA,UAAM,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC,QAAV,CAAmB,IAA1B,IAAkC,SAAS,CAAC,WAAV,GAAwB,CAAxB,GAA4B,CAA9D,CAAxB;EACA,aAAOL,eAAA,CAAmB,eAAnB,EAAoC,KAApC,EAA2C,GAA3C,EAAgD,WAAhD,CAAP;EACD;;;aAQQ,sBAAa,OAAb,EAA4B;EACnC,UAAI,KAAK,+BAAL,IAAwC,KAAK,yBAAjD,EAA4E;EAC1E,YAAM,kBAAkB,GAAGiB,cAAA,CAAkB,OAAO,CAAC,IAA1B,EAAgC,OAAO,CAAC,KAAxC,EAA+C,OAAO,CAAC,GAAvD,EAA4D,IAA5D,EAAkE,EAAlE,EAAsE,EAAtE,IAA4E,CAAvG;;EACA,YAAI,kBAAJ,EAAwB;EACtB,gBAAM,IAAI,UAAJ,CACJ,oBAAa,KAAK,EAAlB,mDACE,sEAFE,CAAN;EAID;EACF;EACF;;;;IApIwC;;MAuI5B;;;;;EACb,8BAAY,EAAZ,EAAmC,YAAnC,EAA2D;EAAA;;EAAA,+BACnD,EADmD,EAC/C,YAD+C;EAE1D;;;;aACQ,oBAAW,YAAX,EAAyC;EAChD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAQ,IAAR,GAAiB,YAAjB,CAAQ,IAAR;EACA,aAAO,CAAC,IAAI,GAAG,CAAR,IAAa,CAAb,KAAmB,CAA1B;EACD;;;aACQ;EAAa;EAAb,mBAA+B;EACtC,aAAO,EAAP;EACD;;;aACQ,4BAAmB,YAAnB,EAA2C;EAClD,UAAQ,KAAR,GAAkB,YAAlB,CAAQ,KAAR,CADkD;;EAGlD,UAAI,KAAK,KAAK,EAAd,EAAkB,OAAO,KAAK,UAAL,CAAgB,YAAhB,IAAgC,CAAhC,GAAoC,CAA3C;EAClB,aAAO,EAAP;EACD;;;aACQ,4BAAmB,YAAnB,EAA2C;EAClD,aAAO,KAAK,kBAAL,CAAwB,YAAxB,CAAP;EACD;;;;IA3BuC;EA+B1C;EACA;EACA;EACA;EACA;EACA;;;MACM;;;;;EACJ,2BAAA;EAAA;;EAAA,+BACQ,SADR,EACmB,CAAC;EAAE,MAAA,IAAI,EAAE,MAAR;EAAgB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,CAAC,IAAT;EAAe,QAAA,KAAK,EAAE,CAAtB;EAAyB,QAAA,GAAG,EAAE;EAA9B;EAA1B,KAAD,CADnB;EAEC;;;IAHyB;;MAKtB;;;;;EACJ,0BAAA;EAAA;;EAAA,+BACQ,QADR,EACkB,CACd;EAAE,MAAA,IAAI,EAAE,MAAR;EAAgB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,GAAR;EAAa,QAAA,KAAK,EAAE,CAApB;EAAuB,QAAA,GAAG,EAAE;EAA5B;EAA1B,KADc,EAEd;EAAE,MAAA,IAAI,EAAE,MAAR;EAAgB,MAAA,SAAS,EAAE;EAA3B,KAFc,CADlB;EAKC;;;IANwB;EAU3B;;;MACM;;;;;EACJ,4BAAA;EAAA;;EAAA,+BACQ,UADR,EACoB,CAChB;EAAE,MAAA,IAAI,EAAE,IAAR;EAAc,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,CAAC,IAAT;EAAe,QAAA,KAAK,EAAE,CAAtB;EAAyB,QAAA,GAAG,EAAE;EAA9B;EAAxB,KADgB,EAEhB;EAAE,MAAA,IAAI,EAAE,IAAR;EAAc,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,KAAK,EAAE,CAAlB;EAAqB,QAAA,GAAG,EAAE;EAA1B,OAAxB;EAAwD,MAAA,WAAW,EAAE;EAAE,QAAA,IAAI,EAAE;EAAR;EAArE,KAFgB,CADpB;EAKC;;;IAN0B;;MASvB;;;;;EACJ,uBAAA;EAAA;;EAAA;;EACE,kCAAM,KAAN,EAAa,CACX;EAAE,MAAA,IAAI,EAAE,QAAR;EAAkB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B;EAA5B,KADW,EAEX;EAAE,MAAA,IAAI,EAAE,YAAR;EAAsB,MAAA,SAAS,EAAE;EAAjC,KAFW,CAAb;EAKO,YAAA,+BAAA,GAAkC,IAAlC;EANT;EAKC;;;IANqB;;MAUlB;;;;;EACJ,4BAAA;EAAA;;EAAA;;EACE,kCAAM,UAAN,EAAkB,CAAC;EAAE,MAAA,IAAI,EAAE,IAAR;EAAc,MAAA,WAAW,EAAE,IAA3B;EAAiC,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,CAAC,GAAT;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B;EAA3C,KAAD,CAAlB;EAEO,YAAA,+BAAA,GAAkC,IAAlC;EAHT;EAEC;;;IAH0B;;MAOvB;;;;;EACJ,2BAAA;EAAA;;EAAA,+BACQ,SADR,EACmB,CACf;EAAE,MAAA,IAAI,EAAE,IAAR;EAAc,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,KAAK,EAAE,CAAlB;EAAqB,QAAA,GAAG,EAAE;EAA1B;EAAxB,KADe,EAEf;EAAE,MAAA,IAAI,EAAE,KAAR;EAAe,MAAA,SAAS,EAAE;EAA1B,KAFe,CADnB;EAKC;;;;aACQ,uBAAgD;EAAgB;EAAhE,MAAsF;EAC7F,UAAM,GAAN,GAAuB,YAAvB,CAAM,GAAN;EAAA,UAAW,OAAX,GAAuB,YAAvB,CAAW,OAAX,CAD6F;EAG7F;EACA;EACA;;EACA,UAAI,GAAG,KAAK,IAAR,IAAgB,GAAG,KAAK,GAA5B,EAAiC,GAAG,GAAG,KAAN;EACjC,UAAI,GAAG,KAAK,IAAR,IAAgB,GAAG,KAAK,GAA5B,EAAiC,GAAG,GAAG,IAAN;EACjC,aAAO;EAAE,QAAA,GAAG,EAAH,GAAF;EAAO,QAAA,OAAO,EAAP;EAAP,OAAP;EACD;;;;IAhByB;EAoB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;MACM;;;;;EACJ,4BAAA;EAAA;;EAAA;;EACE,kCAAM,UAAN,EAAkB;EAEhB;EACA;EAAE,MAAA,IAAI,EAAE,OAAR;EAAiB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAA3B;EAA6D,MAAA,WAAW,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B;EAA1E,KAHgB,EAIhB;EAAE,MAAA,IAAI,EAAE,QAAR;EAAkB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAA5B;EAA8D,MAAA,WAAW,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B;EAA3E,KAJgB,EAKhB;EAAE,MAAA,IAAI,EAAE,OAAR;EAAiB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,EAArB;EAAyB,QAAA,GAAG,EAAE;EAA9B,OAA3B;EAA+D,MAAA,WAAW,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,EAArB;EAAyB,QAAA,GAAG,EAAE;EAA9B;EAA5E,KALgB,EAMhB;EAAE,MAAA,IAAI,EAAE,QAAR;EAAkB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAA5B;EAA+D,MAAA,WAAW,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B;EAA5E,KANgB,EAOhB;EAAE,MAAA,IAAI,EAAE,OAAR;EAAiB,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B,OAA3B;EAA6D,MAAA,WAAW,EAAE;EAAE,QAAA,IAAI,EAAE,IAAR;EAAc,QAAA,KAAK,EAAE,CAArB;EAAwB,QAAA,GAAG,EAAE;EAA7B;EAA1E,KAPgB,EAQhB;EAAE,MAAA,IAAI,EAAE,IAAR;EAAc,MAAA,QAAQ,EAAE;EAAE,QAAA,IAAI,EAAE,CAAR;EAAW,QAAA,KAAK,EAAE,CAAlB;EAAqB,QAAA,GAAG,EAAE;EAA1B;EAAxB,KARgB,EAShB;EAAE,MAAA,IAAI,EAAE,KAAR;EAAe,MAAA,SAAS,EAAE;EAA1B,KATgB,CAAlB;EAYO,YAAA,+BAAA,GAAkC,IAAlC,CAbT;EAgBA;;EACS,YAAA,SAAA,GAAY,MAAZ;EAjBT;EAYC;;;;aAOQ,uBAAgD,YAAhD,EAAiE,OAAjE,EAAgF;EACvF,UAAQ,GAAR,GAAyB,YAAzB,CAAQ,GAAR;EAAA,UAAa,OAAb,GAAyB,YAAzB,CAAa,OAAb;EACA,UAAc,OAAd,GAA0B,OAA1B,CAAQ,IAAR;EACA,UAAI,KAAK,IAAL,CAAU,IAAV,CAAe,UAAC,CAAD;EAAA,eAAO,CAAC,CAAC,IAAF,KAAW,GAAlB;EAAA,OAAf,CAAJ,EAA2C,OAAO;EAAE,QAAA,GAAG,EAAH,GAAF;EAAO,QAAA,OAAO,EAAP;EAAP,OAAP;EAC3C,aAAQ,OAAO,GAAG,CAAV,GAAc;EAAE,QAAA,GAAG,EAAE,KAAP;EAAc,QAAA,OAAO,EAAE,IAAI;EAA3B,OAAd,GAAqD;EAAE,QAAA,GAAG,EAAE,IAAP;EAAa,QAAA,OAAO,EAAE;EAAtB,OAA7D;EACD;;;;IAzB0B;;MAmCd;;;;;EAAf,+BAAA;EAAA;;EAAA;;;EAEE,YAAA,YAAA,GAAe,WAAf,CAFF;;EAwLW,YAAA,MAAA,GAAS,KAAT;EAxLX;EAyLC;;;;aAtLC,oBAAW,YAAX,EAA2C,KAA3C,EAAgE;EAC9D,UAAM,MAAM,GAAG,KAAK,YAAL,CAAkB,YAAY,CAAC,IAA/B,EAAqC,KAArC,CAAf;EACA,aAAO,aAAa,CAAC,MAAD,CAAb,CAAsB,MAAtB,KAAiC,EAAxC;EACD;;;aACD,sBAAa,YAAb,EAA6C,KAA7C,EAAkE;EAChE,aAAO,KAAK,UAAL,CAAgB,YAAhB,EAA8B,KAA9B,IAAuC,EAAvC,GAA4C,EAAnD;EACD;;;aACD;EAAmB;EAAnB,yBAAqC;EACnC,aAAO,EAAP;EACD;;;aACD;EAAmB;EAAnB,yBAAqC;EACnC,aAAO,EAAP;EACD;;;aACD,sBAAa,YAAb,EAAmC,KAAnC,EAAwD;EAAA;;EACtD,UAAI,YAAY,KAAK,SAArB,EAAgC;EAC9B,cAAM,IAAI,SAAJ,CAAc,cAAd,CAAN;EACD;;EACD,UAAM,GAAG,GAAG,IAAI,CAAC,SAAL,CAAe;EAAE,QAAA,IAAI,EAAE,cAAR;EAAwB,QAAA,YAAY,EAAZ,YAAxB;EAAsC,QAAA,EAAE,EAAE,KAAK;EAA/C,OAAf,CAAZ;EACA,UAAM,MAAM,GAAG,KAAK,CAAC,GAAN,CAAU,GAAV,CAAf;EACA,UAAI,MAAJ,EAAY,OAAO,MAAP;EACZ,UAAM,cAAc,GAAG,KAAK,YAAL,EAAvB;;EACA,UAAM,eAAe,GAAG,SAAlB,eAAkB,CAAC,OAAD,EAAkB,YAAlB,EAA0C;EAChE,YAAM,aAAa,GAAG,kBAAkB,CAAC;EAAE,UAAA,OAAO,EAAP,OAAF;EAAW,UAAA,QAAQ,EAAE,CAArB;EAAwB,UAAA,MAAM,EAAE;EAAhC,SAAD,CAAxC;EACA,YAAM,UAAU,GAAG,IAAI,IAAJ,CAAS,aAAT,CAAnB,CAFgE;;EAIhE,QAAA,UAAU,CAAC,UAAX,CAAsB,YAAY,GAAG,CAArC;EACA,YAAM,YAAY,GAAG,cAAc,CAAC,aAAf,CAA6B,UAA7B,CAArB;EACA,YAAM,mBAAmB,GAAI,YAAY,CAAC,IAAb,CAAkB,UAAC,EAAD;EAAA,iBAAQ,EAAE,CAAC,IAAH,KAAY,OAApB;EAAA,SAAlB,EAA2E,KAAxG;EACA,YAAM,WAAW,GAAG,CAAE,YAAY,CAAC,IAAb,CAAkB,UAAC,EAAD;EAAA,iBAAQ,EAAE,CAAC,IAAH,KAAY,KAApB;EAAA,SAAlB,EAAyE,KAA/F;EACA,YAAI,oBAAoB,GAA4D,YAAY,CAAC,IAAb,CAClF,UAAC,EAAD;EAAA,iBAAS,EAAE,CAAC,IAAH,KAAuB,aAAhC;EAAA,SADkF,CAApF;;EAGA,YAAI,oBAAoB,KAAK,SAA7B,EAAwC;EACtC,UAAA,oBAAoB,GAAG,CAAC,oBAAoB,CAAC,KAA7C;EACD,SAFD,MAEO;EACL;EACA;EACA,gBAAM,IAAI,UAAJ,kEACsD,OAAI,CAAC,EAD3D,iDAAN;EAGD;;EACD,eAAO;EAAE,UAAA,mBAAmB,EAAnB,mBAAF;EAAuB,UAAA,WAAW,EAAX,WAAvB;EAAoC,UAAA,oBAAoB,EAApB;EAApC,SAAP;EACD,OArBD,CARsD;EAgCtD;;;EACA,UAAI,YAAY,GAAG,EAAnB;;EACA,6BAAiE,eAAe,CAAC,YAAD,EAAe,YAAf,CAAhF;EAAA,UAAM,mBAAN,oBAAM,mBAAN;EAAA,UAA2B,WAA3B,oBAA2B,WAA3B;EAAA,UAAwC,oBAAxC,oBAAwC,oBAAxC,CAlCsD;EAqCtD;;;EACA,UAAI,mBAAmB,KAAK,GAA5B,EAAiC;EAC/B,QAAA,YAAY,IAAI,EAAhB;;EAD+B,gCAES,eAAe,CAAC,YAAD,EAAe,YAAf,CAFxB;;EAE5B,QAAA,mBAF4B,qBAE5B,mBAF4B;EAEP,QAAA,WAFO,qBAEP,WAFO;EAGhC,OAzCqD;EA4CtD;;;EACA,MAAA,YAAY,IAAI,WAAW,GAAG,CAA9B;EACA,UAAM,MAAM,GAAG,EAAf;EACA,UAAI,UAAU,GAAG,CAAjB;EACA,UAAI,cAAJ;EACA,UAAI,cAAJ;EACA,UAAI,IAAI,GAAG,KAAX;;EACA,SAAG;EAAA,gCAC6D,eAAe,CAAC,YAAD,EAAe,YAAf,CAD5E;;EACE,QAAA,mBADF,qBACE,mBADF;EACuB,QAAA,WADvB,qBACuB,WADvB;EACoC,QAAA,oBADpC,qBACoC,oBADpC;;EAED,YAAI,cAAJ,EAAoB;EAClB,UAAA,MAAM,CAAC,cAAD,CAAN,CAAiC,WAAjC,GAA+C,cAAc,GAAG,EAAjB,GAAsB,WAArE;EACD;;EACD,YAAI,oBAAoB,KAAK,YAA7B,EAA2C;EACzC,UAAA,IAAI,GAAG,IAAP;EACD,SAFD,MAEO;EACL,UAAA,MAAM,CAAC,mBAAD,CAAN,GAA8B;EAAE,YAAA,UAAU,EAAE,UAAU;EAAxB,WAA9B,CADK;EAGL;EACA;;EACA,UAAA,YAAY,IAAI,EAAhB;EACD;;EACD,QAAA,cAAc,GAAG,WAAjB;EACA,QAAA,cAAc,GAAG,mBAAjB;EACD,OAhBD,QAgBS,CAAC,IAhBV;;EAiBA,MAAA,MAAM,CAAC,cAAD,CAAN,CAAuB,WAAvB,GAAqC,cAAc,GAAG,EAAjB,GAAsB,WAA3D;EAEA,MAAA,KAAK,CAAC,GAAN,CAAU,GAAV,EAAe,MAAf;EACA,aAAO,MAAP;EACD;;;aACD,yBAAgB,YAAhB,EAAyC;EACvC,UAAQ,IAAR,GAAwB,YAAxB,CAAQ,IAAR;EAAA,UAAc,KAAd,GAAwB,YAAxB,CAAc,KAAd;EACA,aAAO;EAAE,QAAA,IAAI,EAAJ,IAAF;EAAQ,QAAA,KAAK,EAAE,KAAK,IAAI,EAAT,GAAc,EAAd,GAAmB,KAAK,GAAG,CAA1C;EAA6C,QAAA,GAAG,EAAE;EAAlD,OAAP;EACD;;;aACQ,4BACP,YADO,EAEP,KAFO,EAIe;EAAA,UADtB,QACsB,uEADD,WACC;EAAA,UAAtB,cAAsB,uEAAL,KAAK;EAEtB,UAAM,IAAN,GAA2D,YAA3D,CAAM,IAAN;EAAA,UAAY,KAAZ,GAA2D,YAA3D,CAAY,KAAZ;EAAA,UAAmB,UAAnB,GAA2D,YAA3D,CAAmB,UAAnB;EAAA,UAA+B,GAA/B,GAA2D,YAA3D,CAA+B,GAA/B;EAAA,UAAoC,SAApC,GAA2D,YAA3D,CAAoC,SAApC;EAAA,UAA+C,OAA/C,GAA2D,YAA3D,CAA+C,OAA/C;;EACA,UAAI,cAAJ,EAAoB;EAClB;EACA;EACA;EACA,QAAA,IAAI,GAAG,OAAP;EACA,YAAI,UAAU,IAAI,UAAU,KAAK,KAAjC,EAAwC,MAAM,IAAI,UAAJ,yCAAgD,UAAhD,EAAN;;EACxC,YAAM,UAAS,GAAG,cAAc,CAAC,KAAD,EAAkB,UAAU,KAAK,SAAjC,CAAhC;;EACA,YAAM,WAAW,aAAM,KAAN,SAAc,UAAU,IAAI,EAA5B,CAAjB;EACA,YAAM,MAAM,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAkC,KAAlC,CAAf;EACA,YAAM,SAAS,GAAG,MAAM,CAAC,WAAD,CAAxB;EACA,YAAI,SAAS,KAAK,SAAlB,EAA6B,MAAM,IAAI,UAAJ,2BAAkC,WAAlC,8BAAiE,IAAjE,EAAN;EAC7B,QAAA,KAAK,GAAG,SAAS,CAAC,UAAlB;EACA,eAAO;EAAE,UAAA,IAAI,EAAE,IAAR;EAAwB,UAAA,KAAK,EAAL,KAAxB;EAA+B,UAAA,GAAG,EAAE,GAApC;EAAmD,UAAA,GAAG,EAAE,SAAxD;EAAmE,UAAA,OAAO,EAAP,OAAnE;EAA4E,UAAA,SAAS,EAAT;EAA5E,SAAP;EACD,OAbD,MAaO;EACL;EACA;EACA,aAAK,oBAAL,CAA0B,YAA1B;EACA,YAAI,IAAI,KAAK,SAAb,EAAwB,IAAI,GAAG,OAAP;EACxB,YAAI,OAAO,KAAK,SAAhB,EAA2B,OAAO,GAAG,IAAV;;EAC3B,YAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,cAAM,OAAM,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAkC,KAAlC,CAAf;;EACA,cAAI,UAAU,GAAI,SAAoB,CAAC,OAArB,CAA6B,GAA7B,EAAkC,KAAlC,EAAyC,KAAzC,CAA+C,CAA/C,CAAlB;EACA,cAAI,UAAU,CAAC,CAAD,CAAV,KAAkB,GAAtB,EAA2B,UAAU,GAAG,UAAU,CAAC,KAAX,CAAiB,CAAjB,CAAb;EAC3B,cAAI,UAAS,GAAG,OAAM,CAAC,UAAD,CAAtB;EACA,UAAA,KAAK,GAAG,UAAS,IAAI,UAAS,CAAC,UAA/B,CALuB;;EAOvB,cACE,KAAK,KAAK,SAAV,IACC,SAAoB,CAAC,QAArB,CAA8B,GAA9B,CADD,IAEA,CAAC,aAAa,CAAC,IAAd,CAAmB,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,CAAnB,EAA6C,SAA7C,CAFD,IAGA,QAAQ,KAAK,WAJf,EAKE;EACA,gBAAI,SAAS,GAAI,SAAoB,CAAC,KAArB,CAA2B,CAA3B,EAA8B,CAAC,CAA/B,CAAjB;EACA,gBAAI,SAAS,CAAC,CAAD,CAAT,KAAiB,GAArB,EAA0B,SAAS,GAAG,SAAS,CAAC,KAAV,CAAgB,CAAhB,CAAZ;EAC1B,YAAA,UAAS,GAAG,OAAM,CAAC,SAAD,CAAlB;;EACA,gBAAI,UAAJ,EAAe;EAAA,gCAC8B,UAD9B;EACG,cAAA,GADH,eACV,WADU;EACoB,cAAA,KADpB,eACQ,UADR;EAEb,cAAA,SAAS,GAAG,cAAc,CAAC,SAAD,CAA1B;EACD;EACF;;EACD,cAAI,KAAK,KAAK,SAAd,EAAyB;EACvB,kBAAM,IAAI,UAAJ,2BAAkC,SAAlC,8BAA+D,IAA/D,EAAN;EACD;EACF,SAxBD,MAwBO,IAAI,SAAS,KAAK,SAAlB,EAA6B;EAClC,cAAM,QAAM,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAkC,KAAlC,CAAf;;EACA,cAAM,YAAY,GAAG,aAAa,CAAC,QAAD,CAAlC;EACA,cAAM,YAAY,GAAG,YAAY,CAAC,MAAlC;;EACA,cAAI,QAAQ,KAAK,QAAjB,EAA2B;EACzB,YAAAL,aAAA,CAAiB,KAAjB,EAAwB,CAAxB,EAA2B,YAA3B;EACA,YAAAA,aAAA,CAAiB,GAAjB,EAAgC,CAAhC,EAAmC,KAAK,kBAAL,EAAnC;EACD,WAHD,MAGO;EACL,YAAA,KAAK,GAAGC,gBAAA,CAAoB,KAApB,EAA2B,CAA3B,EAA8B,YAA9B,CAAR;EACA,YAAA,GAAG,GAAGA,gBAAA,CAAoB,GAApB,EAAyB,CAAzB,EAA4B,KAAK,kBAAL,EAA5B,CAAN;EACD;;EACD,cAAM,kBAAkB,GAAG,YAAY,CAAC,IAAb,CAAkB;EAAA;EAAA,gBAAI,CAAJ;;EAAA,mBAAW,CAAC,CAAC,UAAF,KAAiB,KAA5B;EAAA,WAAlB,CAA3B;;EACA,cAAI,kBAAkB,KAAK,SAA3B,EAAsC;EACpC,kBAAM,IAAI,UAAJ,yBAAgC,KAAhC,8BAAyD,IAAzD,EAAN;EACD;;EACD,UAAA,SAAS,GAAG,cAAc,CACxB,kBAAkB,CAAC,CAAD,CAAlB,CAAsB,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,CADwB,EAExB,kBAAkB,CAAC,CAAD,CAAlB,CAAsB,OAAtB,CAA8B,KAA9B,MAAyC,CAAC,CAFlB,CAA1B;EAID,SAnBM,MAmBA;EACL;EACA,cAAM,QAAM,GAAG,KAAK,YAAL,CAAkB,IAAlB,EAAkC,KAAlC,CAAf;;EACA,cAAI,WAAU,GAAG,SAAS,CAAC,OAAV,CAAkB,GAAlB,EAAuB,KAAvB,EAA8B,KAA9B,CAAoC,CAApC,CAAjB;;EACA,cAAI,WAAU,CAAC,CAAD,CAAV,KAAkB,GAAtB,EAA2B,WAAU,GAAG,WAAU,CAAC,KAAX,CAAiB,CAAjB,CAAb;EAC3B,cAAM,WAAS,GAAG,QAAM,CAAC,WAAD,CAAxB;EACA,cAAI,CAAC,WAAL,EAAgB,MAAM,IAAI,UAAJ,+BAAsC,SAAtC,8BAAmE,IAAnE,EAAN;;EAChB,cAAI,KAAK,KAAK,WAAS,CAAC,UAAxB,EAAoC;EAClC,kBAAM,IAAI,UAAJ,qBAA4B,SAA5B,0CAAqE,KAArE,8BAA8F,IAA9F,EAAN;EACD;EACF;;EACD,iDACK,YADL;EAEE,UAAA,IAAI,EAAE,IAFR;EAGE,UAAA,OAAO,EAAP,OAHF;EAIE,UAAA,KAAK,EAAL,KAJF;EAKE,UAAA,SAAS,EAAE,SALb;EAME,UAAA,GAAG,EAAE;EANP;EAQD;EACF;;;;IAtLsC;;MA2LnC;;;;;EAAN,2BAAA;EAAA;;EAAA;;;EACE,YAAA,EAAA,GAAK,SAAL;EADF;EAEC;;;IAF2B;;;MAKtB;;;;;EAAN,yBAAA;EAAA;;EAAA;;;EACE,YAAA,EAAA,GAAK,OAAL;EADF;EAEC;;;IAFyB;EAI1B;;;;;EAKG;;;EACH,IAAM,UAAU,GAAe;EAC7B;EACA;EACA,EAAA,MAAM,EAAE,SAHqB;EAI7B,EAAA,cAJ6B,0BAId,WAJc,EAID,OAJC,EAIQ,QAJR,EAIgB;EAC3C,QAAM,QAAQ,GAAGhB,kBAAA,CAAsB,OAAtB,CAAjB;EACA,QAAM,KAAK,GAAG,IAAI,cAAJ,EAAd,CAF2C;;EAI3C,QAAM,MAAM,GAAGE,qBAAA,CACb,WADa,EAEb,CAAC,KAAD,EAAQ,KAAR,EAAe,SAAf,EAA0B,OAA1B,EAAmC,WAAnC,EAAgD,MAAhD,CAFa,EAGb,CAAC,KAAD,CAHa,CAAf;;EAKA,gCAA6B,KAAK,MAAL,CAAY,iBAAZ,CAA8B,MAA9B,EAAsC,QAAtC,EAAgD,KAAhD,CAA7B;EAAA,QAAQ,IAAR,yBAAQ,IAAR;EAAA,QAAc,KAAd,yBAAc,KAAd;EAAA,QAAqB,GAArB,yBAAqB,GAArB;;EACA,QAAM,MAAM,GAAGE,kBAAA,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC,GAAnC,EAAwC,QAAxC,CAAf;EACA,IAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB;EACA,WAAO,MAAP;EACD,GAjB4B;EAkB7B,EAAA,mBAlB6B,+BAkBT,WAlBS,EAkBI,OAlBJ,EAkBa,QAlBb,EAkBqB;EAChD,QAAM,QAAQ,GAAGJ,kBAAA,CAAsB,OAAtB,CAAjB;EACA,QAAM,KAAK,GAAG,IAAI,cAAJ,EAAd,CAFgD;;EAIhD,QAAM,MAAM,GAAGE,qBAAA,CAAyB,WAAzB,EAAsC,CAAC,KAAD,EAAQ,SAAR,EAAmB,OAAnB,EAA4B,WAA5B,EAAyC,MAAzC,CAAtC,EAAwF,EAAxF,CAAf;;EACA,iCAA6B,KAAK,MAAL,CAAY,iBAAZ,mCAAmC,MAAnC;EAA2C,MAAA,GAAG,EAAE;EAAhD,QAAqD,QAArD,EAA+D,KAA/D,CAA7B;EAAA,QAAQ,IAAR,0BAAQ,IAAR;EAAA,QAAc,KAAd,0BAAc,KAAd;EAAA,QAAqB,GAArB,0BAAqB,GAArB;;EACA,QAAM,MAAM,GAAGI,uBAAA,CAA2B,IAA3B,EAAiC,KAAjC,EAAwC,QAAxC;EAAkD;EAAwB,IAAA,GAA1E,CAAf;EACA,IAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB;EACA,WAAO,MAAP;EACD,GA3B4B;EA4B7B,EAAA,kBA5B6B,8BA6B3B,WA7B2B,EA8B3B,OA9B2B,EA+B3B,QA/B2B,EA+BQ;EAEnC,QAAM,QAAQ,GAAGN,kBAAA,CAAsB,OAAtB,CAAjB,CAFmC;EAInC;EACA;EACA;;EACA,QAAM,KAAK,GAAG,IAAI,cAAJ,EAAd;EACA,QAAM,MAAM,GAAGE,qBAAA,CACb,WADa,EAEb,CAAC,KAAD,EAAQ,KAAR,EAAe,SAAf,EAA0B,OAA1B,EAAmC,WAAnC,EAAgD,MAAhD,CAFa,EAGb,CAAC,KAAD,CAHa,CAAf;;EAKA,gCAA6B,KAAK,MAAL,CAAY,kBAAZ,CAA+B,MAA/B,EAAuC,QAAvC,EAAiD,KAAjD,CAA7B;EAAA,QAAQ,IAAR,yBAAQ,IAAR;EAAA,QAAc,KAAd,yBAAc,KAAd;EAAA,QAAqB,GAArB,yBAAqB,GAArB,CAbmC;;;EAenC,QAAM,MAAM,GAAGK,sBAAA,CAA0B,KAA1B,EAAiC,GAAjC,EAAsC,QAAtC;EAAgD;EAAyB,IAAA,IAAzE,CAAf;EACA,IAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB;EACA,WAAO,MAAP;EACD,GAjD4B;EAkD7B,EAAA,MAlD6B,kBAkDtB,WAlDsB,EAkDX;EAChB,QAAI,MAAM,GAAG,WAAb;EACA,QAAI,aAAa,CAAC,IAAd,CAAmB,MAAnB,EAA2B,MAA3B,CAAJ,EAAwC,MAAM,gCAAO,MAAP,IAAe,KAAf,EAAsB,SAAtB,EAAN;EACxC,WAAO,MAAP;EACD,GAtD4B;EAuD7B,EAAA,WAvD6B,uBAuDjB,MAvDiB,EAuDT,gBAvDS,EAuDO;EAClC,QAAM,UAAU,sBAAQ,MAAR,CAAhB;;EACA,QAAM,oBAAoB,sBAAQ,gBAAR,CAA1B,CAFkC;EAIlC;;;EACA,QAAQ,KAAR,GAA8D,UAA9D,CAAQ,KAAR;EAAA,QAAe,SAAf,GAA8D,UAA9D,CAAe,SAAf;EAAA,QAA0B,IAA1B,GAA8D,UAA9D,CAA0B,IAA1B;EAAA,QAA8D,UAA9D,CAAgC,GAAhC;EAAA,QAA8D,UAA9D,CAAqC,OAArC;EAAA,YAAiD,QAAjD,4BAA8D,UAA9D;;EACA,QACS,QADT,GAMI,oBANJ,CACE,KADF;EAAA,QAEa,YAFb,GAMI,oBANJ,CAEE,SAFF;EAAA,QAGQ,OAHR,GAMI,oBANJ,CAGE,IAHF;EAAA,QAIO,MAJP,GAMI,oBANJ,CAIE,GAJF;EAAA,QAKW,UALX,GAMI,oBANJ,CAKE,OALF;;EAOA,QAAI,QAAQ,KAAK,SAAb,IAA0B,YAAY,KAAK,SAA/C,EAA0D;EACxD,MAAA,QAAQ,CAAC,KAAT,GAAiB,KAAjB;EACA,MAAA,QAAQ,CAAC,SAAT,GAAqB,SAArB;EACD;;EACD,QAAI,OAAO,KAAK,SAAZ,IAAyB,MAAM,KAAK,SAApC,IAAiD,UAAU,KAAK,SAApE,EAA+E;EAC7E;EACA;EACA;EACA,MAAA,QAAQ,CAAC,IAAT,GAAgB,IAAhB;EACD;;EACD,6CAAY,QAAZ,GAAyB,oBAAzB;EACD,GA/E4B;EAgF7B,EAAA,OAhF6B,mBAiF3B,IAjF2B,EAkF3B,KAlF2B,EAmF3B,MAnF2B,EAoF3B,KApF2B,EAqF3B,IArF2B,EAsF3B,QAtF2B,EAuF3B,QAvF2B,EAuFA;EAE3B,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,QAAM,KAAK,GAAG,KAAK,MAAL,CAAY,WAAZ,CAAwB,YAAxB,EAAsC;EAAE,MAAA,KAAK,EAAL,KAAF;EAAS,MAAA,MAAM,EAAN,MAAT;EAAiB,MAAA,KAAK,EAAL,KAAjB;EAAwB,MAAA,IAAI,EAAJ;EAAxB,KAAtC,EAAsE,QAAtE,EAAgF,KAAhF,CAAd;EACA,QAAM,QAAQ,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAA8B,KAA9B,EAAqC,WAArC,EAAkD,KAAlD,CAAjB;EACA,QAAQ,IAAR,GAA6B,QAA7B,CAAQ,IAAR;EAAA,QAAc,KAAd,GAA6B,QAA7B,CAAc,KAAd;EAAA,QAAqB,GAArB,GAA6B,QAA7B,CAAqB,GAArB;EACA,QAAM,iBAAiB,GAAGH,kBAAA,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC,GAAnC,EAAwC,QAAxC,CAA1B,CAP2B;;EAS3B,QAAM,QAAQ,GAAG,IAAI,cAAJ,CAAmB,KAAnB,CAAjB;EACA,IAAA,QAAQ,CAAC,SAAT,CAAmB,iBAAnB;EACA,WAAO,iBAAP;EACD,GAnG4B;EAoG7B,EAAA,SApG6B,qBAoGnB,GApGmB,EAoGM,GApGN,EAoG+B,WApG/B,EAoG6D;EACxF,QAAM,QAAQ,GAAG,cAAc,CAAC,iBAAf,CAAiC,GAAjC,CAAjB;EACA,QAAM,QAAQ,GAAG,cAAc,CAAC,iBAAf,CAAiC,GAAjC,CAAjB;EACA,QAAM,WAAW,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,GAAnC,EAAwC,QAAxC,CAApB;EACA,QAAM,WAAW,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,GAAnC,EAAwC,QAAxC,CAApB;EACA,QAAM,MAAM,GAAG,KAAK,MAAL,CAAY,aAAZ,CAA0B,WAA1B,EAAuC,WAAvC,EAAoD,WAApD,EAAiE,QAAjE,CAAf;EACA,WAAO,MAAP;EACD,GA3G4B;EA4G7B,EAAA,IA5G6B,gBA4GxB,IA5GwB,EA4GA;EAC3B,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,WAAO,YAAY,CAAC,IAApB;EACD,GAhH4B;EAiH7B,EAAA,KAjH6B,iBAiHvB,IAjHuB,EAiHC;EAC5B,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,WAAO,YAAY,CAAC,KAApB;EACD,GArH4B;EAsH7B,EAAA,GAtH6B,eAsHzB,IAtHyB,EAsHD;EAC1B,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,WAAO,YAAY,CAAC,GAApB;EACD,GA1H4B;EA2H7B,EAAA,GA3H6B,eA2HzB,IA3HyB,EA2HD;EAC1B,QAAI,CAAC,KAAK,MAAL,CAAY,MAAjB,EAAyB,OAAO,SAAP;EACzB,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,WAAO,YAAY,CAAC,GAApB;EACD,GAhI4B;EAiI7B,EAAA,OAjI6B,mBAiIrB,IAjIqB,EAiIG;EAC9B,QAAI,CAAC,KAAK,MAAL,CAAY,MAAjB,EAAyB,OAAO,SAAP;EACzB,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,WAAO,YAAY,CAAC,OAApB;EACD,GAtI4B;EAuI7B,EAAA,SAvI6B,qBAuInB,IAvImB,EAuIK;EAChC,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,WAAO,YAAY,CAAC,SAApB;EACD,GA3I4B;EA4I7B,EAAA,SA5I6B,qBA4InB,IA5ImB,EA4IK;EAChC,WAAO,IAAI,CAAC,SAAD,CAAJ,CAAgB,SAAhB,CAA0B,IAA1B,CAAP;EACD,GA9I4B;EA+I7B,EAAA,SA/I6B,qBA+InB,IA/ImB,EA+IK;EAChC,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAA8B,IAA9B,EAAoC,KAApC,CAArB;EACA,QAAM,WAAW,GAAG,KAAK,MAAL,CAAY,mBAAZ,CAAgC,YAAhC,CAApB;EACA,QAAM,QAAQ,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAA8B,WAA9B,EAA2C,YAA3C,EAAyD,KAAzD,CAAjB;EACA,WAAO,QAAQ,GAAG,CAAlB;EACD,GArJ4B;EAsJ7B,EAAA,UAtJ6B,sBAsJlB,IAtJkB,EAsJM;EACjC,WAAO,IAAI,CAAC,SAAD,CAAJ,CAAgB,UAAhB,CAA2B,IAA3B,CAAP;EACD,GAxJ4B;EAyJ7B,EAAA,UAzJ6B,sBAyJlB,IAzJkB,EAyJM;EACjC,WAAO,IAAI,CAAC,SAAD,CAAJ,CAAgB,UAAhB,CAA2B,IAA3B,CAAP;EACD,GA3J4B;EA4J7B,EAAA,WA5J6B,uBA4JjB,IA5JiB,EA4Jb;EACd,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB,CAFc;;EAKd,QAAM,GAAG,GAAG,KAAK,MAAL,CAAY,kBAAZ,CAA+B,YAA/B,CAAZ;EACA,QAAM,GAAG,GAAG,KAAK,MAAL,CAAY,kBAAZ,CAA+B,YAA/B,CAAZ;EACA,QAAI,GAAG,KAAK,GAAZ,EAAiB,OAAO,GAAP,CAPH;EAUd;EACA;;EACA,QAAM,oBAAoB,GAAG,KAAK,MAAL,CAAY,oBAAZ,CAAiC,YAAjC,CAA7B;EACA,QAAM,wBAAwB,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAA8B,oBAA9B,EAAoD,CAApD,EAAuD,WAAvD,EAAoE,KAApE,CAAjC;EACA,QAAM,MAAM,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAA8B,oBAA9B,EAAoD,wBAApD,EAA8E,KAA9E,CAAf;EACA,WAAO,MAAP;EACD,GA5K4B;EA6K7B,EAAA,UA7K6B,sBA6KlB,SA7KkB,EA6KT;EAClB,QAAI,IAAI,GAAG,SAAX;EACA,QAAI,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,CAAZ,EAA8B,IAAI,GAAGN,cAAA,CAAkB,IAAlB,CAAP;EAC9B,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,QAAM,mBAAmB,GAAG,KAAK,MAAL,CAAY,mBAAZ,CAAgC,YAAhC,CAA5B;EACA,QAAM,uBAAuB,GAAG,KAAK,MAAL,CAAY,WAAZ,CAAwB,mBAAxB,EAA6C;EAAE,MAAA,KAAK,EAAE;EAAT,KAA7C,EAA2D,WAA3D,EAAwE,KAAxE,CAAhC;EACA,QAAM,MAAM,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAA8B,mBAA9B,EAAmD,uBAAnD,EAA4E,KAA5E,CAAf;EACA,WAAO,MAAP;EACD,GAtL4B;EAuL7B,EAAA,YAvL6B,wBAuLhB,IAvLgB,EAuLZ;EACf,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,QAAM,MAAM,GAAG,KAAK,MAAL,CAAY,YAAZ,CAAyB,YAAzB,EAAuC,KAAvC,CAAf;EACA,WAAO,MAAP;EACD,GA5L4B;EA6L7B,EAAA,UA7L6B,sBA6LlB,SA7LkB,EA6LT;EAClB,QAAI,IAAI,GAAG,SAAX;EACA,QAAI,CAAC,OAAO,CAAC,IAAD,EAAO,QAAP,CAAZ,EAA8B,IAAI,GAAGA,cAAA,CAAkB,IAAlB,CAAP;EAC9B,QAAM,KAAK,GAAG,cAAc,CAAC,iBAAf,CAAiC,IAAjC,CAAd;EACA,QAAM,YAAY,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAmC,IAAnC,EAAyC,KAAzC,CAArB;EACA,QAAM,MAAM,GAAG,KAAK,MAAL,CAAY,UAAZ,CAAuB,YAAvB,EAAqC,KAArC,CAAf;EACA,WAAO,MAAP;EACD;EApM4B,CAA/B;;EAuMA,0BAAqB,CACnB,YADmB,EAEnB,aAFmB,EAGnB,cAHmB,EAInB,aAJmB,EAKnB,YALmB,EAMnB,aANmB,EAOnB,WAPmB,EAQnB,SARmB,EASnB,YATmB,EAUnB,cAVmB,EAWnB,aAXmB,EAYnB,cAZmB,EAanB,aAbmB,EAcnB,qBAdmB,EAenB,iBAfmB,EAgBnB,kBAhBmB,EAiBnB,iBAjBmB,EAkBnB,eAlBmB,CAArB,8BAmBG;EAnBE,MAAM,MAAM,aAAZ;EAoBH,MAAM,MAAM,GAAG,IAAI,MAAJ,EAAf,CADC;EAGD;;EACA,EAAA,IAAI,CAAC,MAAM,CAAC,EAAR,CAAJ,qCAAuB,UAAvB;EAAmC,IAAA,MAAM,EAAN;EAAnC;EACD;;MCt7EY,SAAb;EACE,qBACE,YADF,EAEE,aAFF,EAGE,WAHF,EAImE;EAAA,QAAjE,aAAiE,uEAAvBJ,kBAAA,EAAuB;;EAAA;;EAEjE,QAAM,OAAO,GAAG2B,wBAAA,CAA4B,YAA5B,CAAhB;EACA,QAAM,QAAQ,GAAGA,wBAAA,CAA4B,aAA5B,CAAjB;EACA,QAAM,MAAM,GAAGA,wBAAA,CAA4B,WAA5B,CAAf;EACA,QAAM,QAAQ,GAAG7B,kBAAA,CAAsB,aAAtB,CAAjB,CALiE;EAQjE;EACA;EACA;;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,UAAJ,CAAe,6DAAf,CAAN;EACD;;EAED,IAAA8B,uBAAA,CAA2B,IAA3B,EAAiC,OAAjC,EAA0C,QAA1C,EAAoD,MAApD,EAA4D,QAA5D;EACD;;EArBH;EAAA;EAAA,SAsBE,eAAY;EACV,UAAI,CAACvD,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EAzBH;EAAA;EAAA,SA0BE,eAAO;EACL,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOwD,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,IAAxC,CAAP;EACD;EA7BH;EAAA;EAAA,SA8BE,eAAW;EACT,UAAI,CAACxD,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOyD,eAAA,CAAmB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA1B,EAA4C,IAA5C,CAAP;EACD;EAjCH;EAAA;EAAA,SAkCE,eAAQ;EACN,UAAI,CAACzD,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO0D,YAAA,CAAgB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAvB,EAAyC,IAAzC,CAAP;EACD;EArCH;EAAA;EAAA,SAsCE,eAAS;EACP,UAAI,CAAC1D,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO2D,aAAA,CAAiB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB,EAA0C,IAA1C,CAAP;EACD;EAzCH;EAAA;EAAA,SA0CE,eAAa;EACX,UAAI,CAAC3D,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO4D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EA7CH;EAAA;EAAA,SA8CE,eAAO;EACL,UAAI,CAAC5D,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO6D,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,IAAxC,CAAP;EACD;EAjDH;EAAA;EAAA,SAkDE,eAAa;EACX,UAAI,CAAC7D,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO8D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EArDH;EAAA;EAAA,SAsDE,eAAa;EACX,UAAI,CAAC9D,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO+D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EAzDH;EAAA;EAAA,SA0DE,eAAc;EACZ,UAAI,CAAC/D,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOgE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EA7DH;EAAA;EAAA,SA8DE,eAAc;EACZ,UAAI,CAAChE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOiE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EAjEH;EAAA;EAAA,SAkEE,eAAe;EACb,UAAI,CAACjE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOkE,mBAAA,CAAuB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA9B,EAAgD,IAAhD,CAAP;EACD;EArEH;EAAA;EAAA,SAsEE,eAAc;EACZ,UAAI,CAAClE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOmE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EAzEH;EAAA;EAAA,SA0EE,eAAgB;EACd,UAAI,CAACnE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOoE,oBAAA,CAAwB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA/B,EAAiD,IAAjD,CAAP;EACD;EA7EH;EAAA;EAAA,SA8EE,eAAc;EACZ,UAAI,CAACpE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAOqE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EAjFH;EAAA;EAAA,WAkFE,eAAK,gBAAL,EAAqF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EACnF,UAAI,CAACrE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EAC9B,UAAI,CAACwB,QAAA,CAAY,gBAAZ,CAAL,EAAoC;EAClC,cAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACD;;EACD,MAAA8C,kCAAA,CAAsC,gBAAtC;EAEA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGC,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,EAAQ,OAAR,EAAiB,WAAjB,EAA8B,MAA9B,CAA5B,CAAnB;EACA,UAAM,KAAK,GAAGpC,qBAAA,CAAyB,gBAAzB,EAA2C,UAA3C,EAAuD,SAAvD,CAAd;;EACA,UAAI,CAAC,KAAL,EAAY;EACV,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;EACD;;EACD,UAAI,MAAM,GAAGA,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAb;EACA,MAAA,MAAM,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,KAAzC,CAAT;EACA,MAAA,MAAM,GAAGrC,qBAAA,CAAyB,MAAzB,EAAiC,UAAjC,EAA6C,EAA7C,CAAT;EAEA,UAAM,OAAO,GAAGnB,gBAAA,CAAoB,YAApB,CAAhB;EAEA,aAAOyD,sBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,OAA5C,CAAP;EACD;EAtGH;EAAA;EAAA,WAuGE,sBAAa,aAAb,EAAqD;EACnD,UAAI,CAACzE,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,QAAQ,GAAGyB,kBAAA,CAAsB,aAAtB,CAAjB;EACA,aAAO,IAAI,SAAJ,CAAc,OAAO,CAAC,IAAD,EAAO,QAAP,CAArB,EAAuC,OAAO,CAAC,IAAD,EAAO,SAAP,CAA9C,EAAiE,OAAO,CAAC,IAAD,EAAO,OAAP,CAAxE,EAAyF,QAAzF,CAAP;EACD;EA3GH;EAAA;EAAA,WA4GE,aAAI,oBAAJ,EAAsF;EAAA,UAA1C,YAA0C,uEAAT,SAAS;EACpF,UAAI,CAACzB,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAE9B,UAAM,QAAQ,GAAGgC,kBAAA,CAAsB,oBAAtB,CAAjB;EACA,UAAM,OAAO,GAAGhB,gBAAA,CAAoB,YAApB,CAAhB;EAEA,aAAO0D,eAAA,CAAmB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA1B,EAA4C,IAA5C,EAAkD,QAAlD,EAA4D,OAA5D,CAAP;EACD;EAnHH;EAAA;EAAA,WAoHE,kBACE,oBADF,EAEiD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EAE/C,UAAI,CAAC1E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAE9B,UAAM,QAAQ,GAAG2E,6BAAA,CAAiC3C,kBAAA,CAAsB,oBAAtB,CAAjC,CAAjB;EACA,UAAM,OAAO,GAAGhB,gBAAA,CAAoB,YAApB,CAAhB;EAEA,aAAO0D,eAAA,CAAmB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA1B,EAA4C,IAA5C,EAAkD,QAAlD,EAA4D,OAA5D,CAAP;EACD;EA9HH;EAAA;EAAA,WA+HE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAAC1E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO4E,2BAAA,CAA+B,OAA/B,EAAwC,IAAxC,EAA8C,KAA9C,EAAqD,OAArD,CAAP;EACD;EAlIH;EAAA;EAAA,WAmIE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAAC5E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO4E,2BAAA,CAA+B,OAA/B,EAAwC,IAAxC,EAA8C,KAA9C,EAAqD,OAArD,CAAP;EACD;EAtIH;EAAA;EAAA,WAuIE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAAC5E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,KAAK,GAAG+B,cAAA,CAAkB,UAAlB,CAAd;;EACA,8BAAmB,CAAC,QAAD,EAAW,SAAX,EAAsB,OAAtB,CAAnB,0BAAmD;EAA9C,YAAM,IAAI,WAAV;EACH,YAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,KAAD,EAAQ,IAAR,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACpB;;EACD,aAAO8C,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAzB,EAA2C,OAAO,CAAC,KAAD,EAAQ,QAAR,CAAlD,CAAP;EACD;EAhJH;EAAA;EAAA,WAiJE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAAC7E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,OAAO,GAAGgB,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,YAAY,GAAG8D,oBAAA,CAAwB,OAAxB,CAArB;EACA,aAAOC,oBAAA,CAAwB,IAAxB,EAA8B,YAA9B,CAAP;EACD;EAtJH;EAAA;EAAA,WAuJE,kBAAM;EACJ,UAAI,CAAC/E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO+E,oBAAA,CAAwB,IAAxB,CAAP;EACD;EA1JH;EAAA;EAAA,WA2JE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAAC/E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EAjKH;EAAA;EAAA,WAkKE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,yDAAd,CAAN;EACD;EApKH;EAAA;EAAA,WAqKE,2BAA2E;EAAA,UAA3D,iBAA2D,uEAAT,SAAS;EACzE,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAAnB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EAEA,UAAI,iBAAiB,KAAK,SAA1B,EAAqC,OAAOgF,sBAAA,CAA0B,IAA1B,EAAgC,KAAhC,EAAuC,GAAvC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,QAA9D,CAAP;EAErC,UAAM,YAAY,GAAGC,cAAA,CAAkB,iBAAlB,CAArB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,YAAD,EAAe,cAAf,CAA1B;EAEA,aAAOD,sBAAA,CACL,IADK,EAEL,KAFK,EAGL,GAHK,EAIL,IAJK,EAKL,MALK,EAML,MANK,EAOL,WAPK,EAQL,WARK,EASL,UATK,EAUL,QAVK,CAAP;EAYD;EAlMH;EAAA;EAAA,WAmME,yBAAgB,IAAhB,EAAkD;EAChD,UAAI,CAAChF,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAE9B,UAAI,QAAJ,EAAc,YAAd;;EACA,UAAIwB,QAAA,CAAY,IAAZ,CAAJ,EAAuB;EACrB,YAAM,YAAY,GAAG,IAAI,CAAC,QAA1B;;EACA,YAAI,YAAY,KAAK,SAArB,EAAgC;EAC9B;EACA;EACA;EACA;EACA;EACA,UAAA,QAAQ,GAAGzB,kBAAA,CAAsB,IAAtB,CAAX;EACD,SAPD,MAOO;EACL,UAAA,QAAQ,GAAGA,kBAAA,CAAsB,YAAtB,CAAX;EAEA,UAAA,YAAY,GAAI,IAAkC,CAAC,SAAnD;EACD;EACF,OAdD,MAcO;EACL,QAAA,QAAQ,GAAGA,kBAAA,CAAsB,IAAtB,CAAX;EACD;;EAED,UAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAAnB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EAEA,UAAI,IAAI,GAAG,CAAX;EAAA,UACE,MAAM,GAAG,CADX;EAAA,UAEE,MAAM,GAAG,CAFX;EAAA,UAGE,WAAW,GAAG,CAHhB;EAAA,UAIE,WAAW,GAAG,CAJhB;EAAA,UAKE,UAAU,GAAG,CALf;;EAMA,UAAI,YAAY,KAAK,SAArB,EAAgC;EAC9B,QAAA,YAAY,GAAGkF,cAAA,CAAkB,YAAlB,CAAf;EACA,QAAA,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAAd;EACA,QAAA,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAhB;EACA,QAAA,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAhB;EACA,QAAA,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAArB;EACA,QAAA,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAArB;EACA,QAAA,UAAU,GAAG,OAAO,CAAC,YAAD,EAAe,cAAf,CAApB;EACD;;EAED,UAAM,EAAE,GAAGD,sBAAA,CACT,IADS,EAET,KAFS,EAGT,GAHS,EAIT,IAJS,EAKT,MALS,EAMT,MANS,EAOT,WAPS,EAQT,WARS,EAST,UATS,EAUT,QAVS,CAAX;EAYA,UAAM,OAAO,GAAGzE,4BAAA,CAAgC,QAAhC,EAA0C,EAA1C,EAA8C,YAA9C,CAAhB;EACA,aAAOmB,2BAAA,CAA+B,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAtC,EAAmE,QAAnE,EAA6E,QAA7E,CAAP;EACD;EA5PH;EAAA;EAAA,WA6PE,4BAAgB;EACd,UAAI,CAAC1B,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGuE,cAAA,CAAkB,QAAlB,EAA4B,CAAC,WAAD,EAAc,MAAd,CAA5B,CAAnB;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAf;EACA,aAAO+C,2BAAA,CAA+B,QAA/B,EAAyC,MAAzC,CAAP;EACD;EAnQH;EAAA;EAAA,WAoQE,2BAAe;EACb,UAAI,CAAClF,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGuE,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,EAAQ,WAAR,CAA5B,CAAnB;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAf;EACA,aAAOgD,0BAAA,CAA8B,QAA9B,EAAwC,MAAxC,CAAP;EACD;EA1QH;EAAA;EAAA,WA2QE,wBAAY;EACV,UAAI,CAACnF,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO;EACL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CADZ;EAEL,QAAA,MAAM,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP,CAFV;EAGL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,SAAP,CAHZ;EAIL,QAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP;EAJX,OAAP;EAMD;EAnRH;EAAA;EAAA,WAoRE,cAAY,IAAZ,EAAgF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC9E,UAAM,OAAO,GAAGgB,gBAAA,CAAoB,YAApB,CAAhB;;EACA,UAAIhB,cAAA,CAAkB,IAAlB,CAAJ,EAA6B;EAC3B,QAAAiC,kBAAA,CAAsB,OAAtB,EAD2B;;EAE3B,eAAOI,kBAAA,CACL,OAAO,CAAC,IAAD,EAAO,QAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,SAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,OAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,QAAP,CAJF,CAAP;EAMD;;EACD,aAAON,cAAA,CAAkB,IAAlB,EAAwB,OAAxB,CAAP;EACD;EAhSH;EAAA;EAAA,WAiSE,iBAAe,QAAf,EAA+C,QAA/C,EAA6E;EAC3E,UAAM,GAAG,GAAGA,cAAA,CAAkB,QAAlB,CAAZ;EACA,UAAM,GAAG,GAAGA,cAAA,CAAkB,QAAlB,CAAZ;EACA,aAAOsB,cAAA,CACL,OAAO,CAAC,GAAD,EAAM,QAAN,CADF,EAEL,OAAO,CAAC,GAAD,EAAM,SAAN,CAFF,EAGL,OAAO,CAAC,GAAD,EAAM,OAAN,CAHF,EAIL,OAAO,CAAC,GAAD,EAAM,QAAN,CAJF,EAKL,OAAO,CAAC,GAAD,EAAM,SAAN,CALF,EAML,OAAO,CAAC,GAAD,EAAM,OAAN,CANF,CAAP;EAQD;EA5SH;;EAAA;EAAA;EAgTA,kBAAkB,CAAC,SAAD,EAAY,oBAAZ,CAAlB;;MC/Sa,aAAb;EACE,yBACE,YADF,EAEE,aAFF,EAGE,WAHF,EAUmE;EAAA,QANjE,SAMiE,uEAN3B,CAM2B;EAAA,QALjE,WAKiE,uEALzB,CAKyB;EAAA,QAJjE,WAIiE,uEAJzB,CAIyB;EAAA,QAHjE,gBAGiE,uEAHpB,CAGoB;EAAA,QAFjE,gBAEiE,uEAFpB,CAEoB;EAAA,QADjE,eACiE,uEADrB,CACqB;EAAA,QAAjE,aAAiE,uEAAvB1B,kBAAA,EAAuB;;EAAA;;EAEjE,QAAM,OAAO,GAAG2B,wBAAA,CAA4B,YAA5B,CAAhB;EACA,QAAM,QAAQ,GAAGA,wBAAA,CAA4B,aAA5B,CAAjB;EACA,QAAM,MAAM,GAAGA,wBAAA,CAA4B,WAA5B,CAAf;EACA,QAAM,IAAI,GAAGA,wBAAA,CAA4B,SAA5B,CAAb;EACA,QAAM,MAAM,GAAGA,wBAAA,CAA4B,WAA5B,CAAf;EACA,QAAM,MAAM,GAAGA,wBAAA,CAA4B,WAA5B,CAAf;EACA,QAAM,WAAW,GAAGA,wBAAA,CAA4B,gBAA5B,CAApB;EACA,QAAM,WAAW,GAAGA,wBAAA,CAA4B,gBAA5B,CAApB;EACA,QAAM,UAAU,GAAGA,wBAAA,CAA4B,eAA5B,CAAnB;EACA,QAAM,QAAQ,GAAG7B,kBAAA,CAAsB,aAAtB,CAAjB,CAXiE;EAcjE;EACA;EACA;;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,UAAJ,CAAe,6DAAf,CAAN;EACD;;EAED,IAAA2D,2BAAA,CACE,IADF,EAEE,OAFF,EAGE,QAHF,EAIE,MAJF,EAKE,IALF,EAME,MANF,EAOE,MAPF,EAQE,WARF,EASE,WATF,EAUE,UAVF,EAWE,QAXF;EAaD;;EA7CH;EAAA;EAAA,SA8CE,eAAY;EACV,UAAI,CAAClF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EAjDH;EAAA;EAAA,SAkDE,eAAQ;EACN,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOwD,YAAA,CAAgB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAvB,EAAyC,IAAzC,CAAP;EACD;EArDH;EAAA;EAAA,SAsDE,eAAS;EACP,UAAI,CAACxD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOyD,aAAA,CAAiB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB,EAA0C,IAA1C,CAAP;EACD;EAzDH;EAAA;EAAA,SA0DE,eAAa;EACX,UAAI,CAACzD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO0D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EA7DH;EAAA;EAAA,SA8DE,eAAO;EACL,UAAI,CAAC1D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO2D,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,IAAxC,CAAP;EACD;EAjEH;EAAA;EAAA,SAkEE,eAAQ;EACN,UAAI,CAAC3D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EArEH;EAAA;EAAA,SAsEE,eAAU;EACR,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,UAAP,CAAd;EACD;EAzEH;EAAA;EAAA,SA0EE,eAAU;EACR,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,UAAP,CAAd;EACD;EA7EH;EAAA;EAAA,SA8EE,eAAe;EACb,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,eAAP,CAAd;EACD;EAjFH;EAAA;EAAA,SAkFE,eAAe;EACb,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,eAAP,CAAd;EACD;EArFH;EAAA;EAAA,SAsFE,eAAc;EACZ,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,cAAP,CAAd;EACD;EAzFH;EAAA;EAAA,SA0FE,eAAO;EACL,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOsD,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,IAAxC,CAAP;EACD;EA7FH;EAAA;EAAA,SA8FE,eAAW;EACT,UAAI,CAACtD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOuD,eAAA,CAAmB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA1B,EAA4C,IAA5C,CAAP;EACD;EAjGH;EAAA;EAAA,SAkGE,eAAa;EACX,UAAI,CAACvD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO4D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EArGH;EAAA;EAAA,SAsGE,eAAa;EACX,UAAI,CAAC5D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO6D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EAzGH;EAAA;EAAA,SA0GE,eAAc;EACZ,UAAI,CAAC7D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO8D,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EA7GH;EAAA;EAAA,SA8GE,eAAc;EACZ,UAAI,CAAC9D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO+D,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EAjHH;EAAA;EAAA,SAkHE,eAAc;EACZ,UAAI,CAAC/D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOiE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EArHH;EAAA;EAAA,SAsHE,eAAe;EACb,UAAI,CAACjE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOgE,mBAAA,CAAuB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA9B,EAAgD,IAAhD,CAAP;EACD;EAzHH;EAAA;EAAA,SA0HE,eAAgB;EACd,UAAI,CAAChE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOkE,oBAAA,CAAwB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA/B,EAAiD,IAAjD,CAAP;EACD;EA7HH;EAAA;EAAA,SA8HE,eAAc;EACZ,UAAI,CAAClE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOmE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EAjIH;EAAA;EAAA,WAkIE,eAAK,oBAAL,EAAyF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EACvF,UAAI,CAACnE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EAClC,UAAI,CAACsB,QAAA,CAAY,oBAAZ,CAAL,EAAwC;EACtC,cAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACD;;EACD,MAAA8C,kCAAA,CAAsC,oBAAtC;EAEA,UAAM,OAAO,GAAGtD,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGuD,cAAA,CAAkB,QAAlB,EAA4B,CAC7C,KAD6C,EAE7C,MAF6C,EAG7C,aAH6C,EAI7C,aAJ6C,EAK7C,QAL6C,EAM7C,OAN6C,EAO7C,WAP6C,EAQ7C,YAR6C,EAS7C,QAT6C,EAU7C,MAV6C,CAA5B,CAAnB;EAYA,UAAM,KAAK,GAAGpC,qBAAA,CAAyB,oBAAzB,EAA+C,UAA/C,EAA2D,SAA3D,CAAd;;EACA,UAAI,CAAC,KAAL,EAAY;EACV,cAAM,IAAI,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD,UAAI,MAAM,GAAGA,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAb;EACA,MAAA,MAAM,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,KAAzC,CAAT;EACA,MAAA,MAAM,GAAGrC,qBAAA,CAAyB,MAAzB,EAAiC,UAAjC,EAA6C,EAA7C,CAAT;;EACA,kCACEkD,+BAAA,CAAmC,QAAnC,EAA6C,MAA7C,EAAqD,OAArD,CADF;EAAA,UAAQ,IAAR,yBAAQ,IAAR;EAAA,UAAc,KAAd,yBAAc,KAAd;EAAA,UAAqB,GAArB,yBAAqB,GAArB;EAAA,UAA0B,IAA1B,yBAA0B,IAA1B;EAAA,UAAgC,MAAhC,yBAAgC,MAAhC;EAAA,UAAwC,MAAxC,yBAAwC,MAAxC;EAAA,UAAgD,WAAhD,yBAAgD,WAAhD;EAAA,UAA6D,WAA7D,yBAA6D,WAA7D;EAAA,UAA0E,UAA1E,yBAA0E,UAA1E;;EAGA,aAAOL,sBAAA,CACL,IADK,EAEL,KAFK,EAGL,GAHK,EAIL,IAJK,EAKL,MALK,EAML,MANK,EAOL,WAPK,EAQL,WARK,EASL,UATK,EAUL,QAVK,CAAP;EAYD;EA7KH;EAAA;EAAA,WA8KE,yBAAuE;EAAA,UAAzD,iBAAyD,uEAAT,SAAS;EACrE,UAAI,CAAC9E,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAAnB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EAEA,UAAI,iBAAiB,KAAK,SAA1B,EAAqC,OAAO8E,sBAAA,CAA0B,IAA1B,EAAgC,KAAhC,EAAuC,GAAvC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,QAA9D,CAAP;EAErC,UAAM,YAAY,GAAGC,cAAA,CAAkB,iBAAlB,CAArB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,YAAD,EAAe,cAAf,CAA1B;EAEA,aAAOD,sBAAA,CACL,IADK,EAEL,KAFK,EAGL,GAHK,EAIL,IAJK,EAKL,MALK,EAML,MANK,EAOL,WAPK,EAQL,WARK,EASL,UATK,EAUL,QAVK,CAAP;EAYD;EA3MH;EAAA;EAAA,WA4ME,uBAAc,iBAAd,EAA2D;EACzD,UAAI,CAAC9E,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAElC,UAAM,YAAY,GAAG6B,cAAA,CAAkB,iBAAlB,CAArB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,YAAD,EAAe,SAAf,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,YAAD,EAAe,OAAf,CAAnB;EACA,UAAI,QAAQ,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAAtB;EAEA,UAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,IAAD,EAAO,cAAP,CAA1B;EAEA,MAAA,QAAQ,GAAGuD,oBAAA,CAAwB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA/B,EAAiD,QAAjD,CAAX;EACA,aAAON,sBAAA,CACL,IADK,EAEL,KAFK,EAGL,GAHK,EAIL,IAJK,EAKL,MALK,EAML,MANK,EAOL,WAPK,EAQL,WARK,EASL,UATK,EAUL,QAVK,CAAP;EAYD;EAzOH;EAAA;EAAA,WA0OE,sBAAa,aAAb,EAAqD;EACnD,UAAI,CAAC9E,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,QAAQ,GAAGuB,kBAAA,CAAsB,aAAtB,CAAjB;EACA,aAAO,IAAI,aAAJ,CACL,OAAO,CAAC,IAAD,EAAO,QAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,SAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,OAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,QAAP,CAJF,EAKL,OAAO,CAAC,IAAD,EAAO,UAAP,CALF,EAML,OAAO,CAAC,IAAD,EAAO,UAAP,CANF,EAOL,OAAO,CAAC,IAAD,EAAO,eAAP,CAPF,EAQL,OAAO,CAAC,IAAD,EAAO,eAAP,CARF,EASL,OAAO,CAAC,IAAD,EAAO,cAAP,CATF,EAUL,QAVK,CAAP;EAYD;EAzPH;EAAA;EAAA,WA0PE,aAAI,oBAAJ,EAAiF;EAAA,UAArC,OAAqC,uEAAT,SAAS;EAC/E,UAAI,CAACvB,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOqF,gDAAA,CAAoD,KAApD,EAA2D,IAA3D,EAAiE,oBAAjE,EAAuF,OAAvF,CAAP;EACD;EA7PH;EAAA;EAAA,WA8PE,kBACE,oBADF,EAE4C;EAAA,UAA1C,OAA0C,uEAAT,SAAS;EAE1C,UAAI,CAACrF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOqF,gDAAA,CAAoD,UAApD,EAAgE,IAAhE,EAAsE,oBAAtE,EAA4F,OAA5F,CAAP;EACD;EApQH;EAAA;EAAA,WAqQE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAACrF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOsF,+BAAA,CAAmC,OAAnC,EAA4C,IAA5C,EAAkD,KAAlD,EAAyD,OAAzD,CAAP;EACD;EAxQH;EAAA;EAAA,WAyQE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAACtF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOsF,+BAAA,CAAmC,OAAnC,EAA4C,IAA5C,EAAkD,KAAlD,EAAyD,OAAzD,CAAP;EACD;EA5QH;EAAA;EAAA,WA6QE,eAAM,YAAN,EAAsC;EACpC,UAAI,CAACtF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,YAAY,KAAK,SAArB,EAAgC,MAAM,IAAI,SAAJ,CAAc,+BAAd,CAAN;EAChC,UAAM,OAAO,GACX,OAAO,YAAP,KAAwB,QAAxB,GACKa,mBAAA,CAAuB,cAAvB,EAAuC,YAAvC,CADL,GAEIC,gBAAA,CAAoB,YAApB,CAHN;EAIA,UAAM,YAAY,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,cAA5B,EAA4C,MAA5C,EAAoDC,QAApD,EAAiE,CAAC,KAAD,CAAjE,CAArB;EACA,UAAM,YAAY,GAAGC,sBAAA,CAA0B,OAA1B,EAAmC,YAAnC,CAArB;EACA,UAAM,iBAAiB,GAAG;EACxB,QAAA,GAAG,EAAE,CADmB;EAExB,QAAA,IAAI,EAAE,EAFkB;EAGxB,QAAA,MAAM,EAAE,EAHgB;EAIxB,QAAA,MAAM,EAAE,EAJgB;EAKxB,QAAA,WAAW,EAAE,IALW;EAMxB,QAAA,WAAW,EAAE,IANW;EAOxB,QAAA,UAAU,EAAE;EAPY,OAA1B;EASA,UAAM,iBAAiB,GAAGC,2BAAA,CAA+B,OAA/B,EAAwC,iBAAiB,CAAC,YAAD,CAAzD,EAAyE,KAAzE,CAA1B;EAEA,UAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlB;EACA,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAnB;EACA,UAAI,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAAjB;EACA,UAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAApB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAApB;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAAzB;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAAzB;EACA,UAAI,UAAU,GAAG,OAAO,CAAC,IAAD,EAAO,cAAP,CAAxB;;EA5BoC,iCA6BgDqE,gBAAA,CAClF,IADkF,EAElF,KAFkF,EAGlF,GAHkF,EAIlF,IAJkF,EAKlF,MALkF,EAMlF,MANkF,EAOlF,WAPkF,EAQlF,WARkF,EASlF,UATkF,EAUlF,iBAVkF,EAWlF,YAXkF,EAYlF,YAZkF,CA7BhD;;EA6BjC,MAAA,IA7BiC,wBA6BjC,IA7BiC;EA6B3B,MAAA,KA7B2B,wBA6B3B,KA7B2B;EA6BpB,MAAA,GA7BoB,wBA6BpB,GA7BoB;EA6Bf,MAAA,IA7Be,wBA6Bf,IA7Be;EA6BT,MAAA,MA7BS,wBA6BT,MA7BS;EA6BD,MAAA,MA7BC,wBA6BD,MA7BC;EA6BO,MAAA,WA7BP,wBA6BO,WA7BP;EA6BoB,MAAA,WA7BpB,wBA6BoB,WA7BpB;EA6BiC,MAAA,UA7BjC,wBA6BiC,UA7BjC;EA4CpC,aAAOT,sBAAA,CACL,IADK,EAEL,KAFK,EAGL,GAHK,EAIL,IAJK,EAKL,MALK,EAML,MANK,EAOL,WAPK,EAQL,WARK,EASL,UATK,EAUL,OAAO,CAAC,IAAD,EAAO,QAAP,CAVF,CAAP;EAYD;EArUH;EAAA;EAAA,WAsUE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAAC9E,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,KAAK,GAAGwF,kBAAA,CAAsB,UAAtB,CAAd;;EACA,8BAAmB,CACjB,QADiB,EAEjB,SAFiB,EAGjB,OAHiB,EAIjB,QAJiB,EAKjB,UALiB,EAMjB,UANiB,EAOjB,eAPiB,EAQjB,eARiB,EASjB,cATiB,CAAnB,0BAUG;EAVE,YAAM,IAAI,WAAV;EAWH,YAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,KAAD,EAAQ,IAAR,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACpB;;EACD,aAAOb,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAzB,EAA2C,OAAO,CAAC,KAAD,EAAQ,QAAR,CAAlD,CAAP;EACD;EAzVH;EAAA;EAAA,WA0VE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAAC3E,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,OAAO,GAAGc,gBAAA,CAAoB,YAApB,CAAhB;;EACA,kCAAuCO,wBAAA,CAA4B,OAA5B,CAAvC;EAAA,UAAQ,SAAR,yBAAQ,SAAR;EAAA,UAAmB,IAAnB,yBAAmB,IAAnB;EAAA,UAAyB,SAAzB,yBAAyB,SAAzB;;EACA,UAAM,YAAY,GAAGuD,oBAAA,CAAwB,OAAxB,CAArB;EACA,UAAM,YAAY,GAAG3D,sBAAA,CAA0B,OAA1B,EAAmC,OAAnC,CAArB;EACA,aAAOwE,wBAAA,CAA4B,IAA5B,EAAkC,SAAlC,EAA6C,YAA7C,EAA2D;EAAE,QAAA,IAAI,EAAJ,IAAF;EAAQ,QAAA,SAAS,EAAT,SAAR;EAAmB,QAAA,YAAY,EAAZ;EAAnB,OAA3D,CAAP;EACD;EAjWH;EAAA;EAAA,WAkWE,kBAAM;EACJ,UAAI,CAACzF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOyF,wBAAA,CAA4B,IAA5B,EAAkC,MAAlC,CAAP;EACD;EArWH;EAAA;EAAA,WAsWE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACzF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EA5WH;EAAA;EAAA,WA6WE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,6DAAd,CAAN;EACD;EA/WH;EAAA;EAAA,WAiXE,yBACE,oBADF,EAEwD;EAAA,UAAtD,YAAsD,uEAAT,SAAS;EAEtD,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,QAAQ,GAAGH,kBAAA,CAAsB,oBAAtB,CAAjB;EACA,UAAM,OAAO,GAAGiB,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,cAAc,GAAG4E,wBAAA,CAA4B,OAA5B,CAAvB;EACA,UAAM,OAAO,GAAGrF,4BAAA,CAAgC,QAAhC,EAA0C,IAA1C,EAAgD,cAAhD,CAAhB;EACA,aAAOmB,2BAAA,CAA+B,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAtC,EAAmE,QAAnE,EAA6E,OAAO,CAAC,IAAD,EAAO,QAAP,CAApF,CAAP;EACD;EA3XH;EAAA;EAAA,WA4XE,uBAAW;EACT,UAAI,CAACxB,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO2F,sBAAA,CAA0B,IAA1B,CAAP;EACD;EA/XH;EAAA;EAAA,WAgYE,4BAAgB;EACd,UAAI,CAAC3F,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGqE,cAAA,CAAkB,QAAlB,EAA4B,CAAC,WAAD,EAAc,MAAd,CAA5B,CAAnB;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAf;EACA,aAAO+C,2BAAA,CAA+B,QAA/B,EAAyC,MAAzC,CAAP;EACD;EAtYH;EAAA;EAAA,WAuYE,2BAAe;EACb,UAAI,CAAChF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGqE,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,EAAQ,WAAR,CAA5B,CAAnB;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAf;EACA,aAAOgD,0BAAA,CAA8B,QAA9B,EAAwC,MAAxC,CAAP;EACD;EA7YH;EAAA;EAAA,WA8YE,uBAAW;EACT,UAAI,CAACjF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO4F,sBAAA,CAA0B,IAA1B,CAAP;EACD;EAjZH;EAAA;EAAA,WAkZE,wBAAY;EACV,UAAI,CAAC5F,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO;EACL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CADZ;EAEL,QAAA,MAAM,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP,CAFV;EAGL,QAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CAHX;EAIL,QAAA,cAAc,EAAE,OAAO,CAAC,IAAD,EAAO,eAAP,CAJlB;EAKL,QAAA,cAAc,EAAE,OAAO,CAAC,IAAD,EAAO,eAAP,CALlB;EAML,QAAA,SAAS,EAAE,OAAO,CAAC,IAAD,EAAO,UAAP,CANb;EAOL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,SAAP,CAPZ;EAQL,QAAA,aAAa,EAAE,OAAO,CAAC,IAAD,EAAO,cAAP,CARjB;EASL,QAAA,SAAS,EAAE,OAAO,CAAC,IAAD,EAAO,UAAP,CATb;EAUL,QAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP;EAVX,OAAP;EAYD;EAhaH;EAAA;EAAA,WAkaE,cAAY,IAAZ,EAAgF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC9E,UAAM,OAAO,GAAGc,gBAAA,CAAoB,YAApB,CAAhB;;EACA,UAAId,kBAAA,CAAsB,IAAtB,CAAJ,EAAiC;EAC/B,QAAA+B,kBAAA,CAAsB,OAAtB,EAD+B;;EAE/B,eAAO+C,sBAAA,CACL,OAAO,CAAC,IAAD,EAAO,QAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,SAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,OAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,QAAP,CAJF,EAKL,OAAO,CAAC,IAAD,EAAO,UAAP,CALF,EAML,OAAO,CAAC,IAAD,EAAO,UAAP,CANF,EAOL,OAAO,CAAC,IAAD,EAAO,eAAP,CAPF,EAQL,OAAO,CAAC,IAAD,EAAO,eAAP,CARF,EASL,OAAO,CAAC,IAAD,EAAO,cAAP,CATF,EAUL,OAAO,CAAC,IAAD,EAAO,QAAP,CAVF,CAAP;EAYD;;EACD,aAAOU,kBAAA,CAAsB,IAAtB,EAA4B,OAA5B,CAAP;EACD;EApbH;EAAA;EAAA,WAqbE,iBAAe,QAAf,EAA+C,QAA/C,EAA6E;EAC3E,UAAM,GAAG,GAAGA,kBAAA,CAAsB,QAAtB,CAAZ;EACA,UAAM,GAAG,GAAGA,kBAAA,CAAsB,QAAtB,CAAZ;;EACA,gCAAmB,CACjB,QADiB,EAEjB,SAFiB,EAGjB,OAHiB,EAIjB,QAJiB,EAKjB,UALiB,EAMjB,UANiB,EAOjB,eAPiB,EAQjB,eARiB,EASjB,cATiB,CAAnB,6BAUY;EAVP,YAAM,IAAI,aAAV;EAWH,YAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,IAAN,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,IAAN,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAOtC,gBAAA,CAAoB,IAAI,GAAG,IAA3B,CAAP;EACpB;;EACD,aAAO,CAAP;EACD;EAxcH;;EAAA;EAAA;EA4cA,kBAAkB,CAAC,aAAD,EAAgB,wBAAhB,CAAlB;;MC3ca,QAAb;EACE,sBAUgD;EAAA,QAT9C,UAS8C,uEATP,CASO;EAAA,QAR9C,WAQ8C,uEARN,CAQM;EAAA,QAP9C,UAO8C,uEAPP,CAOO;EAAA,QAN9C,SAM8C,uEANR,CAMQ;EAAA,QAL9C,UAK8C,uEALP,CAKO;EAAA,QAJ9C,YAI8C,uEAJL,CAIK;EAAA,QAH9C,YAG8C,uEAHL,CAGK;EAAA,QAF9C,iBAE8C,uEAFA,CAEA;EAAA,QAD9C,iBAC8C,uEADA,CACA;EAAA,QAA9C,gBAA8C,uEAAD,CAAC;;EAAA;;EAE9C,QAAM,KAAK,GAAG2C,wBAAA,CAA4B,UAA5B,CAAd;EACA,QAAM,MAAM,GAAGA,wBAAA,CAA4B,WAA5B,CAAf;EACA,QAAM,KAAK,GAAGA,wBAAA,CAA4B,UAA5B,CAAd;EACA,QAAM,IAAI,GAAGA,wBAAA,CAA4B,SAA5B,CAAb;EACA,QAAM,KAAK,GAAGA,wBAAA,CAA4B,UAA5B,CAAd;EACA,QAAM,OAAO,GAAGA,wBAAA,CAA4B,YAA5B,CAAhB;EACA,QAAM,OAAO,GAAGA,wBAAA,CAA4B,YAA5B,CAAhB;EACA,QAAM,YAAY,GAAGA,wBAAA,CAA4B,iBAA5B,CAArB;EACA,QAAM,YAAY,GAAGA,wBAAA,CAA4B,iBAA5B,CAArB;EACA,QAAM,WAAW,GAAGA,wBAAA,CAA4B,gBAA5B,CAApB;EAEA,IAAAC,cAAA,CAAkB,KAAlB,EAAyB,MAAzB,EAAiC,KAAjC,EAAwC,IAAxC,EAA8C,KAA9C,EAAqD,OAArD,EAA8D,OAA9D,EAAuE,YAAvE,EAAqF,YAArF,EAAmG,WAAnG;EAEA,IAAA,WAAW,CAAC,IAAD,CAAX;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,KAAP,EAAc,KAAd,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,KAAP,EAAc,KAAd,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,KAAP,EAAc,KAAd,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,OAAP,EAAgB,OAAhB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,OAAP,EAAgB,OAAhB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,YAAP,EAAqB,YAArB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,YAAP,EAAqB,YAArB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,WAAP,EAAoB,WAApB,CAAP;;EAEA,IAAW;EACT,MAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpC,QAAA,KAAK,YAAK,KAAK,MAAM,CAAC,WAAZ,CAAL,eAAkCC,wBAAA,CAA4B,IAA5B,CAAlC,MAD+B;EAEpC,QAAA,QAAQ,EAAE,KAF0B;EAGpC,QAAA,UAAU,EAAE,KAHwB;EAIpC,QAAA,YAAY,EAAE;EAJsB,OAAtC;EAMD;EACF;;EA9CH;EAAA;EAAA,SA+CE,eAAS;EACP,UAAI,CAACC,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,KAAP,CAAd;EACD;EAlDH;EAAA;EAAA,SAmDE,eAAU;EACR,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,MAAP,CAAd;EACD;EAtDH;EAAA;EAAA,SAuDE,eAAS;EACP,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,KAAP,CAAd;EACD;EA1DH;EAAA;EAAA,SA2DE,eAAQ;EACN,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,IAAP,CAAd;EACD;EA9DH;EAAA;EAAA,SA+DE,eAAS;EACP,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,KAAP,CAAd;EACD;EAlEH;EAAA;EAAA,SAmEE,eAAW;EACT,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,OAAP,CAAd;EACD;EAtEH;EAAA;EAAA,SAuEE,eAAW;EACT,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,OAAP,CAAd;EACD;EA1EH;EAAA;EAAA,SA2EE,eAAgB;EACd,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,YAAP,CAAd;EACD;EA9EH;EAAA;EAAA,SA+EE,eAAgB;EACd,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,YAAP,CAAd;EACD;EAlFH;EAAA;EAAA,SAmFE,eAAe;EACb,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,WAAP,CAAd;EACD;EAtFH;EAAA;EAAA,SAuFE,eAAQ;EACN,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOC,YAAA,CACL,OAAO,CAAC,IAAD,EAAO,KAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,MAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,KAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,IAAP,CAJF,EAKL,OAAO,CAAC,IAAD,EAAO,KAAP,CALF,EAML,OAAO,CAAC,IAAD,EAAO,OAAP,CANF,EAOL,OAAO,CAAC,IAAD,EAAO,OAAP,CAPF,EAQL,OAAO,CAAC,IAAD,EAAO,YAAP,CARF,EASL,OAAO,CAAC,IAAD,EAAO,YAAP,CATF,EAUL,OAAO,CAAC,IAAD,EAAO,WAAP,CAVF,CAAP;EAYD;EArGH;EAAA;EAAA,SAsGE,eAAS;EACP,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aACEC,YAAA,CACE,OAAO,CAAC,IAAD,EAAO,KAAP,CADT,EAEE,OAAO,CAAC,IAAD,EAAO,MAAP,CAFT,EAGE,OAAO,CAAC,IAAD,EAAO,KAAP,CAHT,EAIE,OAAO,CAAC,IAAD,EAAO,IAAP,CAJT,EAKE,OAAO,CAAC,IAAD,EAAO,KAAP,CALT,EAME,OAAO,CAAC,IAAD,EAAO,OAAP,CANT,EAOE,OAAO,CAAC,IAAD,EAAO,OAAP,CAPT,EAQE,OAAO,CAAC,IAAD,EAAO,YAAP,CART,EASE,OAAO,CAAC,IAAD,EAAO,YAAP,CATT,EAUE,OAAO,CAAC,IAAD,EAAO,WAAP,CAVT,MAWM,CAZR;EAcD;EAtHH;EAAA;EAAA,WAuHE,eAAK,YAAL,EAAoC;EAClC,UAAI,CAACD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,KAAK,GAAG/D,qBAAA,CACZ,YADY;EAGZ,OACE,MADF,EAEE,OAFF,EAGE,cAHF,EAIE,cAJF,EAKE,SALF,EAME,QANF,EAOE,aAPF,EAQE,SARF,EASE,OATF,EAUE,OAVF,CAHY,EAeZ,SAfY,CAAd;;EAiBA,UAAI,CAAC,KAAL,EAAY;EACV,cAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,yBAWI,KAXJ,CACE,KADF;EAAA,UACE,KADF,6BACU,OAAO,CAAC,IAAD,EAAO,KAAP,CADjB;EAAA,0BAWI,KAXJ,CAEE,MAFF;EAAA,UAEE,MAFF,8BAEW,OAAO,CAAC,IAAD,EAAO,MAAP,CAFlB;EAAA,yBAWI,KAXJ,CAGE,KAHF;EAAA,UAGE,KAHF,6BAGU,OAAO,CAAC,IAAD,EAAO,KAAP,CAHjB;EAAA,wBAWI,KAXJ,CAIE,IAJF;EAAA,UAIE,IAJF,4BAIS,OAAO,CAAC,IAAD,EAAO,IAAP,CAJhB;EAAA,yBAWI,KAXJ,CAKE,KALF;EAAA,UAKE,KALF,6BAKU,OAAO,CAAC,IAAD,EAAO,KAAP,CALjB;EAAA,2BAWI,KAXJ,CAME,OANF;EAAA,UAME,OANF,+BAMY,OAAO,CAAC,IAAD,EAAO,OAAP,CANnB;EAAA,2BAWI,KAXJ,CAOE,OAPF;EAAA,UAOE,OAPF,+BAOY,OAAO,CAAC,IAAD,EAAO,OAAP,CAPnB;EAAA,gCAWI,KAXJ,CAQE,YARF;EAAA,UAQE,YARF,oCAQiB,OAAO,CAAC,IAAD,EAAO,YAAP,CARxB;EAAA,gCAWI,KAXJ,CASE,YATF;EAAA,UASE,YATF,oCASiB,OAAO,CAAC,IAAD,EAAO,YAAP,CATxB;EAAA,+BAWI,KAXJ,CAUE,WAVF;EAAA,UAUE,WAVF,mCAUgB,OAAO,CAAC,IAAD,EAAO,WAAP,CAVvB;EAYA,aAAO,IAAI,QAAJ,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAA5B,EAAmC,IAAnC,EAAyC,KAAzC,EAAgD,OAAhD,EAAyD,OAAzD,EAAkE,YAAlE,EAAgF,YAAhF,EAA8F,WAA9F,CAAP;EACD;EA1JH;EAAA;EAAA,WA2JE,mBAAO;EACL,UAAI,CAAC+D,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOvB,6BAAA,CAAiC,IAAjC,CAAP;EACD;EA9JH;EAAA;EAAA,WA+JE,eAAG;EACD,UAAI,CAACuB,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,IAAI,QAAJ,CACL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,KAAP,CAAhB,CADK,EAEL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,MAAP,CAAhB,CAFK,EAGL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,KAAP,CAAhB,CAHK,EAIL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,IAAP,CAAhB,CAJK,EAKL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,KAAP,CAAhB,CALK,EAML,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,OAAP,CAAhB,CANK,EAOL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,OAAP,CAAhB,CAPK,EAQL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,YAAP,CAAhB,CARK,EASL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,YAAP,CAAhB,CATK,EAUL,IAAI,CAAC,GAAL,CAAS,OAAO,CAAC,IAAD,EAAO,WAAP,CAAhB,CAVK,CAAP;EAYD;EA7KH;EAAA;EAAA,WA8KE,aAAI,KAAJ,EAAkE;EAAA,UAArC,OAAqC,uEAAT,SAAS;EAChE,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOE,2CAAA,CAA+C,KAA/C,EAAsD,IAAtD,EAA4D,KAA5D,EAAmE,OAAnE,CAAP;EACD;EAjLH;EAAA;EAAA,WAkLE,kBAAS,KAAT,EAAiF;EAAA,UAA1C,OAA0C,uEAAT,SAAS;EAC/E,UAAI,CAACF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOE,2CAAA,CAA+C,UAA/C,EAA2D,IAA3D,EAAiE,KAAjE,EAAwE,OAAxE,CAAP;EACD;EArLH;EAAA;EAAA,WAsLE,eAAM,YAAN,EAAsC;EACpC,UAAI,CAACF,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,YAAY,KAAK,SAArB,EAAgC,MAAM,IAAI,SAAJ,CAAc,+BAAd,CAAN;EAChC,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,KAAP,CAAnB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,MAAP,CAApB;EACA,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,KAAP,CAAnB;EACA,UAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAAlB;EACA,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,KAAP,CAAnB;EACA,UAAI,OAAO,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAArB;EACA,UAAI,OAAO,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAArB;EACA,UAAI,YAAY,GAAG,OAAO,CAAC,IAAD,EAAO,YAAP,CAA1B;EACA,UAAI,YAAY,GAAG,OAAO,CAAC,IAAD,EAAO,YAAP,CAA1B;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,WAAP,CAAzB;EAEA,UAAI,kBAAkB,GAAGG,0BAAA,CACvB,KADuB,EAEvB,MAFuB,EAGvB,KAHuB,EAIvB,IAJuB,EAKvB,KALuB,EAMvB,OANuB,EAOvB,OAPuB,EAQvB,YARuB,EASvB,YATuB,EAUvB,WAVuB,CAAzB;EAYA,UAAM,OAAO,GACX,OAAO,YAAP,KAAwB,QAAxB,GACKtF,mBAAA,CAAuB,cAAvB,EAAuC,YAAvC,CADL,GAEIC,gBAAA,CAAoB,YAApB,CAHN;EAIA,UAAI,YAAY,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,cAA5B,EAA4C,UAA5C,EAAwD,SAAxD,CAAnB;EACA,UAAI,mBAAmB,GAAG,IAA1B;;EACA,UAAI,CAAC,YAAL,EAAmB;EACjB,QAAA,mBAAmB,GAAG,KAAtB;EACA,QAAA,YAAY,GAAG,YAAf;EACD;;EACD,MAAA,kBAAkB,GAAGqF,wBAAA,CAA4B,kBAA5B,EAAgD,YAAhD,CAArB;EACA,UAAI,WAAW,GAAGrF,eAAA,CAAmB,OAAnB,EAA4B,aAA5B,EAA2C,UAA3C,EAAuD,SAAvD,EAAkE,CAAC,MAAD,CAAlE,CAAlB;EACA,UAAI,kBAAkB,GAAG,IAAzB;;EACA,UAAI,CAAC,WAAL,EAAkB;EAChB,QAAA,kBAAkB,GAAG,KAArB;EACA,QAAA,WAAW,GAAG,kBAAd;EACD;;EACD,UAAI,WAAW,KAAK,MAApB,EAA4B,WAAW,GAAG,kBAAd;;EAC5B,UAAI,CAAC,mBAAD,IAAwB,CAAC,kBAA7B,EAAiD;EAC/C,cAAM,IAAI,UAAJ,CAAe,yDAAf,CAAN;EACD;;EACD,UAAIqF,wBAAA,CAA4B,WAA5B,EAAyC,YAAzC,MAA2D,WAA/D,EAA4E;EAC1E,cAAM,IAAI,UAAJ,uBAA8B,WAA9B,kDAAiF,YAAjF,EAAN;EACD;;EACD,UAAM,YAAY,GAAGnF,sBAAA,CAA0B,OAA1B,EAAmC,YAAnC,CAArB;EACA,UAAM,iBAAiB,GAAGoF,mCAAA,CAAuC,OAAvC,EAAgD,YAAhD,CAA1B;EACA,UAAI,UAAU,GAAGC,wBAAA,CAA4B,OAA5B,CAAjB;;EApDoC,kCAsDFC,yBAAA,CAChC,KADgC,EAEhC,MAFgC,EAGhC,KAHgC,EAIhC,IAJgC,EAKhC,WALgC,EAMhC,UANgC,CAtDE;;EAsDjC,MAAA,KAtDiC,yBAsDjC,KAtDiC;EAsD1B,MAAA,MAtD0B,yBAsD1B,MAtD0B;EAsDlB,MAAA,KAtDkB,yBAsDlB,KAtDkB;EAsDX,MAAA,IAtDW,yBAsDX,IAtDW;;EAAA,8BA+DlCC,aAAA,CACE,KADF,EAEE,MAFF,EAGE,KAHF,EAIE,IAJF,EAKE,KALF,EAME,OANF,EAOE,OAPF,EAQE,YARF,EASE,YATF,EAUE,WAVF,EAWE,iBAXF,EAYE,YAZF,EAaE,YAbF,EAcE,UAdF,CA/DkC;;EA8DjC,MAAA,KA9DiC,qBA8DjC,KA9DiC;EA8D1B,MAAA,MA9D0B,qBA8D1B,MA9D0B;EA8DlB,MAAA,KA9DkB,qBA8DlB,KA9DkB;EA8DX,MAAA,IA9DW,qBA8DX,IA9DW;EA8DL,MAAA,KA9DK,qBA8DL,KA9DK;EA8DE,MAAA,OA9DF,qBA8DE,OA9DF;EA8DW,MAAA,OA9DX,qBA8DW,OA9DX;EA8DoB,MAAA,YA9DpB,qBA8DoB,YA9DpB;EA8DkC,MAAA,YA9DlC,qBA8DkC,YA9DlC;EA8DgD,MAAA,WA9DhD,qBA8DgD,WA9DhD;;EAAA,kCAgFlCC,yBAAA,CACE,KADF,EAEE,MAFF,EAGE,KAHF,EAIE,IAJF,EAKE,KALF,EAME,OANF,EAOE,OAPF,EAQE,YARF,EASE,YATF,EAUE,WAVF,EAWE,iBAXF,EAYE,YAZF,EAaE,YAbF,EAcE,UAdF,CAhFkC;;EA+EjC,MAAA,KA/EiC,yBA+EjC,KA/EiC;EA+E1B,MAAA,MA/E0B,yBA+E1B,MA/E0B;EA+ElB,MAAA,KA/EkB,yBA+ElB,KA/EkB;EA+EX,MAAA,IA/EW,yBA+EX,IA/EW;EA+EL,MAAA,KA/EK,yBA+EL,KA/EK;EA+EE,MAAA,OA/EF,yBA+EE,OA/EF;EA+EW,MAAA,OA/EX,yBA+EW,OA/EX;EA+EoB,MAAA,YA/EpB,yBA+EoB,YA/EpB;EA+EkC,MAAA,YA/ElC,yBA+EkC,YA/ElC;EA+EgD,MAAA,WA/EhD,yBA+EgD,WA/EhD;;EAAA,kCAgGFC,uBAAA,CAA2B,KAA3B,EAAkC,MAAlC,EAA0C,KAA1C,EAAiD,IAAjD,EAAuD,WAAvD,EAAoE,UAApE,CAhGE;;EAgGjC,MAAA,KAhGiC,yBAgGjC,KAhGiC;EAgG1B,MAAA,MAhG0B,yBAgG1B,MAhG0B;EAgGlB,MAAA,KAhGkB,yBAgGlB,KAhGkB;EAgGX,MAAA,IAhGW,yBAgGX,IAhGW;;EAiGpC,UAAIzG,uBAAA,CAA2B,UAA3B,CAAJ,EAA4C;EAC1C,QAAA,UAAU,GAAG0G,yBAAA,CAA6B,UAA7B,EAAyC,KAAzC,EAAgD,MAAhD,EAAwD,KAAxD,EAA+D,CAA/D,CAAb;EACD;;EAnGmC,gCAoG0C3E,eAAA,CAC5E,IAD4E,EAE5E,KAF4E,EAG5E,OAH4E,EAI5E,OAJ4E,EAK5E,YAL4E,EAM5E,YAN4E,EAO5E,WAP4E,EAQ5E,WAR4E,EAS5E,UAT4E,CApG1C;;EAoGjC,MAAA,IApGiC,uBAoGjC,IApGiC;EAoG3B,MAAA,KApG2B,uBAoG3B,KApG2B;EAoGpB,MAAA,OApGoB,uBAoGpB,OApGoB;EAoGX,MAAA,OApGW,uBAoGX,OApGW;EAoGF,MAAA,YApGE,uBAoGF,YApGE;EAoGY,MAAA,YApGZ,uBAoGY,YApGZ;EAoG0B,MAAA,WApG1B,uBAoG0B,WApG1B;EAgHpC,aAAO,IAAI,QAAJ,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAA5B,EAAmC,IAAnC,EAAyC,KAAzC,EAAgD,OAAhD,EAAyD,OAAzD,EAAkE,YAAlE,EAAgF,YAAhF,EAA8F,WAA9F,CAAP;EACD;EAvSH;EAAA;EAAA,WAwSE,eAAM,YAAN,EAAsC;EACpC,UAAI,CAACgE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,KAAP,CAAnB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,MAAP,CAApB;EACA,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,KAAP,CAAnB;EACA,UAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAAlB;EACA,UAAI,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,KAAP,CAAnB;EACA,UAAI,OAAO,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAArB;EACA,UAAI,OAAO,GAAG,OAAO,CAAC,IAAD,EAAO,OAAP,CAArB;EACA,UAAI,YAAY,GAAG,OAAO,CAAC,IAAD,EAAO,YAAP,CAA1B;EACA,UAAI,YAAY,GAAG,OAAO,CAAC,IAAD,EAAO,YAAP,CAA1B;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,WAAP,CAAzB;EAEA,UAAI,YAAY,KAAK,SAArB,EAAgC,MAAM,IAAI,SAAJ,CAAc,8BAAd,CAAN;EAChC,UAAM,OAAO,GACX,OAAO,YAAP,KAAwB,QAAxB,GACKnF,mBAAA,CAAuB,MAAvB,EAA+B,YAA/B,CADL,GAEIC,gBAAA,CAAoB,YAApB,CAHN;EAIA,UAAM,IAAI,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,MAA5B,EAAoC,UAApC,EAAgDC,QAAhD,CAAb;EACA,UAAM,UAAU,GAAGsF,wBAAA,CAA4B,OAA5B,CAAnB,CAnBoC;;EAAA,mCAsBFC,yBAAA,CAA6B,KAA7B,EAAoC,MAApC,EAA4C,KAA5C,EAAmD,IAAnD,EAAyD,IAAzD,EAA+D,UAA/D,CAtBE;;EAsBjC,MAAA,KAtBiC,0BAsBjC,KAtBiC;EAsB1B,MAAA,MAtB0B,0BAsB1B,MAtB0B;EAsBlB,MAAA,KAtBkB,0BAsBlB,KAtBkB;EAsBX,MAAA,IAtBW,0BAsBX,IAtBW;EAuBpC;EACA,UAAI,YAAJ;;EACA,UAAItG,uBAAA,CAA2B,UAA3B,CAAJ,EAA4C;EAC1C,QAAA,YAAY,GAAG0G,yBAAA,CAA6B,UAA7B,EAAyC,KAAzC,EAAgD,MAAhD,EAAwD,KAAxD,EAA+D,CAA/D,CAAf;EACD;;EA3BmC,iCA4B0C3E,eAAA,CAC5E,IAD4E,EAE5E,KAF4E,EAG5E,OAH4E,EAI5E,OAJ4E,EAK5E,YAL4E,EAM5E,YAN4E,EAO5E,WAP4E,EAQ5E,IAR4E,EAS5E,YAT4E,CA5B1C;;EA4BjC,MAAA,IA5BiC,wBA4BjC,IA5BiC;EA4B3B,MAAA,KA5B2B,wBA4B3B,KA5B2B;EA4BpB,MAAA,OA5BoB,wBA4BpB,OA5BoB;EA4BX,MAAA,OA5BW,wBA4BX,OA5BW;EA4BF,MAAA,YA5BE,wBA4BF,YA5BE;EA4BY,MAAA,YA5BZ,wBA4BY,YA5BZ;EA4B0B,MAAA,WA5B1B,wBA4B0B,WA5B1B;;EAuCpC;EACA,+BAAkBwE,aAAA,CAChB,KADgB,EAEhB,MAFgB,EAGhB,KAHgB,EAIhB,IAJgB,EAKhB,KALgB,EAMhB,OANgB,EAOhB,OAPgB,EAQhB,YARgB,EAShB,YATgB,EAUhB,WAVgB,EAWhB,CAXgB,EAYhB,IAZgB,EAahB,OAbgB,EAchB,UAdgB,CAAlB;EAAA,UAAQ,KAAR,sBAAQ,KAAR;;EAgBA,aAAO,KAAP;EACD;EAjWH;EAAA;EAAA,WAkWE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAACR,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,OAAO,GAAGlF,gBAAA,CAAoB,YAApB,CAAhB;;EACA,kCAAuCO,wBAAA,CAA4B,OAA5B,CAAvC;EAAA,UAAQ,SAAR,yBAAQ,SAAR;EAAA,UAAmB,IAAnB,yBAAmB,IAAnB;EAAA,UAAyB,SAAzB,yBAAyB,SAAzB;;EACA,UAAI,SAAS,KAAK,QAAlB,EAA4B,MAAM,IAAI,UAAJ,CAAe,mCAAf,CAAN;EAC5B,UAAM,YAAY,GAAGJ,sBAAA,CAA0B,OAA1B,EAAmC,OAAnC,CAArB;EACA,aAAO8E,wBAAA,CAA4B,IAA5B,EAAkC,SAAlC,EAA6C;EAAE,QAAA,IAAI,EAAJ,IAAF;EAAQ,QAAA,SAAS,EAAT,SAAR;EAAmB,QAAA,YAAY,EAAZ;EAAnB,OAA7C,CAAP;EACD;EAzWH;EAAA;EAAA,WA0WE,kBAAM;EACJ,UAAI,CAACC,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOD,wBAAA,CAA4B,IAA5B,CAAP;EACD;EA7WH;EAAA;EAAA,WA8WE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACC,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EAClC,UAAI,OAAO,IAAP,KAAgB,WAAhB,IAA+B,OAAQ,IAAY,CAAC,cAArB,KAAwC,WAA3E,EAAwF;EACtF,eAAO,IAAK,IAAY,CAAC,cAAlB,CAAiC,OAAjC,EAA0C,OAA1C,EAAmD,MAAnD,CAA0D,IAA1D,CAAP;EACD;;EACD,MAAA,OAAO,CAAC,IAAR,CAAa,4EAAb;EACA,aAAOD,wBAAA,CAA4B,IAA5B,CAAP;EACD;EAxXH;EAAA;EAAA,WAyXE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,4CAAd,CAAN;EACD;EA3XH;EAAA;EAAA,WA4XE,cAAY,IAAZ,EAAmC;EACjC,UAAIC,kBAAA,CAAsB,IAAtB,CAAJ,EAAiC;EAC/B,eAAO,IAAI,QAAJ,CACL,OAAO,CAAC,IAAD,EAAO,KAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,MAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,KAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,IAAP,CAJF,EAKL,OAAO,CAAC,IAAD,EAAO,KAAP,CALF,EAML,OAAO,CAAC,IAAD,EAAO,OAAP,CANF,EAOL,OAAO,CAAC,IAAD,EAAO,OAAP,CAPF,EAQL,OAAO,CAAC,IAAD,EAAO,YAAP,CARF,EASL,OAAO,CAAC,IAAD,EAAO,YAAP,CATF,EAUL,OAAO,CAAC,IAAD,EAAO,WAAP,CAVF,CAAP;EAYD;;EACD,aAAOlE,kBAAA,CAAsB,IAAtB,CAAP;EACD;EA5YH;EAAA;EAAA,WA6YE,iBACE,QADF,EAEE,QAFF,EAGgD;EAAA,UAA9C,YAA8C,uEAAT,SAAS;EAE9C,UAAM,GAAG,GAAGA,kBAAA,CAAsB,QAAtB,CAAZ;EACA,UAAM,GAAG,GAAGA,kBAAA,CAAsB,QAAtB,CAAZ;EACA,UAAM,OAAO,GAAGhB,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,UAAU,GAAGwF,wBAAA,CAA4B,OAA5B,CAAnB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,KAAN,CAAlB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,MAAN,CAApB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,KAAN,CAAlB;EACA,UAAI,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,IAAN,CAAhB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,KAAN,CAAlB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,OAAN,CAApB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,OAAN,CAAlB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,YAAN,CAAnB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,YAAN,CAAnB;EACA,UAAI,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,WAAN,CAAjB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,KAAN,CAAlB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,MAAN,CAApB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,KAAN,CAAlB;EACA,UAAI,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,IAAN,CAAhB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,KAAN,CAAlB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,OAAN,CAApB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,GAAD,EAAM,OAAN,CAAlB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,YAAN,CAAnB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,YAAN,CAAnB;EACA,UAAI,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,WAAN,CAAjB;EACA,UAAM,MAAM,GAAGM,oBAAA,CAAwB,UAAxB,EAAoC,EAApC,EAAwC,IAAxC,EAA8C,EAA9C,EAAkD,EAAlD,CAAf;EACA,UAAM,MAAM,GAAGA,oBAAA,CAAwB,UAAxB,EAAoC,EAApC,EAAwC,IAAxC,EAA8C,EAA9C,EAAkD,EAAlD,CAAf;;EACA,UAAI,EAAE,KAAK,CAAP,IAAY,EAAE,KAAK,CAAnB,IAAwB,IAAI,KAAK,CAAjC,IAAsC,IAAI,KAAK,CAA/C,IAAoD,EAAE,KAAK,CAA3D,IAAgE,EAAE,KAAK,CAA3E,EAA8E;EAAA,qCAC5DL,yBAAA,CAA6B,EAA7B,EAAiC,IAAjC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,KAA/C,EAAsD,UAAtD,CAD4D;;EACnE,QAAA,EADmE,0BACzE,IADyE;;EAAA,qCAE5DA,yBAAA,CAA6B,EAA7B,EAAiC,IAAjC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,KAA/C,EAAsD,UAAtD,CAF4D;;EAEnE,QAAA,EAFmE,0BAEzE,IAFyE;EAG7E;;EACD,UAAM,QAAQ,GAAGM,wBAAA,CAA4B,EAA5B,EAAgC,EAAhC,EAAoC,IAApC,EAA0C,EAA1C,EAA8C,GAA9C,EAAmD,GAAnD,EAAwD,GAAxD,EAA6D,MAA7D,CAAjB;EACA,UAAM,QAAQ,GAAGA,wBAAA,CAA4B,EAA5B,EAAgC,EAAhC,EAAoC,IAApC,EAA0C,EAA1C,EAA8C,GAA9C,EAAmD,GAAnD,EAAwD,GAAxD,EAA6D,MAA7D,CAAjB;EACA,aAAO3D,gBAAA,CAAoB,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,QAAd,EAAwB,QAAxB,CAAd,CAApB,CAAP;EACD;EAnbH;;EAAA;EAAA;EAubA,kBAAkB,CAAC,QAAD,EAAW,mBAAX,CAAlB;;ECtcA,IAAM9D,cAAY,GAAG,MAAM,CAAC,MAA5B;MAEa,aAAb;EACE,yBACE,aADF,EAEE,WAFF,EAI8B;EAAA,QAD5B,aAC4B,uEADwBqC,kBAAA,EACxB;EAAA,QAA5B,qBAA4B,uEAAJ,IAAI;;EAAA;;EAE5B,QAAM,QAAQ,GAAG2B,wBAAA,CAA4B,aAA5B,CAAjB;EACA,QAAM,MAAM,GAAGA,wBAAA,CAA4B,WAA5B,CAAf;EACA,QAAM,QAAQ,GAAG7B,kBAAA,CAAsB,aAAtB,CAAjB;EACA,QAAM,gBAAgB,GAAG6B,wBAAA,CAA4B,qBAA5B,CAAzB,CAL4B;EAQ5B;EACA;EACA;;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,UAAJ,CAAe,oDAAf,CAAN;EACD;;EAED,IAAA0D,2BAAA,CAA+B,IAA/B,EAAqC,QAArC,EAA+C,MAA/C,EAAuD,QAAvD,EAAiE,gBAAjE;EACD;;EArBH;EAAA;EAAA,SAuBE,eAAa;EACX,UAAI,CAAC3G,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOuD,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EA1BH;EAAA;EAAA,SA2BE,eAAO;EACL,UAAI,CAACvD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOwD,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,IAAxC,CAAP;EACD;EA9BH;EAAA;EAAA,SA+BE,eAAY;EACV,UAAI,CAACxD,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EAlCH;EAAA;EAAA,WAoCE,eAAK,oBAAL,EAAyF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EACvF,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EAClC,UAAI,CAACmB,QAAA,CAAY,oBAAZ,CAAL,EAAwC;EACtC,cAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACD;;EACD,MAAA8C,kCAAA,CAAsC,oBAAtC;EAEA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGC,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,EAAQ,OAAR,EAAiB,WAAjB,EAA8B,MAA9B,CAA5B,CAAnB;EACA,UAAM,KAAK,GAAGpC,qBAAA,CAAyB,oBAAzB,EAA+C,UAA/C,EAA2D,SAA3D,CAAd;;EACA,UAAI,CAAC,KAAL,EAAY;EACV,cAAM,IAAI,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD,UAAI,MAAM,GAAGA,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAb;EACA,MAAA,MAAM,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,KAAzC,CAAT;EACA,MAAA,MAAM,GAAGrC,qBAAA,CAAyB,MAAzB,EAAiC,UAAjC,EAA6C,EAA7C,CAAT;EAEA,UAAM,OAAO,GAAGnB,gBAAA,CAAoB,YAApB,CAAhB;EACA,aAAOmE,0BAAA,CAA8B,QAA9B,EAAwC,MAAxC,EAAgD,OAAhD,CAAP;EACD;EAvDH;EAAA;EAAA,WAwDE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAAC9E,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,KAAK,GAAG4G,kBAAA,CAAsB,UAAtB,CAAd;;EACA,8BAAmB,CAAC,SAAD,EAAY,OAAZ,EAAqB,QAArB,CAAnB,0BAAmD;EAA9C,YAAM,IAAI,WAAV;EACH,YAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,KAAD,EAAQ,IAAR,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACpB;;EACD,aAAOpC,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAzB,EAA2C,OAAO,CAAC,KAAD,EAAQ,QAAR,CAAlD,CAAP;EACD;EAjEH;EAAA;EAAA,WAkEE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAACxE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,OAAO,GAAGW,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,YAAY,GAAG8D,oBAAA,CAAwB,OAAxB,CAArB;EACA,aAAOoC,wBAAA,CAA4B,IAA5B,EAAkC,YAAlC,CAAP;EACD;EAvEH;EAAA;EAAA,WAwEE,kBAAM;EACJ,UAAI,CAAC7G,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO6G,wBAAA,CAA4B,IAA5B,CAAP;EACD;EA3EH;EAAA;EAAA,WA4EE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAAC7G,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EAlFH;EAAA;EAAA,WAmFE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,gDAAd,CAAN;EACD;EArFH;EAAA;EAAA,WAsFE,qBAAY,IAAZ,EAA0C;EACxC,UAAI,CAACA,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAI,CAACmB,QAAA,CAAY,IAAZ,CAAL,EAAwB,MAAM,IAAI,SAAJ,CAAc,8BAAd,CAAN;EACxB,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EAEA,UAAM,kBAAkB,GAAG+C,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,EAAQ,WAAR,CAA5B,CAA3B;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,kBAA/B,EAAmD,EAAnD,CAAf;EAEA,UAAM,eAAe,GAAGoC,cAAA,CAAkB,QAAlB,EAA4B,CAAC,MAAD,CAA5B,CAAxB;EACA,UAAM,WAAW,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,eAA/B,EAAgD,EAAhD,CAApB;EACA,UAAI,YAAY,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,WAAzC,CAAnB,CAVwC;;EAaxC,UAAM,gBAAgB,sBAAO,IAAI,GAAJ,8BAAY,kBAAZ,sBAAmC,eAAnC,GAAP,CAAtB;;EACA,MAAA,YAAY,GAAGrC,qBAAA,CAAyB,YAAzB,EAAuC,gBAAvC,EAAyD,EAAzD,CAAf;EACA,UAAM,OAAO,GAAG7C,cAAY,CAAC,IAAD,CAA5B;EACA,MAAA,OAAO,CAAC,QAAR,GAAmB,QAAnB;EACA,aAAOmF,sBAAA,CAA0B,QAA1B,EAAoC,YAApC,EAAkD,OAAlD,CAAP;EACD;EAxGH;EAAA;EAAA,WAyGE,wBAAY;EACV,UAAI,CAACpE,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAO;EACL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CADZ;EAEL,QAAA,MAAM,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP,CAFV;EAGL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,SAAP,CAHZ;EAIL,QAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP;EAJX,OAAP;EAMD;EAjHH;EAAA;EAAA,WAkHE,cAAY,IAAZ,EAAgF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC9E,UAAM,OAAO,GAAGW,gBAAA,CAAoB,YAApB,CAAhB;;EACA,UAAIX,kBAAA,CAAsB,IAAtB,CAAJ,EAAiC;EAC/B,QAAA4B,kBAAA,CAAsB,OAAtB,EAD+B;;EAE/B,eAAOO,sBAAA,CACL,OAAO,CAAC,IAAD,EAAO,SAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,OAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,QAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,QAAP,CAJF,CAAP;EAMD;;EACD,aAAOyE,kBAAA,CAAsB,IAAtB,EAA4B,OAA5B,CAAP;EACD;EA9HH;;EAAA;EAAA;EAkIA,kBAAkB,CAAC,aAAD,EAAgB,wBAAhB,CAAlB;;ECvIA,IAAM,OAAO,GAAmC,SAA1C,OAA0C,GAAK;EACnD,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAD,CAA5B;EACA,SAAO,IAAI,OAAJ,CAAYE,yBAAA,EAAZ,CAAP;EACD,CAHD;;EAIA,IAAM,aAAa,GAAyC,SAAtD,aAAsD,CAAC,YAAD,EAAoD;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EAC9G,MAAM,EAAE,GAAGpH,kBAAA,CAAsB,oBAAtB,CAAX;EACA,MAAM,QAAQ,GAAG0B,kBAAA,CAAsB,YAAtB,CAAjB;EACA,MAAM,IAAI,GAAG,OAAO,EAApB;EACA,SAAO2F,kCAAA,CAAsC,EAAtC,EAA0C,IAA1C,EAAgD,QAAhD,CAAP;EACD,CALD;;EAMA,IAAM,gBAAgB,GAA4C,SAA5D,gBAA4D,GAAsC;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EACtG,MAAM,EAAE,GAAGrH,kBAAA,CAAsB,oBAAtB,CAAX;EACA,MAAM,QAAQ,GAAG4B,kBAAA,EAAjB;EACA,MAAM,IAAI,GAAG,OAAO,EAApB;EACA,SAAOyF,kCAAA,CAAsC,EAAtC,EAA0C,IAA1C,EAAgD,QAAhD,CAAP;EACD,CALD;;EAMA,IAAM,aAAa,GAAyC,SAAtD,aAAsD,CAAC,YAAD,EAAoD;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EAC9G,MAAM,EAAE,GAAGrH,kBAAA,CAAsB,oBAAtB,CAAX;EACA,MAAM,QAAQ,GAAG0B,kBAAA,CAAsB,YAAtB,CAAjB;EACA,SAAOC,2BAAA,CAA+ByF,yBAAA,EAA/B,EAA+D,EAA/D,EAAmE,QAAnE,CAAP;EACD,CAJD;;EAKA,IAAM,gBAAgB,GAA4C,SAA5D,gBAA4D,GAAsC;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EACtG,SAAO,aAAa,CAACxF,kBAAA,EAAD,EAA0B,oBAA1B,CAApB;EACD,CAFD;;EAGA,IAAM,SAAS,GAAqC,SAA9C,SAA8C,CAAC,YAAD,EAAoD;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EACtG,SAAOkE,sBAAA,CAA0B,aAAa,CAAC,YAAD,EAAe,oBAAf,CAAvC,CAAP;EACD,CAFD;;EAGA,IAAM,YAAY,GAAwC,SAApD,YAAoD,GAAsC;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EAC9F,SAAOA,sBAAA,CAA0B,gBAAgB,CAAC,oBAAD,CAA1C,CAAP;EACD,CAFD;;EAGA,IAAM,YAAY,GAAwC,SAApD,YAAoD,GAAsC;EAAA,MAArC,oBAAqC,uEAAd,QAAQ,EAAM;EAC9F,SAAOC,sBAAA,CAA0B,gBAAgB,CAAC,oBAAD,CAA1C,CAAP;EACD,CAFD;;EAGA,IAAM,QAAQ,GAAoC,SAA5C,QAA4C,GAAK;EACrD,SAAOuB,cAAA,EAAP;EACD,CAFD;;EAIO,IAAM,GAAG;EACd,EAAA,OAAO,EAAP,OADc;EAEd,EAAA,aAAa,EAAb,aAFc;EAGd,EAAA,gBAAgB,EAAhB,gBAHc;EAId,EAAA,SAAS,EAAT,SAJc;EAKd,EAAA,YAAY,EAAZ,YALc;EAMd,EAAA,YAAY,EAAZ,YANc;EAOd,EAAA,QAAQ,EAAR,QAPc;EAQd,EAAA,aAAa,EAAb,aARc;EASd,EAAA,gBAAgB,EAAhB;EATc,GAUb,MAAM,CAAC,WAVM,EAUQ,cAVR,CAAT;EAYP,MAAM,CAAC,cAAP,CAAsB,GAAtB,EAA2B,MAAM,CAAC,WAAlC,EAA+C;EAC7C,EAAA,KAAK,EAAE,cADsC;EAE7C,EAAA,QAAQ,EAAE,KAFmC;EAG7C,EAAA,UAAU,EAAE,KAHiC;EAI7C,EAAA,YAAY,EAAE;EAJ+B,CAA/C;;EC7BA,IAAM,YAAY,GAAG,MAAM,CAAC,MAA5B;;EAQA,SAAS,oBAAT,CACE,IADF,EAEE,SAFF,EAG8D;EAAA,MAA5D,OAA4D,uEAAT,SAAS;EAE5D,MAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlB;EACA,MAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAApB;EACA,MAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAApB;EACA,MAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAAzB;EACA,MAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAAzB;EACA,MAAI,UAAU,GAAG,OAAO,CAAC,IAAD,EAAO,cAAP,CAAxB;;EAEA,MAAI,OAAJ,EAAa;EACX,QAAQ,IAAR,GAA0C,OAA1C,CAAQ,IAAR;EAAA,QAAc,SAAd,GAA0C,OAA1C,CAAc,SAAd;EAAA,QAAyB,YAAzB,GAA0C,OAA1C,CAAyB,YAAzB;;EADW,wBAEuDC,SAAA,CAChE,IADgE,EAEhE,MAFgE,EAGhE,MAHgE,EAIhE,WAJgE,EAKhE,WALgE,EAMhE,UANgE,EAOhE,SAPgE,EAQhE,IARgE,EAShE,YATgE,CAFvD;;EAER,IAAA,IAFQ,iBAER,IAFQ;EAEF,IAAA,MAFE,iBAEF,MAFE;EAEM,IAAA,MAFN,iBAEM,MAFN;EAEc,IAAA,WAFd,iBAEc,WAFd;EAE2B,IAAA,WAF3B,iBAE2B,WAF3B;EAEwC,IAAA,UAFxC,iBAEwC,UAFxC;EAaZ;;EAED,MAAM,UAAU,GAAGnE,qBAAA,CAAyB,IAAzB,CAAnB;EACA,MAAM,YAAY,GAAGA,qBAAA,CAAyB,MAAzB,CAArB;EACA,MAAM,OAAO,GAAGoE,uBAAA,CAA2B,MAA3B,EAAmC,WAAnC,EAAgD,WAAhD,EAA6D,UAA7D,EAAyE,SAAzE,CAAhB;EACA,mBAAU,UAAV,cAAwB,YAAxB,SAAuC,OAAvC;EACD;;MAEY,SAAb;EACE,uBAMwB;EAAA,QALtB,YAKsB,uEALP,CAKO;EAAA,QAJtB,cAIsB,uEAJL,CAIK;EAAA,QAHtB,cAGsB,uEAHL,CAGK;EAAA,QAFtB,mBAEsB,uEAFA,CAEA;EAAA,QADtB,mBACsB,uEADA,CACA;EAAA,QAAtB,kBAAsB,uEAAD,CAAC;;EAAA;;EAEtB,QAAM,OAAO,GAAGjE,wBAAA,CAA4B,YAA5B,CAAhB;EACA,QAAM,SAAS,GAAGA,wBAAA,CAA4B,cAA5B,CAAlB;EACA,QAAM,SAAS,GAAGA,wBAAA,CAA4B,cAA5B,CAAlB;EACA,QAAM,cAAc,GAAGA,wBAAA,CAA4B,mBAA5B,CAAvB;EACA,QAAM,cAAc,GAAGA,wBAAA,CAA4B,mBAA5B,CAAvB;EACA,QAAM,aAAa,GAAGA,wBAAA,CAA4B,kBAA5B,CAAtB;EAEA,IAAAkE,UAAA,CAAc,OAAd,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,cAA7C,EAA6D,cAA7D,EAA6E,aAA7E;EACA,IAAA,WAAW,CAAC,IAAD,CAAX;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,QAAP,EAAiB,OAAjB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,UAAP,EAAmB,SAAnB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,UAAP,EAAmB,SAAnB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,eAAP,EAAwB,cAAxB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,eAAP,EAAwB,cAAxB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,cAAP,EAAuB,aAAvB,CAAP;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,QAAP,EAAiB7F,kBAAA,EAAjB,CAAP;;EAEA,IAAW;EACT,MAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpC,QAAA,KAAK,YAAK,KAAK,MAAM,CAAC,WAAZ,CAAL,eAAkC,oBAAoB,CAAC,IAAD,EAAO,MAAP,CAAtD,MAD+B;EAEpC,QAAA,QAAQ,EAAE,KAF0B;EAGpC,QAAA,UAAU,EAAE,KAHwB;EAIpC,QAAA,YAAY,EAAE;EAJsB,OAAtC;EAMD;EACF;;EAlCH;EAAA;EAAA,SAoCE,eAAY;EACV,UAAI,CAAC1B,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN,CADpB;;EAGV,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EAxCH;EAAA;EAAA,SAyCE,eAAQ;EACN,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EA5CH;EAAA;EAAA,SA6CE,eAAU;EACR,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,UAAP,CAAd;EACD;EAhDH;EAAA;EAAA,SAiDE,eAAU;EACR,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,UAAP,CAAd;EACD;EApDH;EAAA;EAAA,SAqDE,eAAe;EACb,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,eAAP,CAAd;EACD;EAxDH;EAAA;EAAA,SAyDE,eAAe;EACb,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,eAAP,CAAd;EACD;EA5DH;EAAA;EAAA,SA6DE,eAAc;EACZ,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,OAAO,CAAC,IAAD,EAAO,cAAP,CAAd;EACD;EAhEH;EAAA;EAAA,WAkEE,eAAK,gBAAL,EAAqF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EACnF,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EAC9B,UAAI,CAACuB,QAAA,CAAY,gBAAZ,CAAL,EAAoC;EAClC,cAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACD;;EACD,MAAA8C,kCAAA,CAAsC,gBAAtC;EAEA,UAAM,WAAW,GAAGmD,oBAAA,CAAwB,gBAAxB,EAA0C,SAA1C,CAApB;EACA,UAAM,OAAO,GAAGzG,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,QAAQ,GAAGiB,kBAAA,CAAsB,OAAtB,CAAjB;EAEA,UAAM,MAAM,GAAGwF,oBAAA,CAAwB,IAAxB,CAAf;;EACA,0BAAqE,YAAY,CAAC,MAAD,EAAS,WAAT,CAAjF;EAAA,UAAM,IAAN,iBAAM,IAAN;EAAA,UAAY,MAAZ,iBAAY,MAAZ;EAAA,UAAoB,MAApB,iBAAoB,MAApB;EAAA,UAA4B,WAA5B,iBAA4B,WAA5B;EAAA,UAAyC,WAAzC,iBAAyC,WAAzC;EAAA,UAAsD,UAAtD,iBAAsD,UAAtD;;EAZmF,6BAajBC,YAAA,CAChE,IADgE,EAEhE,MAFgE,EAGhE,MAHgE,EAIhE,WAJgE,EAKhE,WALgE,EAMhE,UANgE,EAOhE,QAPgE,CAbiB;;EAahF,MAAA,IAbgF,oBAahF,IAbgF;EAa1E,MAAA,MAb0E,oBAa1E,MAb0E;EAalE,MAAA,MAbkE,oBAalE,MAbkE;EAa1D,MAAA,WAb0D,oBAa1D,WAb0D;EAa7C,MAAA,WAb6C,oBAa7C,WAb6C;EAahC,MAAA,UAbgC,oBAahC,UAbgC;EAsBnF,aAAO,IAAI,SAAJ,CAAc,IAAd,EAAoB,MAApB,EAA4B,MAA5B,EAAoC,WAApC,EAAiD,WAAjD,EAA8D,UAA9D,CAAP;EACD;EAzFH;EAAA;EAAA,WA0FE,aAAI,oBAAJ,EAA0C;EACxC,UAAI,CAACzH,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO0H,4CAAA,CAAgD,KAAhD,EAAuD,IAAvD,EAA6D,oBAA7D,CAAP;EACD;EA7FH;EAAA;EAAA,WA8FE,kBAAS,oBAAT,EAAoD;EAClD,UAAI,CAAC1H,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO0H,4CAAA,CAAgD,UAAhD,EAA4D,IAA5D,EAAkE,oBAAlE,CAAP;EACD;EAjGH;EAAA;EAAA,WAkGE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAAC1H,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO2H,2BAAA,CAA+B,OAA/B,EAAwC,IAAxC,EAA8C,KAA9C,EAAqD,OAArD,CAAP;EACD;EArGH;EAAA;EAAA,WAsGE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAAC3H,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO2H,2BAAA,CAA+B,OAA/B,EAAwC,IAAxC,EAA8C,KAA9C,EAAqD,OAArD,CAAP;EACD;EAzGH;EAAA;EAAA,WA0GE,eAAM,YAAN,EAAsC;EACpC,UAAI,CAAC3H,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAI,YAAY,KAAK,SAArB,EAAgC,MAAM,IAAI,SAAJ,CAAc,+BAAd,CAAN;EAChC,UAAM,OAAO,GACX,OAAO,YAAP,KAAwB,QAAxB,GACKc,mBAAA,CAAuB,cAAvB,EAAuC,YAAvC,CADL,GAEIC,gBAAA,CAAoB,YAApB,CAHN;EAIA,UAAM,YAAY,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,cAA5B,EAA4C,MAA5C,EAAoDC,QAApD,CAArB;EACA,UAAM,YAAY,GAAGC,sBAAA,CAA0B,OAA1B,EAAmC,YAAnC,CAArB;EACA,UAAM,cAAc,GAAG;EACrB,QAAA,IAAI,EAAE,EADe;EAErB,QAAA,MAAM,EAAE,EAFa;EAGrB,QAAA,MAAM,EAAE,EAHa;EAIrB,QAAA,WAAW,EAAE,IAJQ;EAKrB,QAAA,WAAW,EAAE,IALQ;EAMrB,QAAA,UAAU,EAAE;EANS,OAAvB;EAQA,UAAM,iBAAiB,GAAGC,2BAAA,CAA+B,OAA/B,EAAwC,cAAc,CAAC,YAAD,CAAtD,EAAsE,KAAtE,CAA1B;EAEA,UAAI,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAApB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAApB;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAAzB;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAAzB;EACA,UAAI,UAAU,GAAG,OAAO,CAAC,IAAD,EAAO,cAAP,CAAxB;;EAxBoC,2BAyB8BkG,SAAA,CAChE,IADgE,EAEhE,MAFgE,EAGhE,MAHgE,EAIhE,WAJgE,EAKhE,WALgE,EAMhE,UANgE,EAOhE,iBAPgE,EAQhE,YARgE,EAShE,YATgE,CAzB9B;;EAyBjC,MAAA,IAzBiC,kBAyBjC,IAzBiC;EAyB3B,MAAA,MAzB2B,kBAyB3B,MAzB2B;EAyBnB,MAAA,MAzBmB,kBAyBnB,MAzBmB;EAyBX,MAAA,WAzBW,kBAyBX,WAzBW;EAyBE,MAAA,WAzBF,kBAyBE,WAzBF;EAyBe,MAAA,UAzBf,kBAyBe,UAzBf;EAqCpC,aAAO,IAAI,SAAJ,CAAc,IAAd,EAAoB,MAApB,EAA4B,MAA5B,EAAoC,WAApC,EAAiD,WAAjD,EAA8D,UAA9D,CAAP;EACD;EAhJH;EAAA;EAAA,WAiJE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAACrH,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,KAAK,GAAGgF,cAAA,CAAkB,UAAlB,CAAd;;EACA,8BAAmB,CAAC,QAAD,EAAW,UAAX,EAAuB,UAAvB,EAAmC,eAAnC,EAAoD,eAApD,EAAqE,cAArE,CAAnB,0BAAyG;EAApG,YAAM,IAAI,WAAV;EACH,YAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,KAAD,EAAQ,IAAR,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACpB;;EACD,aAAO,IAAP;EACD;EA1JH;EAAA;EAAA,WA4JE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAAChF,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,UAAM,OAAO,GAAGe,gBAAA,CAAoB,YAApB,CAAhB;;EACA,kCAAuCO,wBAAA,CAA4B,OAA5B,CAAvC;EAAA,UAAQ,SAAR,yBAAQ,SAAR;EAAA,UAAmB,IAAnB,yBAAmB,IAAnB;EAAA,UAAyB,SAAzB,yBAAyB,SAAzB;;EACA,UAAM,YAAY,GAAGJ,sBAAA,CAA0B,OAA1B,EAAmC,OAAnC,CAArB;EACA,aAAO,oBAAoB,CAAC,IAAD,EAAO,SAAP,EAAkB;EAAE,QAAA,IAAI,EAAJ,IAAF;EAAQ,QAAA,SAAS,EAAT,SAAR;EAAmB,QAAA,YAAY,EAAZ;EAAnB,OAAlB,CAA3B;EACD;EAlKH;EAAA;EAAA,WAmKE,kBAAM;EACJ,UAAI,CAAClB,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,oBAAoB,CAAC,IAAD,EAAO,MAAP,CAA3B;EACD;EAtKH;EAAA;EAAA,WAuKE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EA7KH;EAAA;EAAA,WA8KE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,yDAAd,CAAN;EACD;EAhLH;EAAA;EAAA,WAkLE,yBAAgB,iBAAhB,EAA+D;EAC7D,UAAI,CAACA,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAE9B,UAAM,YAAY,GAAG8B,cAAA,CAAkB,iBAAlB,CAArB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,YAAD,EAAe,SAAf,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,YAAD,EAAe,OAAf,CAAnB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAAxB;EAEA,UAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,IAAD,EAAO,cAAP,CAA1B;EAEA,aAAOiD,sBAAA,CACL,IADK,EAEL,KAFK,EAGL,GAHK,EAIL,IAJK,EAKL,MALK,EAML,MANK,EAOL,WAPK,EAQL,WARK,EASL,UATK,EAUL,QAVK,CAAP;EAYD;EA9MH;EAAA;EAAA,WA+ME,yBAAgB,IAAhB,EAAkD;EAChD,UAAI,CAAC/E,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EAE9B,UAAI,CAACuB,QAAA,CAAY,IAAZ,CAAL,EAAwB;EACtB,cAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACD;;EAED,UAAM,QAAQ,GAAG,IAAI,CAAC,SAAtB;;EACA,UAAI,QAAQ,KAAK,SAAjB,EAA4B;EAC1B,cAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,UAAM,YAAY,GAAGO,cAAA,CAAkB,QAAlB,CAArB;EAEA,UAAM,YAAY,GAAG,IAAI,CAAC,QAA1B;;EACA,UAAI,YAAY,KAAK,SAArB,EAAgC;EAC9B,cAAM,IAAI,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM,QAAQ,GAAGhC,kBAAA,CAAsB,YAAtB,CAAjB;EAEA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,YAAD,EAAe,SAAf,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,YAAD,EAAe,OAAf,CAAnB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAAxB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAD,EAAO,UAAP,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAD,EAAO,eAAP,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,IAAD,EAAO,cAAP,CAA1B;EAEA,UAAM,aAAa,GAAG,YAAY,CAAC,0BAAD,CAAlC;EACA,UAAM,EAAE,GAAG,IAAI,aAAJ,CACT,IADS,EAET,KAFS,EAGT,GAHS,EAIT,IAJS,EAKT,MALS,EAMT,MANS,EAOT,WAPS,EAQT,WARS,EAST,UATS,EAUT,QAVS,CAAX;EAYA,UAAM,OAAO,GAAGQ,4BAAA,CAAgC,QAAhC,EAA0C,EAA1C,EAA8C,YAA9C,CAAhB;EACA,aAAOmB,2BAAA,CAA+B,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAtC,EAAmE,QAAnE,EAA6E,QAA7E,CAAP;EACD;EA5PH;EAAA;EAAA,WA6PE,wBAAY;EACV,UAAI,CAACzB,cAAA,CAAkB,IAAlB,CAAL,EAA8B,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAC9B,aAAO;EACL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CADZ;EAEL,QAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CAFX;EAGL,QAAA,cAAc,EAAE,OAAO,CAAC,IAAD,EAAO,eAAP,CAHlB;EAIL,QAAA,cAAc,EAAE,OAAO,CAAC,IAAD,EAAO,eAAP,CAJlB;EAKL,QAAA,SAAS,EAAE,OAAO,CAAC,IAAD,EAAO,UAAP,CALb;EAML,QAAA,aAAa,EAAE,OAAO,CAAC,IAAD,EAAO,cAAP,CANjB;EAOL,QAAA,SAAS,EAAE,OAAO,CAAC,IAAD,EAAO,UAAP;EAPb,OAAP;EASD;EAxQH;EAAA;EAAA,WA0QE,cAAY,IAAZ,EAAgF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC9E,UAAM,OAAO,GAAGe,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,QAAQ,GAAGiB,kBAAA,CAAsB,OAAtB,CAAjB;;EACA,UAAIhC,cAAA,CAAkB,IAAlB,CAAJ,EAA6B;EAC3B,eAAO,IAAI,SAAJ,CACL,OAAO,CAAC,IAAD,EAAO,QAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,UAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,UAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,eAAP,CAJF,EAKL,OAAO,CAAC,IAAD,EAAO,eAAP,CALF,EAML,OAAO,CAAC,IAAD,EAAO,cAAP,CANF,CAAP;EAQD;;EACD,aAAOgF,cAAA,CAAkB,IAAlB,EAAwB,QAAxB,CAAP;EACD;EAxRH;EAAA;EAAA,WAyRE,iBAAe,QAAf,EAA+C,QAA/C,EAA6E;EAC3E,UAAM,GAAG,GAAGA,cAAA,CAAkB,QAAlB,CAAZ;EACA,UAAM,GAAG,GAAGA,cAAA,CAAkB,QAAlB,CAAZ;;EACA,gCAAmB,CAAC,QAAD,EAAW,UAAX,EAAuB,UAAvB,EAAmC,eAAnC,EAAoD,eAApD,EAAqE,cAArE,CAAnB,6BAAkH;EAA7G,YAAM,IAAI,aAAV;EACH,YAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,IAAN,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,GAAD,EAAM,IAAN,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAO7B,gBAAA,CAAoB,IAAI,GAAG,IAA3B,CAAP;EACpB;;EACD,aAAO,CAAP;EACD;EAlSH;;EAAA;EAAA;EAsSA,kBAAkB,CAAC,SAAD,EAAY,oBAAZ,CAAlB;;MChVa,QAAb;EACE,oBAAY,uBAAZ,EAA2C;EAAA;;EACzC;EACA;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,UAAJ,CAAe,0CAAf,CAAN;EACD;;EAED,QAAM,kBAAkB,GAAGyE,8BAAA,CAAkC,uBAAlC,CAA3B;EACA,IAAA,WAAW,CAAC,IAAD,CAAX;EACA,IAAA,OAAO,CAAC,IAAD,EAAO,WAAP,EAAoB,kBAApB,CAAP;;EAEA,IAAW;EACT,MAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpC,QAAA,KAAK,YAAK,KAAK,MAAM,CAAC,WAAZ,CAAL,eAAkC,kBAAlC,MAD+B;EAEpC,QAAA,QAAQ,EAAE,KAF0B;EAGpC,QAAA,UAAU,EAAE,KAHwB;EAIpC,QAAA,YAAY,EAAE;EAJsB,OAAtC;EAMD;EACF;;EApBH;EAAA;EAAA,SAqBE,eAAM;EACJ,UAAI,CAACC,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOtH,QAAA,CAAY,IAAZ,CAAP;EACD;EAxBH;EAAA;EAAA,WAyBE,iCAAwB,YAAxB,EAA0E;EACxE,UAAI,CAACsH,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,OAAO,GAAGxG,iBAAA,CAAqB,YAArB,CAAhB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,WAAP,CAAlB;;EAEA,UAAIyG,wBAAA,CAA4B,EAA5B,CAAJ,EAAqC;EACnC,eAAOC,yBAAA,CAA6B,EAA7B,CAAP;EACD;;EACD,aAAOC,gCAAA,CAAoC,OAAO,CAAC,OAAD,EAAU,gBAAV,CAA3C,EAAwE,EAAxE,CAAP;EACD;EAlCH;EAAA;EAAA,WAmCE,4BAAmB,YAAnB,EAAgE;EAC9D,UAAI,CAACH,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,OAAO,GAAGxG,iBAAA,CAAqB,YAArB,CAAhB;EACA,aAAO4G,iCAAA,CAAqC,IAArC,EAA2C,OAA3C,CAAP;EACD;EAvCH;EAAA;EAAA,WAwCE,6BACE,YADF,EAE2E;EAAA,UAAzE,aAAyE,uEAAvBvG,kBAAA,EAAuB;EAEzE,UAAM,OAAO,GAAGL,iBAAA,CAAqB,YAArB,CAAhB;EACA,UAAM,QAAQ,GAAGG,kBAAA,CAAsB,aAAtB,CAAjB;EACA,aAAO2F,kCAAA,CAAsC,IAAtC,EAA4C,OAA5C,EAAqD,QAArD,CAAP;EACD;EA/CH;EAAA;EAAA,WAgDE,uBACE,aADF,EAEsD;EAAA,UAApD,YAAoD,uEAAT,SAAS;EAEpD,UAAI,CAACU,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,QAAQ,GAAGpC,kBAAA,CAAsB,aAAtB,CAAjB;EACA,UAAM,OAAO,GAAG1E,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,cAAc,GAAG4E,wBAAA,CAA4B,OAA5B,CAAvB;EACA,aAAOrF,4BAAA,CAAgC,IAAhC,EAAsC,QAAtC,EAAgD,cAAhD,CAAP;EACD;EAzDH;EAAA;EAAA,WA0DE,gCAAuB,aAAvB,EAAyE;EACvE,UAAI,CAACuH,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,QAAQ,GAAGpC,kBAAA,CAAsB,aAAtB,CAAjB;EACA,UAAM,OAAO,GAAG,YAAY,CAAC,oBAAD,CAA5B;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,WAAP,CAAlB;;EAEA,UAAIqC,wBAAA,CAA4B,EAA5B,CAAJ,EAAqC;EACnC,YAAM,OAAO,GAAGI,oBAAA,CACd,OAAO,CAAC,QAAD,EAAW,QAAX,CADO,EAEd,OAAO,CAAC,QAAD,EAAW,SAAX,CAFO,EAGd,OAAO,CAAC,QAAD,EAAW,OAAX,CAHO,EAId,OAAO,CAAC,QAAD,EAAW,QAAX,CAJO,EAKd,OAAO,CAAC,QAAD,EAAW,UAAX,CALO,EAMd,OAAO,CAAC,QAAD,EAAW,UAAX,CANO,EAOd,OAAO,CAAC,QAAD,EAAW,eAAX,CAPO,EAQd,OAAO,CAAC,QAAD,EAAW,eAAX,CARO,EASd,OAAO,CAAC,QAAD,EAAW,cAAX,CATO,CAAhB;EAWA,YAAI,OAAO,KAAK,IAAhB,EAAsB,MAAM,IAAI,UAAJ,CAAe,qCAAf,CAAN;EACtB,YAAM,QAAQ,GAAGH,yBAAA,CAA6B,EAA7B,CAAjB;EACA,eAAO,CAAC,IAAI,OAAJ,CAAY,IAAI,CAAC,QAAL,CAAc,OAAd,EAAuB,IAAI,CAAC,MAAL,CAAY,QAAZ,CAAvB,CAAZ,CAAD,CAAP;EACD;;EAED,UAAM,eAAe,GAAGI,yBAAA,CACtB,EADsB,EAEtB,OAAO,CAAC,QAAD,EAAW,QAAX,CAFe,EAGtB,OAAO,CAAC,QAAD,EAAW,SAAX,CAHe,EAItB,OAAO,CAAC,QAAD,EAAW,OAAX,CAJe,EAKtB,OAAO,CAAC,QAAD,EAAW,QAAX,CALe,EAMtB,OAAO,CAAC,QAAD,EAAW,UAAX,CANe,EAOtB,OAAO,CAAC,QAAD,EAAW,UAAX,CAPe,EAQtB,OAAO,CAAC,QAAD,EAAW,eAAX,CARe,EAStB,OAAO,CAAC,QAAD,EAAW,eAAX,CATe,EAUtB,OAAO,CAAC,QAAD,EAAW,cAAX,CAVe,CAAxB;EAYA,aAAO,eAAe,CAAC,GAAhB,CAAoB,UAAC,EAAD;EAAA,eAAQ,IAAI,OAAJ,CAAY,EAAZ,CAAR;EAAA,OAApB,CAAP;EACD;EA9FH;EAAA;EAAA,WA+FE,2BAAkB,kBAAlB,EAAoE;EAClE,UAAI,CAACN,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,aAAa,GAAGxG,iBAAA,CAAqB,kBAArB,CAAtB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,WAAP,CAAlB,CAHkE;;EAMlE,UAAIyG,wBAAA,CAA4B,EAA5B,KAAmC,EAAE,KAAK,KAA9C,EAAqD;EACnD,eAAO,IAAP;EACD;;EAED,UAAI,gBAAgB,GAAgB,OAAO,CAAC,aAAD,EAAgB,gBAAhB,CAA3C;EACA,UAAM,OAAO,GAAG,YAAY,CAAC,oBAAD,CAA5B;EACA,MAAA,gBAAgB,GAAGM,6BAAA,CAAiC,gBAAjC,EAAmD,EAAnD,CAAnB;EACA,aAAO,gBAAgB,KAAK,IAArB,GAA4B,IAA5B,GAAmC,IAAI,OAAJ,CAAY,gBAAZ,CAA1C;EACD;EA7GH;EAAA;EAAA,WA8GE,+BAAsB,kBAAtB,EAA4E;EAC1E,UAAI,CAACP,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,UAAM,aAAa,GAAGxG,iBAAA,CAAqB,kBAArB,CAAtB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,WAAP,CAAlB,CAH0E;;EAM1E,UAAIyG,wBAAA,CAA4B,EAA5B,KAAmC,EAAE,KAAK,KAA9C,EAAqD;EACnD,eAAO,IAAP;EACD;;EAED,UAAI,gBAAgB,GAAgB,OAAO,CAAC,aAAD,EAAgB,gBAAhB,CAA3C;EACA,UAAM,OAAO,GAAG,YAAY,CAAC,oBAAD,CAA5B;EACA,MAAA,gBAAgB,GAAGO,iCAAA,CAAqC,gBAArC,EAAuD,EAAvD,CAAnB;EACA,aAAO,gBAAgB,KAAK,IAArB,GAA4B,IAA5B,GAAmC,IAAI,OAAJ,CAAY,gBAAZ,CAA1C;EACD;EA5HH;EAAA;EAAA,WA6HE,oBAAQ;EACN,UAAI,CAACR,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOtH,QAAA,CAAY,OAAO,CAAC,IAAD,EAAO,WAAP,CAAnB,CAAP;EACD;EAhIH;EAAA;EAAA,WAiIE,kBAAM;EACJ,UAAI,CAACsH,kBAAA,CAAsB,IAAtB,CAAL,EAAkC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAClC,aAAOtH,QAAA,CAAY,IAAZ,CAAP;EACD;EApIH;EAAA;EAAA,WAqIE,cAAY,IAAZ,EAAmC;EACjC,aAAOT,kBAAA,CAAsB,IAAtB,CAAP;EACD;EAvIH;;EAAA;EAAA;EA2IA,kBAAkB,CAAC,QAAD,EAAW,mBAAX,CAAlB;;EC3JA,IAAM,YAAY,GAAG,MAAM,CAAC,MAA5B;MAEa,cAAb;EACE,0BACE,YADF,EAEE,aAFF,EAIoD;EAAA,QADlD,aACkD,uEADR4B,kBAAA,EACQ;EAAA,QAAlD,oBAAkD,uEAAD,CAAC;;EAAA;;EAElD,QAAM,OAAO,GAAG2B,wBAAA,CAA4B,YAA5B,CAAhB;EACA,QAAM,QAAQ,GAAGA,wBAAA,CAA4B,aAA5B,CAAjB;EACA,QAAM,QAAQ,GAAG7B,kBAAA,CAAsB,aAAtB,CAAjB;EACA,QAAM,eAAe,GAAG6B,wBAAA,CAA4B,oBAA5B,CAAxB,CALkD;EAQlD;EACA;EACA;;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,UAAJ,CAAe,qDAAf,CAAN;EACD;;EAED,IAAAiF,4BAAA,CAAgC,IAAhC,EAAsC,OAAtC,EAA+C,QAA/C,EAAyD,QAAzD,EAAmE,eAAnE;EACD;;EArBH;EAAA;EAAA,SAsBE,eAAQ;EACN,UAAI,CAACnI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOsD,YAAA,CAAgB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAvB,EAAyC,IAAzC,CAAP;EACD;EAzBH;EAAA;EAAA,SA0BE,eAAS;EACP,UAAI,CAACtD,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOuD,aAAA,CAAiB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB,EAA0C,IAA1C,CAAP;EACD;EA7BH;EAAA;EAAA,SA8BE,eAAa;EACX,UAAI,CAACvD,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOwD,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,IAA9C,CAAP;EACD;EAjCH;EAAA;EAAA,SAkCE,eAAY;EACV,UAAI,CAACxD,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EArCH;EAAA;EAAA,SAsCE,eAAO;EACL,UAAI,CAACA,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOoD,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,IAAxC,CAAP;EACD;EAzCH;EAAA;EAAA,SA0CE,eAAW;EACT,UAAI,CAACpD,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOqD,eAAA,CAAmB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA1B,EAA4C,IAA5C,CAAP;EACD;EA7CH;EAAA;EAAA,SA8CE,eAAe;EACb,UAAI,CAACrD,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAO8D,mBAAA,CAAuB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA9B,EAAgD,IAAhD,CAAP;EACD;EAjDH;EAAA;EAAA,SAkDE,eAAc;EACZ,UAAI,CAAC9D,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAO+D,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EArDH;EAAA;EAAA,SAsDE,eAAgB;EACd,UAAI,CAAC/D,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOgE,oBAAA,CAAwB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA/B,EAAiD,IAAjD,CAAP;EACD;EAzDH;EAAA;EAAA,SA0DE,eAAc;EACZ,UAAI,CAAChE,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOiE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,IAA/C,CAAP;EACD;EA7DH;EAAA;EAAA,WA8DE,eAAK,qBAAL,EAA0F;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EACxF,UAAI,CAACjE,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EACnC,UAAI,CAACoB,QAAA,CAAY,qBAAZ,CAAL,EAAyC;EACvC,cAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACD;;EACD,MAAA8C,kCAAA,CAAsC,qBAAtC;EAEA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGC,cAAA,CAAkB,QAAlB,EAA4B,CAAC,OAAD,EAAU,WAAV,EAAuB,MAAvB,CAA5B,CAAnB;EACA,UAAM,KAAK,GAAGpC,qBAAA,CAAyB,qBAAzB,EAAgD,UAAhD,EAA4D,SAA5D,CAAd;;EACA,UAAI,CAAC,KAAL,EAAY;EACV,cAAM,IAAI,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACD,UAAI,MAAM,GAAGA,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAb;EACA,MAAA,MAAM,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,KAAzC,CAAT;EACA,MAAA,MAAM,GAAGrC,qBAAA,CAAyB,MAAzB,EAAiC,UAAjC,EAA6C,EAA7C,CAAT;EAEA,UAAM,OAAO,GAAGnB,gBAAA,CAAoB,YAApB,CAAhB;EAEA,aAAOkE,2BAAA,CAA+B,QAA/B,EAAyC,MAAzC,EAAiD,OAAjD,CAAP;EACD;EAlFH;EAAA;EAAA,WAmFE,aAAI,oBAAJ,EAAiF;EAAA,UAArC,OAAqC,uEAAT,SAAS;EAC/E,UAAI,CAAC9E,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOoI,iDAAA,CAAqD,KAArD,EAA4D,IAA5D,EAAkE,oBAAlE,EAAwF,OAAxF,CAAP;EACD;EAtFH;EAAA;EAAA,WAuFE,kBACE,oBADF,EAE4C;EAAA,UAA1C,OAA0C,uEAAT,SAAS;EAE1C,UAAI,CAACpI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOoI,iDAAA,CAAqD,UAArD,EAAiE,IAAjE,EAAuE,oBAAvE,EAA6F,OAA7F,CAAP;EACD;EA7FH;EAAA;EAAA,WA8FE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAACpI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOqI,gCAAA,CAAoC,OAApC,EAA6C,IAA7C,EAAmD,KAAnD,EAA0D,OAA1D,CAAP;EACD;EAjGH;EAAA;EAAA,WAkGE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAACrI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOqI,gCAAA,CAAoC,OAApC,EAA6C,IAA7C,EAAmD,KAAnD,EAA0D,OAA1D,CAAP;EACD;EArGH;EAAA;EAAA,WAsGE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAACrI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,UAAM,KAAK,GAAGsI,mBAAA,CAAuB,UAAvB,CAAd;;EACA,8BAAmB,CAAC,QAAD,EAAW,SAAX,EAAsB,OAAtB,CAAnB,0BAAmD;EAA9C,YAAM,IAAI,WAAV;EACH,YAAM,IAAI,GAAG,OAAO,CAAC,IAAD,EAAO,IAAP,CAApB;EACA,YAAM,IAAI,GAAG,OAAO,CAAC,KAAD,EAAQ,IAAR,CAApB;EACA,YAAI,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACpB;;EACD,aAAO7D,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAzB,EAA2C,OAAO,CAAC,KAAD,EAAQ,QAAR,CAAlD,CAAP;EACD;EA/GH;EAAA;EAAA,WAgHE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAACzE,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,UAAM,OAAO,GAAGY,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,YAAY,GAAG8D,oBAAA,CAAwB,OAAxB,CAArB;EACA,aAAO6D,yBAAA,CAA6B,IAA7B,EAAmC,YAAnC,CAAP;EACD;EArHH;EAAA;EAAA,WAsHE,kBAAM;EACJ,UAAI,CAACvI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAOuI,yBAAA,CAA6B,IAA7B,CAAP;EACD;EAzHH;EAAA;EAAA,WA0HE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACvI,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EAhIH;EAAA;EAAA,WAiIE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,8DAAd,CAAN;EACD;EAnIH;EAAA;EAAA,WAoIE,qBAAY,IAAZ,EAA0C;EACxC,UAAI,CAACA,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,UAAI,CAACoB,QAAA,CAAY,IAAZ,CAAL,EAAwB,MAAM,IAAI,SAAJ,CAAc,8BAAd,CAAN;EACxB,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EAEA,UAAM,kBAAkB,GAAG+C,cAAA,CAAkB,QAAlB,EAA4B,CAAC,WAAD,EAAc,MAAd,CAA5B,CAA3B;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,kBAA/B,EAAmD,EAAnD,CAAf;EAEA,UAAM,eAAe,GAAGoC,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,CAA5B,CAAxB;EACA,UAAM,WAAW,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,eAA/B,EAAgD,EAAhD,CAApB;EACA,UAAI,YAAY,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,WAAzC,CAAnB,CAVwC;;EAaxC,UAAM,gBAAgB,sBAAO,IAAI,GAAJ,8BAAY,kBAAZ,sBAAmC,eAAnC,GAAP,CAAtB;;EACA,MAAA,YAAY,GAAGrC,qBAAA,CAAyB,YAAzB,EAAuC,gBAAvC,EAAyD,EAAzD,CAAf;EACA,UAAM,OAAO,GAAG,YAAY,CAAC,IAAD,CAA5B;EACA,MAAA,OAAO,CAAC,QAAR,GAAmB,QAAnB;EACA,aAAOsC,sBAAA,CAA0B,QAA1B,EAAoC,YAApC,EAAkD,OAAlD,CAAP;EACD;EAtJH;EAAA;EAAA,WAuJE,wBAAY;EACV,UAAI,CAACrE,mBAAA,CAAuB,IAAvB,CAAL,EAAmC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACnC,aAAO;EACL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CADZ;EAEL,QAAA,MAAM,EAAE,OAAO,CAAC,IAAD,EAAO,OAAP,CAFV;EAGL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,SAAP,CAHZ;EAIL,QAAA,OAAO,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP;EAJX,OAAP;EAMD;EA/JH;EAAA;EAAA,WAgKE,cAAY,IAAZ,EAAgF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC9E,UAAM,OAAO,GAAGY,gBAAA,CAAoB,YAApB,CAAhB;;EACA,UAAIZ,mBAAA,CAAuB,IAAvB,CAAJ,EAAkC;EAChC,QAAA6B,kBAAA,CAAsB,OAAtB,EADgC;;EAEhC,eAAOM,uBAAA,CACL,OAAO,CAAC,IAAD,EAAO,QAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,SAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,QAAP,CAHF,EAIL,OAAO,CAAC,IAAD,EAAO,OAAP,CAJF,CAAP;EAMD;;EACD,aAAOmG,mBAAA,CAAuB,IAAvB,EAA6B,OAA7B,CAAP;EACD;EA5KH;EAAA;EAAA,WA6KE,iBAAe,QAAf,EAA+C,QAA/C,EAA6E;EAC3E,UAAM,GAAG,GAAGA,mBAAA,CAAuB,QAAvB,CAAZ;EACA,UAAM,GAAG,GAAGA,mBAAA,CAAuB,QAAvB,CAAZ;EACA,aAAOrF,cAAA,CACL,OAAO,CAAC,GAAD,EAAM,QAAN,CADF,EAEL,OAAO,CAAC,GAAD,EAAM,SAAN,CAFF,EAGL,OAAO,CAAC,GAAD,EAAM,OAAN,CAHF,EAIL,OAAO,CAAC,GAAD,EAAM,QAAN,CAJF,EAKL,OAAO,CAAC,GAAD,EAAM,SAAN,CALF,EAML,OAAO,CAAC,GAAD,EAAM,OAAN,CANF,CAAP;EAQD;EAxLH;;EAAA;EAAA;EA4LA,kBAAkB,CAAC,cAAD,EAAiB,yBAAjB,CAAlB;;MC5Ka,aAAb;EACE,yBACE,qBADF,EAEE,aAFF,EAG6E;EAAA,QAA3E,aAA2E,uEAAvB1B,kBAAA,EAAuB;;EAAA;;EAE3E;EACA;EACA;EACA;EACA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,YAAM,IAAI,SAAJ,CAAc,gDAAd,CAAN;EACD;;EACD,QAAM,gBAAgB,GAAGlB,QAAA,CAAY,qBAAZ,CAAzB;EACA,QAAM,QAAQ,GAAGV,kBAAA,CAAsB,aAAtB,CAAjB;EACA,QAAM,QAAQ,GAAG0B,kBAAA,CAAsB,aAAtB,CAAjB;EAEA,IAAAmH,gCAAA,CAAoC,IAApC,EAA0C,gBAA1C,EAA4D,QAA5D,EAAsE,QAAtE;EACD;;EAlBH;EAAA;EAAA,SAmBE,eAAY;EACV,UAAI,CAACzI,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,IAAD,EAAO,QAAP,CAAd;EACD;EAtBH;EAAA;EAAA,SAuBE,eAAY;EACV,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,IAAD,EAAO,SAAP,CAAd;EACD;EA1BH;EAAA;EAAA,SA2BE,eAAQ;EACN,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOuD,YAAA,CAAgB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAvB,EAAyC,QAAQ,CAAC,IAAD,CAAjD,CAAP;EACD;EA9BH;EAAA;EAAA,SA+BE,eAAS;EACP,UAAI,CAACvD,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOwD,aAAA,CAAiB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB,EAA0C,QAAQ,CAAC,IAAD,CAAlD,CAAP;EACD;EAlCH;EAAA;EAAA,SAmCE,eAAa;EACX,UAAI,CAACxD,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOyD,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,QAAQ,CAAC,IAAD,CAAtD,CAAP;EACD;EAtCH;EAAA;EAAA,SAuCE,eAAO;EACL,UAAI,CAACzD,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO0D,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,QAAQ,CAAC,IAAD,CAAhD,CAAP;EACD;EA1CH;EAAA;EAAA,SA2CE,eAAQ;EACN,UAAI,CAAC1D,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,QAAjB,CAAd;EACD;EA9CH;EAAA;EAAA,SA+CE,eAAU;EACR,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,UAAjB,CAAd;EACD;EAlDH;EAAA;EAAA,SAmDE,eAAU;EACR,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,UAAjB,CAAd;EACD;EAtDH;EAAA;EAAA,SAuDE,eAAe;EACb,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,eAAjB,CAAd;EACD;EA1DH;EAAA;EAAA,SA2DE,eAAe;EACb,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,eAAjB,CAAd;EACD;EA9DH;EAAA;EAAA,SA+DE,eAAc;EACZ,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,OAAO,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,cAAjB,CAAd;EACD;EAlEH;EAAA;EAAA,SAmEE,eAAO;EACL,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOqD,WAAA,CAAe,OAAO,CAAC,IAAD,EAAO,QAAP,CAAtB,EAAwC,QAAQ,CAAC,IAAD,CAAhD,CAAP;EACD;EAtEH;EAAA;EAAA,SAuEE,eAAW;EACT,UAAI,CAACrD,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOsD,eAAA,CAAmB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA1B,EAA4C,QAAQ,CAAC,IAAD,CAApD,CAAP;EACD;EA1EH;EAAA;EAAA,SA2EE,eAAgB;EACd,UAAI,CAACtD,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAArB;EACA,aAAO,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,KAAZ,EAAmB,OAAnB,CAAd,CAAP;EACD;EA/EH;EAAA;EAAA,SAgFE,eAAqB;EACnB,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAArB;EACA,aAAO,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,KAAZ,EAAmB,OAAnB,CAAd,CAAP;EACD;EApFH;EAAA;EAAA,SAqFE,eAAqB;EACnB,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,KAAK,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAArB;EACA,aAAOS,gBAAA,CAAoB,IAAI,CAAC,MAAL,CAAY,KAAZ,EAAmB,QAAnB,CAApB,CAAP;EACD;EAzFH;EAAA;EAAA,SA0FE,eAAoB;EAClB,UAAI,CAACT,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOS,gBAAA,CAAoB,OAAO,CAAC,IAAD,EAAO,gBAAP,CAA3B,CAAP;EACD;EA7FH;EAAA;EAAA,SA8FE,eAAa;EACX,UAAI,CAACT,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO2D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,QAAQ,CAAC,IAAD,CAAtD,CAAP;EACD;EAjGH;EAAA;EAAA,SAkGE,eAAa;EACX,UAAI,CAAC3D,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO4D,iBAAA,CAAqB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA5B,EAA8C,QAAQ,CAAC,IAAD,CAAtD,CAAP;EACD;EArGH;EAAA;EAAA,SAsGE,eAAc;EACZ,UAAI,CAAC5D,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO6D,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,QAAQ,CAAC,IAAD,CAAvD,CAAP;EACD;EAzGH;EAAA;EAAA,SA0GE,eAAc;EACZ,UAAI,CAAC7D,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,EAAE,GAAG,QAAQ,CAAC,IAAD,CAAnB;EACA,UAAM,QAAQ,GAAG,YAAY,CAAC,0BAAD,CAA7B;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,EAAD,EAAK,QAAL,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,EAAD,EAAK,SAAL,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,EAAD,EAAK,OAAL,CAAnB;EACA,UAAM,KAAK,GAAG,IAAI,QAAJ,CAAa,IAAb,EAAmB,KAAnB,EAA0B,GAA1B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8C,CAA9C,CAAd;EACA,UAAM,cAAc,GAAGsC,UAAA,CAAc,IAAd,EAAoB,KAApB,EAA2B,GAA3B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,QAA5C,CAAvB;EACA,UAAM,QAAQ,GAAG,IAAI,QAAJ,CAAa,cAAc,CAAC,IAA5B,EAAkC,cAAc,CAAC,KAAjD,EAAwD,cAAc,CAAC,GAAvE,EAA4E,CAA5E,EAA+E,CAA/E,EAAkF,CAAlF,EAAqF,CAArF,EAAwF,CAAxF,EAA2F,CAA3F,CAAjB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxB;EACA,UAAM,OAAO,GAAG,OAAO,CAAClC,4BAAA,CAAgC,QAAhC,EAA0C,KAA1C,EAAiD,YAAjD,CAAD,EAAiE,gBAAjE,CAAvB;EACA,UAAM,UAAU,GAAG,OAAO,CAACA,4BAAA,CAAgC,QAAhC,EAA0C,QAA1C,EAAoD,YAApD,CAAD,EAAoE,gBAApE,CAA1B;EACA,aAAO,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,QAAL,CAAc,UAAd,EAA0B,OAA1B,CAAd,IAAoD,MAA3D;EACD;EAxHH;EAAA;EAAA,SAyHE,eAAc;EACZ,UAAI,CAACJ,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO8D,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,QAAQ,CAAC,IAAD,CAAvD,CAAP;EACD;EA5HH;EAAA;EAAA,SA6HE,eAAe;EACb,UAAI,CAAC9D,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO+D,mBAAA,CAAuB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA9B,EAAgD,QAAQ,CAAC,IAAD,CAAxD,CAAP;EACD;EAhIH;EAAA;EAAA,SAiIE,eAAc;EACZ,UAAI,CAAC/D,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOgE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,QAAQ,CAAC,IAAD,CAAvD,CAAP;EACD;EApIH;EAAA;EAAA,SAqIE,eAAgB;EACd,UAAI,CAAChE,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOiE,oBAAA,CAAwB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA/B,EAAiD,QAAQ,CAAC,IAAD,CAAzD,CAAP;EACD;EAxIH;EAAA;EAAA,SAyIE,eAAc;EACZ,UAAI,CAACjE,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOkE,kBAAA,CAAsB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA7B,EAA+C,QAAQ,CAAC,IAAD,CAAvD,CAAP;EACD;EA5IH;EAAA;EAAA,SA6IE,eAAU;EACR,UAAI,CAAClE,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO+H,iCAAA,CAAqC,OAAO,CAAC,IAAD,EAAO,SAAP,CAA5C,EAA+D,OAAO,CAAC,IAAD,EAAO,OAAP,CAAtE,CAAP;EACD;EAhJH;EAAA;EAAA,SAiJE,eAAqB;EACnB,UAAI,CAAC/H,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO0I,uBAAA,CAA2B,OAAO,CAAC,IAAD,EAAO,SAAP,CAAlC,EAAqD,OAAO,CAAC,IAAD,EAAO,OAAP,CAA5D,CAAP;EACD;EApJH;EAAA;EAAA,WAqJE,eAAK,yBAAL,EAA8F;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC5F,UAAI,CAAC1I,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;;EACvC,UAAI,CAACqB,QAAA,CAAY,yBAAZ,CAAL,EAA6C;EAC3C,cAAM,IAAI,SAAJ,CAAc,8BAAd,CAAN;EACD;;EACD,MAAA8C,kCAAA,CAAsC,yBAAtC,EAL4F;;EAQ5F,UAAM,OAAO,GAAGtD,gBAAA,CAAoB,YAApB,CAAhB;EACA,UAAM,cAAc,GAAG4E,wBAAA,CAA4B,OAA5B,CAAvB;EACA,UAAM,MAAM,GAAGkD,gBAAA,CAAoB,OAApB,EAA6B,QAA7B,CAAf;EAEA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGvE,cAAA,CAAkB,QAAlB,EAA4B,CAC7C,KAD6C,EAE7C,MAF6C,EAG7C,aAH6C,EAI7C,aAJ6C,EAK7C,QAL6C,EAM7C,OAN6C,EAO7C,WAP6C,EAQ7C,YAR6C,EAS7C,QAT6C,EAU7C,MAV6C,CAA5B,CAAnB;EAYA,UAAM,gBAAgB,GAAGwE,SAAA,CAAa,UAAb,EAAyB,QAAzB,CAAzB;EACA,UAAM,KAAK,GAAG5G,qBAAA,CAAyB,yBAAzB,EAAoD,gBAApD,EAAsE,SAAtE,CAAd;EACA,UAAM,2BAA2B,GAAG4G,SAAA,CAAa,gBAAb,EAA+B,UAA/B,CAApC;EACA,UAAI,MAAM,GAAG5G,qBAAA,CAAyB,IAAzB,EAA+B,2BAA/B,EAA4D,CAAC,UAAD,EAAa,QAAb,CAA5D,CAAb;EACA,MAAA,MAAM,GAAGqC,mBAAA,CAAuB,QAAvB,EAAiC,MAAjC,EAAyC,KAAzC,CAAT;EACA,MAAA,MAAM,GAAGrC,qBAAA,CAAyB,MAAzB,EAAiC,2BAAjC,EAA8D,CAAC,UAAD,EAAa,QAAb,CAA9D,CAAT;;EACA,kCACEkD,+BAAA,CAAmC,QAAnC,EAA6C,MAA7C,EAAqD,OAArD,CADF;EAAA,UAAM,IAAN,yBAAM,IAAN;EAAA,UAAY,KAAZ,yBAAY,KAAZ;EAAA,UAAmB,GAAnB,yBAAmB,GAAnB;EAAA,UAAwB,IAAxB,yBAAwB,IAAxB;EAAA,UAA8B,MAA9B,yBAA8B,MAA9B;EAAA,UAAsC,MAAtC,yBAAsC,MAAtC;EAAA,UAA8C,WAA9C,yBAA8C,WAA9C;EAAA,UAA2D,WAA3D,yBAA2D,WAA3D;EAAA,UAAwE,UAAxE,yBAAwE,UAAxE;;EAEA,UAAM,QAAQ,GAAG2C,yBAAA,CAA6B,MAAM,CAAC,MAApC,CAAjB;EACA,UAAM,gBAAgB,GAAGgB,0BAAA,CACvB,IADuB,EAEvB,KAFuB,EAGvB,GAHuB,EAIvB,IAJuB,EAKvB,MALuB,EAMvB,MANuB,EAOvB,WAPuB,EAQvB,WARuB,EASvB,UATuB,EAUvB,QAVuB,EAWvB,QAXuB,EAYvB,QAZuB,EAavB,cAbuB,EAcvB,MAduB;EAevB;EAAoB,WAfG,CAAzB;EAkBA,aAAOtH,2BAAA,CAA+B,gBAA/B,EAAiD,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxD,EAA2E,QAA3E,CAAP;EACD;EA3MH;EAAA;EAAA,WA4ME,uBAAc,iBAAd,EAA2D;EACzD,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAEvC,UAAM,YAAY,GAAG4B,cAAA,CAAkB,iBAAlB,CAArB;EAEA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,YAAD,EAAe,SAAf,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,YAAD,EAAe,OAAf,CAAnB;EACA,UAAI,QAAQ,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAAtB;EACA,UAAM,MAAM,GAAG,QAAQ,CAAC,IAAD,CAAvB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,MAAD,EAAS,QAAT,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,MAAD,EAAS,UAAT,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,MAAD,EAAS,UAAT,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,MAAD,EAAS,eAAT,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,MAAD,EAAS,eAAT,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,MAAD,EAAS,cAAT,CAA1B;EAEA,MAAA,QAAQ,GAAGuD,oBAAA,CAAwB,OAAO,CAAC,IAAD,EAAO,QAAP,CAA/B,EAAiD,QAAjD,CAAX;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxB;EACA,UAAM,aAAa,GAAG,YAAY,CAAC,0BAAD,CAAlC;EACA,UAAM,EAAE,GAAG,IAAI,aAAJ,CACT,IADS,EAET,KAFS,EAGT,GAHS,EAIT,IAJS,EAKT,MALS,EAMT,MANS,EAOT,WAPS,EAQT,WARS,EAST,UATS,EAUT,QAVS,CAAX;EAYA,UAAM,OAAO,GAAG/E,4BAAA,CAAgC,QAAhC,EAA0C,EAA1C,EAA8C,YAA9C,CAAhB;EACA,aAAOmB,2BAAA,CAA+B,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAtC,EAAmE,QAAnE,EAA6E,QAA7E,CAAP;EACD;EA9OH;EAAA;EAAA,WA+OE,yBAAuE;EAAA,UAAzD,iBAAyD,uEAAT,SAAS;EACrE,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EAEvC,UAAM,SAAS,GAAG,YAAY,CAAC,sBAAD,CAA9B;EACA,UAAM,YAAY,GAAG,iBAAiB,KAAK,SAAtB,GAAkC,IAAI,SAAJ,EAAlC,GAAoD8E,cAAA,CAAkB,iBAAlB,CAAzE;EAEA,UAAM,MAAM,GAAG,QAAQ,CAAC,IAAD,CAAvB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,MAAD,EAAS,QAAT,CAApB;EACA,UAAM,KAAK,GAAG,OAAO,CAAC,MAAD,EAAS,SAAT,CAArB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,MAAD,EAAS,OAAT,CAAnB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,IAAI,GAAG,OAAO,CAAC,YAAD,EAAe,QAAf,CAApB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAtB;EACA,UAAM,MAAM,GAAG,OAAO,CAAC,YAAD,EAAe,UAAf,CAAtB;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAA3B;EACA,UAAM,WAAW,GAAG,OAAO,CAAC,YAAD,EAAe,eAAf,CAA3B;EACA,UAAM,UAAU,GAAG,OAAO,CAAC,YAAD,EAAe,cAAf,CAA1B;EAEA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxB;EACA,UAAM,aAAa,GAAG,YAAY,CAAC,0BAAD,CAAlC;EACA,UAAM,EAAE,GAAG,IAAI,aAAJ,CACT,IADS,EAET,KAFS,EAGT,GAHS,EAIT,IAJS,EAKT,MALS,EAMT,MANS,EAOT,WAPS,EAQT,WARS,EAST,UATS,EAUT,QAVS,CAAX;EAYA,UAAM,OAAO,GAAG1E,4BAAA,CAAgC,QAAhC,EAA0C,EAA1C,EAA8C,YAA9C,CAAhB;EACA,aAAOmB,2BAAA,CAA+B,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAtC,EAAmE,QAAnE,EAA6E,QAA7E,CAAP;EACD;EAjRH;EAAA;EAAA,WAkRE,sBAAa,aAAb,EAAqD;EACnD,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,QAAQ,GAAGJ,kBAAA,CAAsB,aAAtB,CAAjB;EACA,aAAO2B,2BAAA,CAA+B,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAtC,EAAgE,QAAhE,EAA0E,OAAO,CAAC,IAAD,EAAO,QAAP,CAAjF,CAAP;EACD;EAtRH;EAAA;EAAA,WAuRE,sBAAa,aAAb,EAAqD;EACnD,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,QAAQ,GAAGsB,kBAAA,CAAsB,aAAtB,CAAjB;EACA,aAAOC,2BAAA,CAA+B,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAtC,EAAgE,OAAO,CAAC,IAAD,EAAO,SAAP,CAAvE,EAA0F,QAA1F,CAAP;EACD;EA3RH;EAAA;EAAA,WA4RE,aAAI,oBAAJ,EAAiF;EAAA,UAArC,OAAqC,uEAAT,SAAS;EAC/E,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO8I,gDAAA,CAAoD,KAApD,EAA2D,IAA3D,EAAiE,oBAAjE,EAAuF,OAAvF,CAAP;EACD;EA/RH;EAAA;EAAA,WAgSE,kBACE,oBADF,EAE4C;EAAA,UAA1C,OAA0C,uEAAT,SAAS;EAE1C,UAAI,CAAC9I,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO8I,gDAAA,CAAoD,UAApD,EAAgE,IAAhE,EAAsE,oBAAtE,EAA4F,OAA5F,CAAP;EACD;EAtSH;EAAA;EAAA,WAuSE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAAC9I,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO+I,+BAAA,CAAmC,OAAnC,EAA4C,IAA5C,EAAkD,KAAlD,EAAyD,OAAzD,CAAP;EACD;EA1SH;EAAA;EAAA,WA2SE,eAAM,KAAN,EAAwE;EAAA,UAAvC,OAAuC,uEAAT,SAAS;EACtE,UAAI,CAAC/I,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO+I,+BAAA,CAAmC,OAAnC,EAA4C,IAA5C,EAAkD,KAAlD,EAAyD,OAAzD,CAAP;EACD;EA9SH;EAAA;EAAA,WA+SE,eAAM,YAAN,EAAsC;EACpC,UAAI,CAAC/I,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAI,YAAY,KAAK,SAArB,EAAgC,MAAM,IAAI,SAAJ,CAAc,+BAAd,CAAN;EAChC,UAAM,OAAO,GACX,OAAO,YAAP,KAAwB,QAAxB,GACKY,mBAAA,CAAuB,cAAvB,EAAuC,YAAvC,CADL,GAEIC,gBAAA,CAAoB,YAApB,CAHN;EAIA,UAAM,YAAY,GAAGC,eAAA,CAAmB,OAAnB,EAA4B,cAA5B,EAA4C,MAA5C,EAAoDC,QAApD,EAAiE,CAAC,KAAD,CAAjE,CAArB;EACA,UAAM,YAAY,GAAGC,sBAAA,CAA0B,OAA1B,EAAmC,YAAnC,CAArB;EACA,UAAM,iBAAiB,GAAG;EACxB,QAAA,GAAG,EAAE,CADmB;EAExB,QAAA,IAAI,EAAE,EAFkB;EAGxB,QAAA,MAAM,EAAE,EAHgB;EAIxB,QAAA,MAAM,EAAE,EAJgB;EAKxB,QAAA,WAAW,EAAE,IALW;EAMxB,QAAA,WAAW,EAAE,IANW;EAOxB,QAAA,UAAU,EAAE;EAPY,OAA1B;EASA,UAAM,iBAAiB,GAAGC,2BAAA,CAA+B,OAA/B,EAAwC,iBAAiB,CAAC,YAAD,CAAzD,EAAyE,KAAzE,CAA1B,CAlBoC;;EAqBpC,UAAM,EAAE,GAAG,QAAQ,CAAC,IAAD,CAAnB;EACA,UAAI,IAAI,GAAG,OAAO,CAAC,EAAD,EAAK,QAAL,CAAlB;EACA,UAAI,KAAK,GAAG,OAAO,CAAC,EAAD,EAAK,SAAL,CAAnB;EACA,UAAI,GAAG,GAAG,OAAO,CAAC,EAAD,EAAK,OAAL,CAAjB;EACA,UAAI,IAAI,GAAG,OAAO,CAAC,EAAD,EAAK,QAAL,CAAlB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,EAAD,EAAK,UAAL,CAApB;EACA,UAAI,MAAM,GAAG,OAAO,CAAC,EAAD,EAAK,UAAL,CAApB;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,EAAD,EAAK,eAAL,CAAzB;EACA,UAAI,WAAW,GAAG,OAAO,CAAC,EAAD,EAAK,eAAL,CAAzB;EACA,UAAI,UAAU,GAAG,OAAO,CAAC,EAAD,EAAK,cAAL,CAAxB;EAEA,UAAM,QAAQ,GAAG,YAAY,CAAC,0BAAD,CAA7B;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxB;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,OAAO,GAAG,IAAI,QAAJ,CAAa,OAAO,CAAC,EAAD,EAAK,QAAL,CAApB,EAAoC,OAAO,CAAC,EAAD,EAAK,SAAL,CAA3C,EAA4D,OAAO,CAAC,EAAD,EAAK,OAAL,CAAnE,EAAkF,CAAlF,EAAqF,CAArF,EAAwF,CAAxF,EAA2F,CAA3F,EAA8F,CAA9F,EAAiG,CAAjG,CAAhB;EACA,UAAM,YAAY,GAAGb,4BAAA,CAAgC,QAAhC,EAA0C,OAA1C,EAAmD,YAAnD,CAArB;EACA,UAAM,KAAK,GAAG4I,gBAAA,CAAoB,YAApB,EAAkC,QAAlC,EAA4C,QAA5C,EAAsD,CAAtD,EAAyD,CAAzD,EAA4D,CAA5D,EAA+D,CAA/D,EAAkE,CAAlE,EAAqE,CAArE,EAAwE,CAAxE,EAA2E,CAA3E,EAA8E,CAA9E,EAAiF,CAAjF,CAAd;EACA,UAAM,WAAW,GAAG,IAAI,CAAC,QAAL,CAAc,KAAd,EAAqB,IAAI,CAAC,MAAL,CAAY,OAAO,CAAC,YAAD,EAAe,gBAAf,CAAnB,CAArB,CAApB;;EACA,UAAI,IAAI,CAAC,KAAL,CAAW,WAAX,EAAwB,IAAxB,CAAJ,EAAmC;EACjC,cAAM,IAAI,UAAJ,CAAe,kEAAf,CAAN;EACD;;EAzCmC,iCA0CgD1D,gBAAA,CAClF,IADkF,EAElF,KAFkF,EAGlF,GAHkF,EAIlF,IAJkF,EAKlF,MALkF,EAMlF,MANkF,EAOlF,WAPkF,EAQlF,WARkF,EASlF,UATkF,EAUlF,iBAVkF,EAWlF,YAXkF,EAYlF,YAZkF;EAclF;EACA,MAAA,IAAI,CAAC,QAAL,CAAc,WAAd,CAfkF,CA1ChD;;EA0CjC,MAAA,IA1CiC,wBA0CjC,IA1CiC;EA0C3B,MAAA,KA1C2B,wBA0C3B,KA1C2B;EA0CpB,MAAA,GA1CoB,wBA0CpB,GA1CoB;EA0Cf,MAAA,IA1Ce,wBA0Cf,IA1Ce;EA0CT,MAAA,MA1CS,wBA0CT,MA1CS;EA0CD,MAAA,MA1CC,wBA0CD,MA1CC;EA0CO,MAAA,WA1CP,wBA0CO,WA1CP;EA0CoB,MAAA,WA1CpB,wBA0CoB,WA1CpB;EA0CiC,MAAA,UA1CjC,wBA0CiC,UA1CjC;EA4DpC;EACA;EACA;EACA;EACA;EACA,UAAM,QAAQ,GAAGoD,uBAAA,CAA2B,QAA3B,EAAqC,OAAO,CAAC,IAAD,EAAO,OAAP,CAA5C,CAAjB;EACA,UAAM,gBAAgB,GAAGG,0BAAA,CACvB,IADuB,EAEvB,KAFuB,EAGvB,GAHuB,EAIvB,IAJuB,EAKvB,MALuB,EAMvB,MANuB,EAOvB,WAPuB,EAQvB,WARuB,EASvB,UATuB,EAUvB,QAVuB,EAWvB,QAXuB,EAYvB,QAZuB,EAavB,YAbuB,EAcvB,QAduB;EAevB;EAAoB,WAfG,CAAzB;EAkBA,aAAOtH,2BAAA,CAA+B,gBAA/B,EAAiD,QAAjD,EAA2D,OAAO,CAAC,IAAD,EAAO,QAAP,CAAlE,CAAP;EACD;EApYH;EAAA;EAAA,WAqYE,gBAAO,UAAP,EAAsC;EACpC,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,KAAK,GAAGiJ,uBAAA,CAA2B,UAA3B,CAAd;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,IAAD,EAAO,gBAAP,CAAnB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,KAAD,EAAQ,gBAAR,CAAnB;EACA,UAAI,CAAC,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAX,EAA6B,IAAI,CAAC,MAAL,CAAY,GAAZ,CAA7B,CAAL,EAAqD,OAAO,KAAP;EACrD,UAAI,CAACC,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,SAAP,CAAzB,EAA4C,OAAO,CAAC,KAAD,EAAQ,SAAR,CAAnD,CAAL,EAA6E,OAAO,KAAP;EAC7E,aAAOxE,cAAA,CAAkB,OAAO,CAAC,IAAD,EAAO,QAAP,CAAzB,EAA2C,OAAO,CAAC,KAAD,EAAQ,QAAR,CAAlD,CAAP;EACD;EA7YH;EAAA;EAAA,WA8YE,oBAAwD;EAAA,UAA/C,YAA+C,uEAAT,SAAS;EACtD,UAAI,CAAC1E,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,OAAO,GAAGa,gBAAA,CAAoB,YAApB,CAAhB;;EACA,kCAAuCO,wBAAA,CAA4B,OAA5B,CAAvC;EAAA,UAAQ,SAAR,yBAAQ,SAAR;EAAA,UAAmB,IAAnB,yBAAmB,IAAnB;EAAA,UAAyB,SAAzB,yBAAyB,SAAzB;;EACA,UAAM,YAAY,GAAGJ,sBAAA,CAA0B,OAA1B,EAAmC,OAAnC,CAArB;EACA,UAAM,YAAY,GAAG2D,oBAAA,CAAwB,OAAxB,CAArB;EACA,UAAM,YAAY,GAAGwE,wBAAA,CAA4B,OAA5B,CAArB;EACA,UAAM,UAAU,GAAGC,kBAAA,CAAsB,OAAtB,CAAnB;EACA,aAAOC,6BAAA,CAAiC,IAAjC,EAAuC,SAAvC,EAAkD,YAAlD,EAAgE,YAAhE,EAA8E,UAA9E,EAA0F;EAC/F,QAAA,IAAI,EAAJ,IAD+F;EAE/F,QAAA,SAAS,EAAT,SAF+F;EAG/F,QAAA,YAAY,EAAZ;EAH+F,OAA1F,CAAP;EAKD;EA3ZH;EAAA;EAAA,WA4ZE,0BAEkD;EAAA,UADhD,OACgD,uEADT,SACS;EAAA,UAAhD,OAAgD,uEAAT,SAAS;EAEhD,UAAI,CAACrJ,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,IAAI,cAAJ,CAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAArC,CAA4C,IAA5C,CAAP;EACD;EAlaH;EAAA;EAAA,WAmaE,kBAAM;EACJ,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAOqJ,6BAAA,CAAiC,IAAjC,EAAuC,MAAvC,CAAP;EACD;EAtaH;EAAA;EAAA,WAuaE,mBAAO;EACL,YAAM,IAAI,SAAJ,CAAc,6DAAd,CAAN;EACD;EAzaH;EAAA;EAAA,WA0aE,sBAAU;EACR,UAAI,CAACrJ,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,EAAE,GAAG,QAAQ,CAAC,IAAD,CAAnB;EACA,UAAM,QAAQ,GAAG,YAAY,CAAC,0BAAD,CAA7B;EACA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,OAAO,GAAG,IAAI,QAAJ,CACd,OAAO,CAAC,EAAD,EAAK,QAAL,CADO,EAEd,OAAO,CAAC,EAAD,EAAK,SAAL,CAFO,EAGd,OAAO,CAAC,EAAD,EAAK,OAAL,CAHO,EAId,CAJc,EAKd,CALc,EAMd,CANc,EAOd,CAPc,EAQd,CARc,EASd,CATc,EAUd,QAVc,CAAhB;EAYA,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAxB;EACA,UAAM,OAAO,GAAGI,4BAAA,CAAgC,QAAhC,EAA0C,OAA1C,EAAmD,YAAnD,CAAhB;EACA,aAAOmB,2BAAA,CAA+B,OAAO,CAAC,OAAD,EAAU,gBAAV,CAAtC,EAAmE,QAAnE,EAA6E,QAA7E,CAAP;EACD;EA9bH;EAAA;EAAA,WA+bE,qBAAS;EACP,UAAI,CAACvB,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,eAAe,GAAG,YAAY,CAAC,oBAAD,CAApC;EACA,aAAO,IAAI,eAAJ,CAAoB,OAAO,CAAC,IAAD,EAAO,gBAAP,CAA3B,CAAP;EACD;EAncH;EAAA;EAAA,WAocE,uBAAW;EACT,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO0F,sBAAA,CAA0B,QAAQ,CAAC,IAAD,CAAlC,CAAP;EACD;EAvcH;EAAA;EAAA,WAwcE,uBAAW;EACT,UAAI,CAAC1F,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO2F,sBAAA,CAA0B,QAAQ,CAAC,IAAD,CAAlC,CAAP;EACD;EA3cH;EAAA;EAAA,WA4cE,2BAAe;EACb,UAAI,CAAC3F,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,aAAO,QAAQ,CAAC,IAAD,CAAf;EACD;EA/cH;EAAA;EAAA,WAgdE,4BAAgB;EACd,UAAI,CAACA,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGoE,cAAA,CAAkB,QAAlB,EAA4B,CAAC,WAAD,EAAc,MAAd,CAA5B,CAAnB;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAf;EACA,aAAO+C,2BAAA,CAA+B,QAA/B,EAAyC,MAAzC,CAAP;EACD;EAtdH;EAAA;EAAA,WAudE,2BAAe;EACb,UAAI,CAAC/E,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,QAAQ,GAAG,OAAO,CAAC,IAAD,EAAO,QAAP,CAAxB;EACA,UAAM,UAAU,GAAGoE,cAAA,CAAkB,QAAlB,EAA4B,CAAC,KAAD,EAAQ,WAAR,CAA5B,CAAnB;EACA,UAAM,MAAM,GAAGpC,qBAAA,CAAyB,IAAzB,EAA+B,UAA/B,EAA2C,EAA3C,CAAf;EACA,aAAOgD,0BAAA,CAA8B,QAA9B,EAAwC,MAAxC,CAAP;EACD;EA7dH;EAAA;EAAA,WA8dE,wBAAY;EACV,UAAI,CAAChF,uBAAA,CAA2B,IAA3B,CAAL,EAAuC,MAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;EACvC,UAAM,EAAE,GAAG,QAAQ,CAAC,IAAD,CAAnB;EACA,UAAM,EAAE,GAAG,OAAO,CAAC,IAAD,EAAO,SAAP,CAAlB;EACA,aAAO;EACL,QAAA,QAAQ,EAAE,OAAO,CAAC,IAAD,EAAO,QAAP,CADZ;EAEL,QAAA,MAAM,EAAE,OAAO,CAAC,EAAD,EAAK,OAAL,CAFV;EAGL,QAAA,OAAO,EAAE,OAAO,CAAC,EAAD,EAAK,QAAL,CAHX;EAIL,QAAA,cAAc,EAAE,OAAO,CAAC,EAAD,EAAK,eAAL,CAJlB;EAKL,QAAA,cAAc,EAAE,OAAO,CAAC,EAAD,EAAK,eAAL,CALlB;EAML,QAAA,SAAS,EAAE,OAAO,CAAC,EAAD,EAAK,UAAL,CANb;EAOL,QAAA,QAAQ,EAAE,OAAO,CAAC,EAAD,EAAK,SAAL,CAPZ;EAQL,QAAA,aAAa,EAAE,OAAO,CAAC,EAAD,EAAK,cAAL,CARjB;EASL,QAAA,SAAS,EAAE,OAAO,CAAC,EAAD,EAAK,UAAL,CATb;EAUL,QAAA,OAAO,EAAE,OAAO,CAAC,EAAD,EAAK,QAAL,CAVX;EAWL,QAAA,MAAM,EAAE+H,iCAAA,CAAqC,EAArC,EAAyC,OAAO,CAAC,IAAD,EAAO,OAAP,CAAhD,CAXH;EAYL,QAAA,QAAQ,EAAE;EAZL,OAAP;EAcD;EAhfH;EAAA;EAAA,WAifE,cAAY,IAAZ,EAAgF;EAAA,UAA3C,YAA2C,uEAAT,SAAS;EAC9E,UAAM,OAAO,GAAGlH,gBAAA,CAAoB,YAApB,CAAhB;;EACA,UAAIb,uBAAA,CAA2B,IAA3B,CAAJ,EAAsC;EACpC,QAAA8B,kBAAA,CAAsB,OAAtB,EADoC;;EAEpC,QAAA2D,wBAAA,CAA4B,OAA5B;EACA,QAAAkD,gBAAA,CAAoB,OAApB,EAA6B,QAA7B;EACA,eAAOpH,2BAAA,CACL,OAAO,CAAC,IAAD,EAAO,gBAAP,CADF,EAEL,OAAO,CAAC,IAAD,EAAO,SAAP,CAFF,EAGL,OAAO,CAAC,IAAD,EAAO,QAAP,CAHF,CAAP;EAKD;;EACD,aAAO0H,uBAAA,CAA2B,IAA3B,EAAiC,OAAjC,CAAP;EACD;EA9fH;EAAA;EAAA,WA+fE,iBAAe,QAAf,EAA+C,QAA/C,EAA6E;EAC3E,UAAM,GAAG,GAAGA,uBAAA,CAA2B,QAA3B,CAAZ;EACA,UAAM,GAAG,GAAGA,uBAAA,CAA2B,QAA3B,CAAZ;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,gBAAN,CAAnB;EACA,UAAM,GAAG,GAAG,OAAO,CAAC,GAAD,EAAM,gBAAN,CAAnB;EACA,UAAI,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAd,EAAgC,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAhC,CAAJ,EAAuD,OAAO,CAAC,CAAR;EACvD,UAAI,IAAI,CAAC,WAAL,CAAiB,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAjB,EAAmC,IAAI,CAAC,MAAL,CAAY,GAAZ,CAAnC,CAAJ,EAA0D,OAAO,CAAP;EAC1D,aAAO,CAAP;EACD;EAvgBH;;EAAA;EAAA;EA2gBA,kBAAkB,CAAC,aAAD,EAAgB,wBAAhB,CAAlB;;EAEA,SAAS,QAAT,CAAkB,GAAlB,EAA6C;EAC3C,SAAOhC,kCAAA,CAAsC,OAAO,CAAC,GAAD,EAAM,SAAN,CAA7C,EAA+D,OAAO,CAAC,GAAD,EAAM,OAAN,CAAtE,EAAsF,OAAO,CAAC,GAAD,EAAM,QAAN,CAA7F,CAAP;EACD;;;;;;;;;;;;;;;;;ECliBK,SAAU,iBAAV,GAA2B;EAC/B;EACA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAL,CAAc,IAAI,CAAC,MAAL,CAAY,CAAC,IAAb,CAAd,EAAkC,OAAlC,CAAzB;EACA,SAAO,IAAI,OAAJ,CAAY3G,QAAA,CAAY,gBAAZ,CAAZ,CAAP;EACD;;ECVD;;EAYA,IAAM,KAAK,GAAG,CACZgJ,OADY,EAEZC,QAFY,EAGZC,SAHY,EAIZC,aAJY,EAKZC,QALY,EAMZC,aANY;AAQZC,WARY,EASZC,QATY,EAUZC,cAVY,EAWZC,aAXY,CAAd;;EAaA,0BAAmB,KAAnB,4BAA0B;EAArB,MAAM,IAAI,aAAV;EACH,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAP,CAAgC,IAAhC,EAAsC,WAAtC,CAAnB;;EACA,MAAI,UAAU,CAAC,YAAX,IAA2B,UAAU,CAAC,UAAtC,IAAoD,UAAU,CAAC,QAAnE,EAA6E;EAC3E,IAAA,UAAU,CAAC,YAAX,GAA0B,KAA1B;EACA,IAAA,UAAU,CAAC,UAAX,GAAwB,KAAxB;EACA,IAAA,UAAU,CAAC,QAAX,GAAsB,KAAtB;EACA,IAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,WAA5B,EAAyC,UAAzC;EACD;EACF;;;;;;;;;;;;"} +\ No newline at end of file diff --git a/src/context-selection/period-selector-bar-item/use-date-limit.test.js b/src/context-selection/period-selector-bar-item/use-date-limit.test.js index f0212b1ecc..6fc5511e04 100644 --- a/src/context-selection/period-selector-bar-item/use-date-limit.test.js +++ b/src/context-selection/period-selector-bar-item/use-date-limit.test.js @@ -386,55 +386,55 @@ describe('useDateLimit (time zones)', () => { }) }) -// describe.each([ -// ['2017-13-03', reversedPeriodTypesMapping.DAILY, 0, '2017-13-03'], -// ['2017-02-30', reversedPeriodTypesMapping.DAILY, 0, '2017-02-30'], -// ['2017-02-30', reversedPeriodTypesMapping.WEEKLY, 0, '2017-02-26'], -// ['2017-13-02', reversedPeriodTypesMapping.WEEKLY, 0, '2017-12-27'], -// ['2017-01-01', reversedPeriodTypesMapping.MONTHLY, 0, '2017-01-01'], -// ['2017-02-30', reversedPeriodTypesMapping.MONTHLY, 0, '2017-02-01'], -// ['2017-13-03', reversedPeriodTypesMapping.DAILY, 4, '2018-01-02'], -// ['2017-02-30', reversedPeriodTypesMapping.DAILY, 10, '2017-03-10'], -// ['2017-02-30', reversedPeriodTypesMapping.WEEKLY, 3, '2017-03-17'], -// ['2017-13-02', reversedPeriodTypesMapping.WEEKLY, 13, '2018-03-23'], -// ['2017-01-01', reversedPeriodTypesMapping.MONTHLY, 5, '2017-06-01'], -// ['2017-02-30', reversedPeriodTypesMapping.MONTHLY, 15, '2018-05-01'], -// ])( -// 'useDateLimit (ethiopian calendar)', -// // eslint-disable-next-line max-params -// (currentDate, periodType, openFuturePeriods, expectedDate) => { -// beforeEach(() => { -// useConfig.mockImplementation(() => ({ -// systemInfo: { calendar: 'ethiopian', timeZone: 'Etc/UTC' }, -// })) -// }) - -// afterEach(() => { -// jest.clearAllMocks() -// }) - -// it(`should be ${expectedDate} if current date: ${currentDate}, periodType: ${periodType}, openFuturePeriods: ${openFuturePeriods}`, () => { -// jest.spyOn( -// getNowInCalendarFunctions, -// 'getNowInCalendarString' -// ).mockImplementation(() => currentDate) -// useMetadata.mockImplementationOnce(() => ({ -// data: { -// dataSets: { -// dataSetId: { -// id: 'dataSetId', -// periodType, -// openFuturePeriods, -// }, -// }, -// }, -// })) - -// const { result } = renderHook(() => useDateLimit()) -// expect(result.current).toEqual(expectedDate) -// }) -// } -// ) +describe.each([ + ['2017-13-03', reversedPeriodTypesMapping.DAILY, 0, '2017-13-03'], + ['2017-02-30', reversedPeriodTypesMapping.DAILY, 0, '2017-02-30'], + ['2017-02-30', reversedPeriodTypesMapping.WEEKLY, 0, '2017-02-26'], + ['2017-13-02', reversedPeriodTypesMapping.WEEKLY, 0, '2017-12-27'], + ['2017-01-01', reversedPeriodTypesMapping.MONTHLY, 0, '2017-01-01'], + ['2017-02-30', reversedPeriodTypesMapping.MONTHLY, 0, '2017-02-01'], + ['2017-13-03', reversedPeriodTypesMapping.DAILY, 4, '2018-01-02'], + ['2017-02-30', reversedPeriodTypesMapping.DAILY, 10, '2017-03-10'], + ['2017-02-30', reversedPeriodTypesMapping.WEEKLY, 3, '2017-03-17'], + ['2017-13-02', reversedPeriodTypesMapping.WEEKLY, 13, '2018-03-23'], + ['2017-01-01', reversedPeriodTypesMapping.MONTHLY, 5, '2017-06-01'], + ['2017-02-30', reversedPeriodTypesMapping.MONTHLY, 15, '2018-05-01'], +])( + 'useDateLimit (ethiopian calendar)', + // eslint-disable-next-line max-params + (currentDate, periodType, openFuturePeriods, expectedDate) => { + beforeEach(() => { + useConfig.mockImplementation(() => ({ + systemInfo: { calendar: 'ethiopian', timeZone: 'Etc/UTC' }, + })) + }) + + afterEach(() => { + jest.clearAllMocks() + }) + + it(`should be ${expectedDate} if current date: ${currentDate}, periodType: ${periodType}, openFuturePeriods: ${openFuturePeriods}`, () => { + jest.spyOn( + getNowInCalendarFunctions, + 'getNowInCalendarString' + ).mockImplementation(() => currentDate) + useMetadata.mockImplementationOnce(() => ({ + data: { + dataSets: { + dataSetId: { + id: 'dataSetId', + periodType, + openFuturePeriods, + }, + }, + }, + })) + + const { result } = renderHook(() => useDateLimit()) + expect(result.current).toEqual(expectedDate) + }) + } +) describe.each([ ['2076-04-32', reversedPeriodTypesMapping.DAILY, 0, '2076-04-32'], diff --git a/src/context-selection/period-selector-bar-item/use-periods.test.js b/src/context-selection/period-selector-bar-item/use-periods.test.js index 6d6acc2c87..3050af6028 100644 --- a/src/context-selection/period-selector-bar-item/use-periods.test.js +++ b/src/context-selection/period-selector-bar-item/use-periods.test.js @@ -17,7 +17,10 @@ jest.mock('../../shared/use-user-info/use-user-info.js', () => ({ })), })) -describe('usePeriods', () => { +/** + * skipping until https://dhis2.atlassian.net/browse/LIBS-763 is done + */ +describe.skip('usePeriods', () => { const actualSystemTime = new Date() jest.useFakeTimers() @@ -288,6 +291,9 @@ describe('usePeriods', () => { }) }) +/** + * skipping until https://dhis2.atlassian.net/browse/LIBS-763 is done + */ describe.skip('usePeriods (ethiopian)', () => { beforeEach(() => { jest.useFakeTimers('modern') @@ -433,7 +439,10 @@ describe.skip('usePeriods (ethiopian)', () => { }) }) -describe('usePeriods (nepali)', () => { +/** + * skipping until https://dhis2.atlassian.net/browse/LIBS-763 is done + */ +describe.skip('usePeriods (nepali)', () => { beforeEach(() => { jest.useFakeTimers('modern') jest.setSystemTime(new Date('2024-07-15T12:00:00').getTime()) diff --git a/src/data-workspace/data-details-sidebar/audit-log.test.jsx b/src/data-workspace/data-details-sidebar/audit-log.test.jsx index 7b8def7e30..af16d98559 100644 --- a/src/data-workspace/data-details-sidebar/audit-log.test.jsx +++ b/src/data-workspace/data-details-sidebar/audit-log.test.jsx @@ -164,7 +164,7 @@ describe('', () => { ).toBeInTheDocument() }) - it.skip('renders the date/datetime values in system calendar (ethiopian)', async () => { + it('renders the date/datetime values in system calendar (ethiopian)', async () => { useConfig.mockImplementation(() => ({ systemInfo: { calendar: 'ethiopian', diff --git a/src/data-workspace/inputs/date-input.test.jsx b/src/data-workspace/inputs/date-input.test.jsx index d17c6e8a6d..1b91e12ed1 100644 --- a/src/data-workspace/inputs/date-input.test.jsx +++ b/src/data-workspace/inputs/date-input.test.jsx @@ -24,7 +24,10 @@ jest.mock('@dhis2/app-runtime', () => { const DE = 'rkAZZFGFEQ7' const COC = 'HllvX50cXC0' -describe('date input field', () => { +/** + * skipping until https://dhis2.atlassian.net/browse/LIBS-763 is done + */ +describe.skip('date input field', () => { const props = { cocId: COC, deId: DE, @@ -105,7 +108,7 @@ describe('date input field', () => { expect(calendarInput.value).toBe('') }) - it('allows user to navigate calendar component', async () => { + it.skip('allows user to navigate calendar component', async () => { useConfig.mockReturnValue({ systemInfo: { calendar: 'gregorian' }, }) @@ -202,7 +205,7 @@ describe('date input field', () => { expect(calendarInput.value).toBe('2078-01-09') }) - it.skip('renders system set calendar, i.e. ethiopian', async () => { + it('renders system set calendar, i.e. ethiopian', async () => { useConfig.mockReturnValue({ systemInfo: { calendar: 'ethiopian' }, }) @@ -223,7 +226,7 @@ describe('date input field', () => { expect(mutate.mock.calls[0][0]).toHaveProperty('value', '2024-07-25') }) - it.skip('populates the ethiopian equivalent of the persisted ISO date', async () => { + it('populates the ethiopian equivalent of the persisted ISO date', async () => { jest.setSystemTime(new Date('2024-07-25T09:05:00.000Z')) useConfig.mockReturnValue({ diff --git a/src/data-workspace/inputs/datetime-input.test.jsx b/src/data-workspace/inputs/datetime-input.test.jsx index 27a9f7f0ec..9b5fcb750e 100644 --- a/src/data-workspace/inputs/datetime-input.test.jsx +++ b/src/data-workspace/inputs/datetime-input.test.jsx @@ -205,7 +205,7 @@ describe('date input field', () => { expect(mutate.mock.calls[0][0]).toHaveProperty('value', '') }) - it.skip('posts ISO date to backend with ethiopian calendar', async () => { + it('posts ISO date to backend with ethiopian calendar', async () => { // this is 2016-02-30 Ethopian jest.setSystemTime(new Date('2023-11-10T09:05:00.000Z')) const user = userEvent.setup({ delay: null }) @@ -259,7 +259,7 @@ describe('date input field', () => { ) }) - it.skip('populates the ethiopian equivalent of the persisted ISO date', async () => { + it('populates the ethiopian equivalent of the persisted ISO date', async () => { jest.setSystemTime(new Date('2024-07-25T09:05:00.000Z')) useConfig.mockReturnValue({ @@ -335,7 +335,7 @@ describe('date input field', () => { systemInfo: { calendar: 'nepali' }, }) - // 2021-04-22 ISO = 2078-01-09 nepali + // 2021-04-22 ISO = 2078-01-09 ethiopian const { getByRole, getByTestId } = render( ) diff --git a/src/shared/date/date-text.test.jsx b/src/shared/date/date-text.test.jsx index e28b415ace..b7d0ee8957 100644 --- a/src/shared/date/date-text.test.jsx +++ b/src/shared/date/date-text.test.jsx @@ -76,30 +76,30 @@ describe('DateText', () => { null, '2024-10-14 19:10', ], - // [ - // '2024-10-14T19:10:57.836', - // 'yyyy-mm-dd', - // 'ethiopian', - // 'Etc/UTC', - // false, - // '2017-02-04 19:10', - // ], - // [ - // '2024-10-14T19:10:57.836', - // 'yyyy-mm-dd', - // 'ethiopian', - // 'Africa/Addis_Ababa', - // false, - // '2017-02-04 16:10', - // ], - // [ - // '2024-10-14T19:10:57.836', - // 'yyyy-mm-dd', - // 'ethiopian', - // 'Africa/Addis_Ababa', - // true, - // '2017-02-04 16:10 (UTC)', - // ], + [ + '2024-10-14T19:10:57.836', + 'yyyy-mm-dd', + 'ethiopian', + 'Etc/UTC', + false, + '2017-02-04 19:10', + ], + [ + '2024-10-14T19:10:57.836', + 'yyyy-mm-dd', + 'ethiopian', + 'Africa/Addis_Ababa', + false, + '2017-02-04 16:10', + ], + [ + '2024-10-14T19:10:57.836', + 'yyyy-mm-dd', + 'ethiopian', + 'Africa/Addis_Ababa', + true, + '2017-02-04 16:10 (UTC)', + ], [ '2024-10-14T19:10:57.836', 'yyyy-mm-dd', diff --git a/src/shared/date/date-utils.test.js b/src/shared/date/date-utils.test.js index 4c8d53ee7d..7b37bd3a5a 100644 --- a/src/shared/date/date-utils.test.js +++ b/src/shared/date/date-utils.test.js @@ -100,7 +100,7 @@ describe('isDateALessThanDateB (nepali)', () => { }) }) -describe.skip('isDateALessThanDateB (ethiopian)', () => { +describe('isDateALessThanDateB (ethiopian)', () => { beforeEach(() => { jest.spyOn(console, 'error').mockImplementation(jest.fn()) }) @@ -142,7 +142,7 @@ describe.skip('isDateALessThanDateB (ethiopian)', () => { }) }) -describe.skip('isDateALessThanDateB (mixed calendars)', () => { +describe('isDateALessThanDateB (mixed calendars)', () => { beforeEach(() => { jest.spyOn(console, 'error').mockImplementation(jest.fn()) }) @@ -280,7 +280,7 @@ describe('addDaysToDateString', () => { expect(result).toBe('2023-03-20T12:00:00') }) - it.skip('works with ethiopian calendar', () => { + it('works with ethiopian calendar', () => { const startDateString = '2016-02-30' const days = 5 const calendar = 'ethiopian' @@ -315,7 +315,7 @@ describe('getRelativeTime', () => { jest.useRealTimers() }) - it.skip('works with ethiopian calendar', () => { + it('works with ethiopian calendar', () => { // 2024-06-15 Ethiopian = 2032-02-23 (i.e. in 8 years) const startDate = '2024-06-15T13:00:00' const calendar = 'ethiopian' diff --git a/src/shared/date/get-now-in-calendar.test.js b/src/shared/date/get-now-in-calendar.test.js index 011e336b80..a005a94054 100644 --- a/src/shared/date/get-now-in-calendar.test.js +++ b/src/shared/date/get-now-in-calendar.test.js @@ -43,7 +43,7 @@ describe('getNowInCalendarString', () => { expect(result).toBe('2081-03-01T12:00:00') }) - it.skip('handles ethiopian calendar', () => { + it('handles ethiopian calendar', () => { const long = true const calendar = 'ethiopian' const result = getNowInCalendarString({ long, calendar }) diff --git a/src/shared/locked-status/use-check-lock-status.test.js b/src/shared/locked-status/use-check-lock-status.test.js index 53e7e1111b..15d8ab27fd 100644 --- a/src/shared/locked-status/use-check-lock-status.test.js +++ b/src/shared/locked-status/use-check-lock-status.test.js @@ -134,7 +134,7 @@ describe('useCheckLockStatus', () => { }) }) - it.skip('locks if org unit closes before period ends (ethiopian calendar)', () => { + it('locks if org unit closes before period ends (ethiopian calendar)', () => { const setLockedStatusMocked = jest.fn() jest.spyOn( useLockedContextModule, @@ -481,7 +481,7 @@ describe('useCheckLockStatus', () => { // this test confirms that we do not have functionality to add days to non-gregory days // i.e., we'd like this test to fail eventually when we add ability to add days to non-gregory dates - it.skip('does not set lockDate based on expiry days if calendar is non-gregory ', () => { + it('does not set lockDate based on expiry days if calendar is non-gregory ', () => { jest.useFakeTimers('modern') jest.setSystemTime(new Date('2024-02-04')) useConfig.mockImplementationOnce(() => ({ diff --git a/yarn.lock b/yarn.lock index ae3c3240f3..0acbb1f7c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5220,7 +5220,7 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: +ci-info@^3.2.0, ci-info@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== @@ -7254,6 +7254,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -8401,6 +8408,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-accessor-descriptor "^1.0.1" is-data-descriptor "^1.0.1" +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -8706,6 +8718,13 @@ is-windows@^1.0.1, is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" @@ -9378,6 +9397,17 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stable-stringify@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz#8903cfac42ea1a0f97f35d63a4ce0518f0cc6a70" + integrity sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -9411,6 +9441,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -9491,6 +9526,13 @@ kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + known-css-properties@^0.35.0: version "0.35.0" resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.35.0.tgz#f6f8e40ab4e5700fa32f5b2ef5218a56bc853bd6" @@ -9878,7 +9920,7 @@ micromatch@^3.1.10: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -10355,6 +10397,14 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -10527,6 +10577,26 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== +patch-package@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.1.tgz#79d02f953f711e06d1f8949c8a13e5d3d7ba1a60" + integrity sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^10.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.2.4" + yaml "^2.2.2" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -10749,6 +10819,11 @@ postcss@^8.4.33, postcss@^8.4.38, postcss@^8.4.43, postcss@^8.5.3: picocolors "^1.1.1" source-map-js "^1.2.1" +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -11818,6 +11893,11 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -12647,6 +12727,11 @@ tmp@^0.2.1, tmp@~0.2.1: resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== +tmp@^0.2.4: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -13790,6 +13875,11 @@ yaml@1.10.2, yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.2.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.3.tgz#a0d6bd2efb3dd03c59370223701834e60409bd7d" + integrity sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg== + yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"