├── .github └── workflows │ ├── branches.yml │ └── master.yml ├── .gitignore ├── .yarn ├── plugins │ └── @yarnpkg │ │ └── plugin-interactive-tools.cjs └── releases │ └── yarn-3.2.4.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── assets └── logo.svg ├── index.d.ts ├── lib ├── add.d.ts ├── conditional.d.ts ├── extends.d.ts ├── falsy.d.ts ├── fill.d.ts ├── first.d.ts ├── greater-than.d.ts ├── is.d.ts ├── larger-than.d.ts ├── last.d.ts ├── length-of.d.ts ├── logic.d.ts ├── mul.d.ts ├── not.d.ts ├── optional.d.ts ├── overwrite.d.ts ├── rest.d.ts ├── reverse-rest.d.ts ├── reverse.d.ts ├── same-length.d.ts ├── shift.d.ts ├── slice.d.ts ├── sub.d.ts ├── truncate.d.ts └── union.d.ts ├── package.json ├── tests ├── add.ts ├── fill.ts ├── greater-than.ts ├── index.d.ts ├── slice.ts ├── tsconfig.json └── tslint.json ├── tsconfig.json ├── tsconfig.prod.json └── yarn.lock /.github/workflows/branches.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Branches 5 | 6 | on: 7 | push: 8 | branches-ignore: 9 | - master 10 | 11 | jobs: 12 | build: 13 | name: Build 14 | runs-on: ubuntu-latest 15 | 16 | strategy: 17 | matrix: 18 | node-version: 19 | - 14.x 20 | - 16.x 21 | - 18.x 22 | - 19.x 23 | steps: 24 | - uses: actions/checkout@v2 25 | - name: Use Node.js ${{ matrix.node-version }} 26 | uses: actions/setup-node@v1 27 | with: 28 | node-version: ${{ matrix.node-version }} 29 | - run: yarn 30 | - run: yarn build 31 | - run: yarn test 32 | env: 33 | CI: true 34 | -------------------------------------------------------------------------------- /.github/workflows/master.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Master 5 | 6 | on: 7 | push: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | name: Build 14 | runs-on: ubuntu-latest 15 | strategy: 16 | matrix: 17 | node-version: 18 | - 14.x 19 | - 16.x 20 | - 18.x 21 | - 19.x 22 | steps: 23 | - uses: actions/checkout@v2 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v1 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | - run: yarn 29 | - run: yarn build 30 | - run: yarn test 31 | env: 32 | CI: true 33 | 34 | release: 35 | name: Release 36 | runs-on: ubuntu-latest 37 | needs: build 38 | steps: 39 | - name: Checkout 40 | uses: actions/checkout@v1 41 | - name: Setup Node.js 42 | uses: actions/setup-node@v1 43 | with: 44 | node-version: 18 45 | - run: yarn 46 | - run: yarn build 47 | - run: yarn test 48 | env: 49 | CI: true 50 | - name: Release 51 | env: 52 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 53 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 54 | run: npx semantic-release 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | dist 4 | yarn-* 5 | .yarn/ 6 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | plugins: 4 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs 5 | spec: "@yarnpkg/plugin-interactive-tools" 6 | 7 | yarnPath: .yarn/releases/yarn-3.2.4.cjs 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2021 Gustaf Räntilä 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![npm version][npm-image]][npm-url] 2 | [![downloads][downloads-image]][npm-url] 3 | 4 | 5 | 6 | # API 7 | 8 | ## Contents 9 | 10 | - [Arithmetics](#arithmetics) 11 | - [`Add` adding numbers](#add) 12 | - [`Sub` subtracting numbers](#sub) 13 | - [`Mul` multiplying numbers](#mul) 14 | - [Conditionals and comparisons](#conditionals-and-comparisons) 15 | - [`If` Conditionals](#conditional) 16 | - [`Extends` Type extends](#extends) 17 | - [`GreaterThan` greater-than comparison](#greaterthan) 18 | - [`Is< T, U >` compare equal types](#is) 19 | - [`IsFalsy< T >` is type falsy](#isfalsy) 20 | - [Logics](#logics) 21 | - [`And`, `Or`, `Xor` Logic (and, or, xor)](#logic-and-or-xor) 22 | - [`Not` logic invert](#not) 23 | - [Tuples](#tuples) 24 | - [`Fill` construct a tuple of size N](#fill) 25 | - [`First<...T>`, `Last<...T>` first and last tuple element](#first-last) 26 | - [`Rest<...R>`, `ReverseRest<...R>` all but the first / last](#rest-reverserest) 27 | - [`LargerThan<...T1, ...T2>`, `SameLength<...T1, ...T2>` tuple size comparison](#largerthan-samelength) 28 | - [`LengthOf<...T>` length of tuple](#lengthof) 29 | - [`Optional<...T1, ...T2>`, `OptionalFrom<...T, N>` make optional tuple elements](#optional) 30 | - [`Overwrite<...T1, ...T2>` overwrite one tuple with another](#overwrite) 31 | - [`Reverse<...T>` reverse the types in a tuple](#reverse) 32 | - [`Shift<...T, N>` remove the first N elements in a tuple](#shift) 33 | - [`Slice<...T, Start?, End?>` slice a tuple](#slice) 34 | - [`Truncate<...T, N>` truncate a tuple](#truncate) 35 | - [`UnionAll<...T1, T2>` union all tuple element types with a type](#union) 36 | 37 | 38 | ## Arithmetics 39 | 40 | The arithmetics in this library handles positive integers up to ~98, sometimes more. 41 | 42 | ### Add 43 | 44 | Add two positive numbers: 45 | 46 | ```ts 47 | import type { Add } from 'meta-types' 48 | type T = Add< 13, 11 >; // T is 24 49 | ``` 50 | 51 | 52 | ### Sub 53 | 54 | Subtract the second number from the first number: 55 | 56 | ```ts 57 | import type { Sub } from 'meta-types' 58 | type T = Sub< 13, 11 >; // T is 2 59 | ``` 60 | 61 | 62 | ### Mul 63 | 64 | Multiply two numbers: 65 | 66 | ```ts 67 | import type { Mul } from 'meta-types' 68 | type T = Mul< 13, 11 >; // T is 143 69 | ``` 70 | 71 | 72 | ## Conditionals and comparisons 73 | 74 | ### Conditional 75 | 76 | Return Then if If otherwise Else, or; if `If` then `Then` else `Else`. 77 | 78 | ```ts 79 | import type { If, Extends } from 'meta-types' 80 | type T1 = If< true, "yes", "no" >; // T1 is "yes" 81 | type T2 = If< false, "yes", "no" >; // T2 is "no" 82 | type T3 = If< Extends< "42", number >, "yes", "no" >; // T3 is "no", "42" doesn't extend number 83 | ``` 84 | 85 | 86 | ### Extends 87 | 88 | Returns true if `T` extends `E`, otherwise false. This is a trivial operation, but practical in meta functional statements, e.g. `If`. 89 | 90 | ```ts 91 | import type { Extends } from 'meta-types' 92 | type T1 = Extends< true, boolean >; // T1 is true; true extends boolean 93 | type T1 = Extends< "42", number >; // T2 is false; "42" doesn't extend number 94 | ``` 95 | 96 | 97 | ### GreaterThan 98 | 99 | `GreaterThan` returns true if the first number is greater than the second. 100 | 101 | A third argument can be set to `true`, to turn this into greater-than-or-equal. 102 | 103 | ```ts 104 | import type { GreaterThan } from 'meta-types' 105 | type T1 = GreaterThan< 42, 40 >; // T1 is true; 42 > 40 106 | type T2 = GreaterThan< 40, 40, true >; // T2 is true; 40 >= 40 107 | type T3 = GreaterThan< 40, 42 >; // T3 is false; 40 < 42 108 | ``` 109 | 110 | 111 | ### Is 112 | 113 | `Is` returns true for equal types. 114 | 115 | ```ts 116 | import type { Is } from 'meta-types' 117 | type T1 = Is< 42, number >; // T1 is false 118 | type T2 = Is< null, undefined >; // T2 is false 119 | type T3 = Is< "foo", "foo" >; // T3 is true 120 | ``` 121 | 122 | 123 | ### IsFalsy 124 | 125 | `IsFalsy` returns true for any falsy type (`false`, `""`, `0`, `null` and `undefined`). 126 | 127 | ```ts 128 | import type { IsFalsy } from 'meta-types' 129 | type T1 = IsFalsy< 0 >; // T1 is true 130 | type T2 = IsFalsy< 3 >; // T2 is false 131 | ``` 132 | 133 | 134 | ## Logics 135 | 136 | ### Logic (and, or, xor) 137 | 138 | `And`, `Or` and `Xor` can be used to perform logical operations on booleans. 139 | 140 | ```ts 141 | import type { And, Or, Xor } from 'meta-types' 142 | type T1 = And< true, false >; // T1 is false, {true && false} -> false 143 | type T2 = Or< true, false >; // T2 is true, {true || false} -> true 144 | type T2 = Xor< true, false >; // T3 is true, {true ^ false} -> true 145 | ``` 146 | 147 | 148 | ### Not 149 | 150 | Invert `true` or `false` using `Not`. 151 | 152 | ```ts 153 | import type { Not } from 'meta-types' 154 | type F = Not< true >; // F is false, !true 155 | type T = Not< false >; // T is true, !false 156 | ``` 157 | 158 | A second argument `Strict` can be provided, which defaults to `true`. If this is set to `false`, and [falsy](#isfalsy) type will return `true` instead of `never`. 159 | 160 | ```ts 161 | import type { Not } from 'meta-types' 162 | type F = Not< 0 >; // F is never, not exactly false 163 | type T = Not< 0, false >; // T is true, 0 is falsy 164 | ``` 165 | 166 | 167 | ## Tuples 168 | 169 | 170 | ### Fill 171 | 172 | Create a tuple of size `N`, filled with `any` (or type `T` if provided). 173 | 174 | ```ts 175 | import type { Fill } from 'meta-types' 176 | type T1 = Fill< 3 >; // T1 is [ any, any, any ] 177 | type T2 = Fill< 4, null >; // T2 is [ null, null, null, null ] 178 | ``` 179 | 180 | 181 | ### First, Last 182 | 183 | `First` and `Last` can be used to extract the first and last elements in a tuple. 184 | 185 | ```ts 186 | import type { First, Last } from 'meta-types' 187 | type T = [ "hello", 42, "world", true ]; 188 | type T1 = First< T >; // T1 is "hello" 189 | type T2 = Last< T >; // T2 is true 190 | ``` 191 | 192 | 193 | ### Rest, ReverseRest 194 | 195 | `Rest` and `ReverseRest` can be used to extract all-but-the-first or all-but-the-last elements in a tuple. 196 | 197 | ```ts 198 | import type { Rest, ReverseRest } from 'meta-types' 199 | type T = [ "hello", 42, "world", true ]; 200 | type T1 = Rest< T >; // T1 is [ 42, "world", true ] 201 | type T2 = ReverseRest< T >; // T2 is [ "hello", 42, "world" ] 202 | ``` 203 | 204 | 205 | ### LargerThan, SameLength 206 | 207 | `LargerThan` and `SameLength` can be used to extract and compare the length of tuples. A second argument can be provided to `LargerThan` to turn it into larger-than-or-same-length. 208 | 209 | ```ts 210 | import type { LargerThan, SameLength } from 'meta-types' 211 | type T1 = LargerThan< [ 0, 0 ], [ 0, 0, 0 ] >; // T1 is false, first length 2 < second length 3 212 | type T2 = SameLength< [ 0, 0 ], [ 0, 0 ] >; // T2 is true, length 2 === length 2 213 | type T3 = LargerThan< [ 0, 0 ], [ 0, 0 ], true >; // T3 is true, 2 >= 2 214 | ``` 215 | 216 | 217 | ### LengthOf 218 | 219 | `LengthOf` returns the length of a tuple, or a fallback type (defaults to `-1`) if the tuple is unbounded, i.e. it's rest-spread like `[ "foo", 42, ...null[] ]`. 220 | 221 | ```ts 222 | import type { LengthOf } from 'meta-types' 223 | type T1 = LengthOf< [ 0, 0 ] >; // T1 is 2 224 | type T2 = LengthOf< [ 0, 0, ...any ] >; // T2 is -1 225 | type T3 = LengthOf< [ 0, 0, ...any ], "ouch" >; // T3 is "ouch" 226 | ``` 227 | 228 | 229 | ### Optional 230 | 231 | Append an optional tuple to a *required* tuple. 232 | 233 | ```ts 234 | import type { Optional } from 'meta-types' 235 | type T = Optional< [ string, number ], [ boolean, any ] >; 236 | // T is: 237 | // | [ string, number ] 238 | // | [ string, number, boolean ] 239 | // | [ string, number, boolean, any ] 240 | ``` 241 | 242 | Turn all types after index N into optional. 243 | 244 | ```ts 245 | import type { OptionalFrom } from 'meta-types' 246 | type T = OptionalFrom< [ string, number, boolean, any ], 2 >; 247 | // T is: 248 | // | [ string, number ] 249 | // | [ string, number, boolean ] 250 | // | [ string, number, boolean, any ] 251 | ``` 252 | 253 | 254 | ### Overwrite 255 | 256 | Overwrite the first elements in a tuple, with elements from another tuple. The first tuple will be overwritten with types in the second tuple. 257 | 258 | ```ts 259 | import type { Overwrite } from 'meta-types' 260 | type T1 = Overwrite< [ 1, 2, 3 ], [ "a", "b" ] >; // T1 is [ "a", "b", 3 ] 261 | type T2 = Overwrite< [ 1, 2 ], [ "a", "b", "c" ] >; // T2 is [ "a", "b", "c" ] 262 | ``` 263 | 264 | 265 | ### Reverse 266 | 267 | Reverse a tuple. 268 | 269 | ```ts 270 | import type { Reverse } from 'meta-types' 271 | type T = Reverse< [ string, boolean, 42 ] >; // T is [ 42, boolean, string ] 272 | ``` 273 | 274 | 275 | ### Shift 276 | 277 | Shift (remove the first) N elements from a tuple. 278 | 279 | ```ts 280 | import type { Shift } from 'meta-types' 281 | type T = Shift< [ string, boolean, number, 42, "foo" ], 2 >; 282 | // T is [ number, 42, "foo" ] 283 | ``` 284 | 285 | 286 | ### Slice 287 | 288 | Slice a tuple with a start and end offset. 289 | 290 | ```ts 291 | import type { Slice } from 'meta-types' 292 | type T = Slice< [ string, boolean, number, 42, "foo" ], 2, 4 >; 293 | // T is [ number, 42 ] 294 | ``` 295 | 296 | 297 | ### Truncate 298 | 299 | Truncate a tuple to a max length. 300 | 301 | ```ts 302 | import type { Truncate } from 'meta-types' 303 | type T = Truncate< [ string, boolean, number, 42, "foo" ], 2 >; 304 | // T is [ string, boolean ] 305 | ``` 306 | 307 | 308 | ### Union 309 | 310 | Union all the types in a tuple, with a type. 311 | 312 | ```ts 313 | import type { UnionAll } from 'meta-types' 314 | type T = UnionAll< [ string, boolean, number ], U >; 315 | // T is [ string | U, boolean | U, number | U ] 316 | ``` 317 | 318 | 319 | 320 | [npm-image]: https://img.shields.io/npm/v/meta-types.svg 321 | [npm-url]: https://npmjs.org/package/meta-types 322 | [downloads-image]: https://img.shields.io/npm/dm/meta-types.svg 323 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/add' 2 | export * from './lib/conditional' 3 | export * from './lib/extends' 4 | export * from './lib/falsy' 5 | export * from './lib/fill' 6 | export * from './lib/first' 7 | export * from './lib/greater-than' 8 | export * from './lib/is' 9 | export * from './lib/larger-than' 10 | export * from './lib/last' 11 | export * from './lib/length-of' 12 | export * from './lib/logic' 13 | export * from './lib/not' 14 | export * from './lib/optional' 15 | export * from './lib/overwrite' 16 | export * from './lib/rest' 17 | export * from './lib/reverse-rest' 18 | export * from './lib/reverse' 19 | export * from './lib/shift' 20 | export * from './lib/slice' 21 | export * from './lib/truncate' 22 | export * from './lib/union' 23 | -------------------------------------------------------------------------------- /lib/add.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Add two numbers (each between -1 and 98) 3 | */ 4 | export type Add< A extends number, B extends number > = 5 | A extends keyof AddMap ? B extends keyof AddMap[ A ] ? AddMap[ A ][ B ] 6 | : never 7 | : never; 8 | 9 | type AddMap = { 10 | '-1': { '-1': -2; 0: -1; 1: 0; 2: 1; 3: 2; 4: 3; 5: 4; 6: 5; 7: 6; 8: 7; 9: 8; 10: 9; 11: 10; 12: 11; 13: 12; 14: 13; 15: 14; 16: 15; 17: 16; 18: 17; 19: 18; 20: 19; 21: 20; 22: 21; 23: 22; 24: 23; 25: 24; 26: 25; 27: 26; 28: 27; 29: 28; 30: 29; 31: 30; 32: 31; 33: 32; 34: 33; 35: 34; 36: 35; 37: 36; 38: 37; 39: 38; 40: 39; 41: 40; 42: 41; 43: 42; 44: 43; 45: 44; 46: 45; 47: 46; 48: 47; 49: 48; 50: 49; 51: 50; 52: 51; 53: 52; 54: 53; 55: 54; 56: 55; 57: 56; 58: 57; 59: 58; 60: 59; 61: 60; 62: 61; 63: 62; 64: 63; 65: 64; 66: 65; 67: 66; 68: 67; 69: 68; 70: 69; 71: 70; 72: 71; 73: 72; 74: 73; 75: 74; 76: 75; 77: 76; 78: 77; 79: 78; 80: 79; 81: 80; 82: 81; 83: 82; 84: 83; 85: 84; 86: 85; 87: 86; 88: 87; 89: 88; 90: 89; 91: 90; 92: 91; 93: 92; 94: 93; 95: 94; 96: 95; 97: 96; 98: 97; 99: 98; }; 11 | 0: { '-1': -1; 0: 0; 1: 1; 2: 2; 3: 3; 4: 4; 5: 5; 6: 6; 7: 7; 8: 8; 9: 9; 10: 10; 11: 11; 12: 12; 13: 13; 14: 14; 15: 15; 16: 16; 17: 17; 18: 18; 19: 19; 20: 20; 21: 21; 22: 22; 23: 23; 24: 24; 25: 25; 26: 26; 27: 27; 28: 28; 29: 29; 30: 30; 31: 31; 32: 32; 33: 33; 34: 34; 35: 35; 36: 36; 37: 37; 38: 38; 39: 39; 40: 40; 41: 41; 42: 42; 43: 43; 44: 44; 45: 45; 46: 46; 47: 47; 48: 48; 49: 49; 50: 50; 51: 51; 52: 52; 53: 53; 54: 54; 55: 55; 56: 56; 57: 57; 58: 58; 59: 59; 60: 60; 61: 61; 62: 62; 63: 63; 64: 64; 65: 65; 66: 66; 67: 67; 68: 68; 69: 69; 70: 70; 71: 71; 72: 72; 73: 73; 74: 74; 75: 75; 76: 76; 77: 77; 78: 78; 79: 79; 80: 80; 81: 81; 82: 82; 83: 83; 84: 84; 85: 85; 86: 86; 87: 87; 88: 88; 89: 89; 90: 90; 91: 91; 92: 92; 93: 93; 94: 94; 95: 95; 96: 96; 97: 97; 98: 98; 99: 99; }; 12 | 1: { '-1': 0; 0: 1; 1: 2; 2: 3; 3: 4; 4: 5; 5: 6; 6: 7; 7: 8; 8: 9; 9: 10; 10: 11; 11: 12; 12: 13; 13: 14; 14: 15; 15: 16; 16: 17; 17: 18; 18: 19; 19: 20; 20: 21; 21: 22; 22: 23; 23: 24; 24: 25; 25: 26; 26: 27; 27: 28; 28: 29; 29: 30; 30: 31; 31: 32; 32: 33; 33: 34; 34: 35; 35: 36; 36: 37; 37: 38; 38: 39; 39: 40; 40: 41; 41: 42; 42: 43; 43: 44; 44: 45; 45: 46; 46: 47; 47: 48; 48: 49; 49: 50; 50: 51; 51: 52; 52: 53; 53: 54; 54: 55; 55: 56; 56: 57; 57: 58; 58: 59; 59: 60; 60: 61; 61: 62; 62: 63; 63: 64; 64: 65; 65: 66; 66: 67; 67: 68; 68: 69; 69: 70; 70: 71; 71: 72; 72: 73; 73: 74; 74: 75; 75: 76; 76: 77; 77: 78; 78: 79; 79: 80; 80: 81; 81: 82; 82: 83; 83: 84; 84: 85; 85: 86; 86: 87; 87: 88; 88: 89; 89: 90; 90: 91; 91: 92; 92: 93; 93: 94; 94: 95; 95: 96; 96: 97; 97: 98; 98: 99; 99: 100; }; 13 | 2: { '-1': 1; 0: 2; 1: 3; 2: 4; 3: 5; 4: 6; 5: 7; 6: 8; 7: 9; 8: 10; 9: 11; 10: 12; 11: 13; 12: 14; 13: 15; 14: 16; 15: 17; 16: 18; 17: 19; 18: 20; 19: 21; 20: 22; 21: 23; 22: 24; 23: 25; 24: 26; 25: 27; 26: 28; 27: 29; 28: 30; 29: 31; 30: 32; 31: 33; 32: 34; 33: 35; 34: 36; 35: 37; 36: 38; 37: 39; 38: 40; 39: 41; 40: 42; 41: 43; 42: 44; 43: 45; 44: 46; 45: 47; 46: 48; 47: 49; 48: 50; 49: 51; 50: 52; 51: 53; 52: 54; 53: 55; 54: 56; 55: 57; 56: 58; 57: 59; 58: 60; 59: 61; 60: 62; 61: 63; 62: 64; 63: 65; 64: 66; 65: 67; 66: 68; 67: 69; 68: 70; 69: 71; 70: 72; 71: 73; 72: 74; 73: 75; 74: 76; 75: 77; 76: 78; 77: 79; 78: 80; 79: 81; 80: 82; 81: 83; 82: 84; 83: 85; 84: 86; 85: 87; 86: 88; 87: 89; 88: 90; 89: 91; 90: 92; 91: 93; 92: 94; 93: 95; 94: 96; 95: 97; 96: 98; 97: 99; 98: 100; }; 14 | 3: { '-1': 2; 0: 3; 1: 4; 2: 5; 3: 6; 4: 7; 5: 8; 6: 9; 7: 10; 8: 11; 9: 12; 10: 13; 11: 14; 12: 15; 13: 16; 14: 17; 15: 18; 16: 19; 17: 20; 18: 21; 19: 22; 20: 23; 21: 24; 22: 25; 23: 26; 24: 27; 25: 28; 26: 29; 27: 30; 28: 31; 29: 32; 30: 33; 31: 34; 32: 35; 33: 36; 34: 37; 35: 38; 36: 39; 37: 40; 38: 41; 39: 42; 40: 43; 41: 44; 42: 45; 43: 46; 44: 47; 45: 48; 46: 49; 47: 50; 48: 51; 49: 52; 50: 53; 51: 54; 52: 55; 53: 56; 54: 57; 55: 58; 56: 59; 57: 60; 58: 61; 59: 62; 60: 63; 61: 64; 62: 65; 63: 66; 64: 67; 65: 68; 66: 69; 67: 70; 68: 71; 69: 72; 70: 73; 71: 74; 72: 75; 73: 76; 74: 77; 75: 78; 76: 79; 77: 80; 78: 81; 79: 82; 80: 83; 81: 84; 82: 85; 83: 86; 84: 87; 85: 88; 86: 89; 87: 90; 88: 91; 89: 92; 90: 93; 91: 94; 92: 95; 93: 96; 94: 97; 95: 98; 96: 99; 97: 100; }; 15 | 4: { '-1': 3; 0: 4; 1: 5; 2: 6; 3: 7; 4: 8; 5: 9; 6: 10; 7: 11; 8: 12; 9: 13; 10: 14; 11: 15; 12: 16; 13: 17; 14: 18; 15: 19; 16: 20; 17: 21; 18: 22; 19: 23; 20: 24; 21: 25; 22: 26; 23: 27; 24: 28; 25: 29; 26: 30; 27: 31; 28: 32; 29: 33; 30: 34; 31: 35; 32: 36; 33: 37; 34: 38; 35: 39; 36: 40; 37: 41; 38: 42; 39: 43; 40: 44; 41: 45; 42: 46; 43: 47; 44: 48; 45: 49; 46: 50; 47: 51; 48: 52; 49: 53; 50: 54; 51: 55; 52: 56; 53: 57; 54: 58; 55: 59; 56: 60; 57: 61; 58: 62; 59: 63; 60: 64; 61: 65; 62: 66; 63: 67; 64: 68; 65: 69; 66: 70; 67: 71; 68: 72; 69: 73; 70: 74; 71: 75; 72: 76; 73: 77; 74: 78; 75: 79; 76: 80; 77: 81; 78: 82; 79: 83; 80: 84; 81: 85; 82: 86; 83: 87; 84: 88; 85: 89; 86: 90; 87: 91; 88: 92; 89: 93; 90: 94; 91: 95; 92: 96; 93: 97; 94: 98; 95: 99; 96: 100; }; 16 | 5: { '-1': 4; 0: 5; 1: 6; 2: 7; 3: 8; 4: 9; 5: 10; 6: 11; 7: 12; 8: 13; 9: 14; 10: 15; 11: 16; 12: 17; 13: 18; 14: 19; 15: 20; 16: 21; 17: 22; 18: 23; 19: 24; 20: 25; 21: 26; 22: 27; 23: 28; 24: 29; 25: 30; 26: 31; 27: 32; 28: 33; 29: 34; 30: 35; 31: 36; 32: 37; 33: 38; 34: 39; 35: 40; 36: 41; 37: 42; 38: 43; 39: 44; 40: 45; 41: 46; 42: 47; 43: 48; 44: 49; 45: 50; 46: 51; 47: 52; 48: 53; 49: 54; 50: 55; 51: 56; 52: 57; 53: 58; 54: 59; 55: 60; 56: 61; 57: 62; 58: 63; 59: 64; 60: 65; 61: 66; 62: 67; 63: 68; 64: 69; 65: 70; 66: 71; 67: 72; 68: 73; 69: 74; 70: 75; 71: 76; 72: 77; 73: 78; 74: 79; 75: 80; 76: 81; 77: 82; 78: 83; 79: 84; 80: 85; 81: 86; 82: 87; 83: 88; 84: 89; 85: 90; 86: 91; 87: 92; 88: 93; 89: 94; 90: 95; 91: 96; 92: 97; 93: 98; 94: 99; 95: 100; }; 17 | 6: { '-1': 5; 0: 6; 1: 7; 2: 8; 3: 9; 4: 10; 5: 11; 6: 12; 7: 13; 8: 14; 9: 15; 10: 16; 11: 17; 12: 18; 13: 19; 14: 20; 15: 21; 16: 22; 17: 23; 18: 24; 19: 25; 20: 26; 21: 27; 22: 28; 23: 29; 24: 30; 25: 31; 26: 32; 27: 33; 28: 34; 29: 35; 30: 36; 31: 37; 32: 38; 33: 39; 34: 40; 35: 41; 36: 42; 37: 43; 38: 44; 39: 45; 40: 46; 41: 47; 42: 48; 43: 49; 44: 50; 45: 51; 46: 52; 47: 53; 48: 54; 49: 55; 50: 56; 51: 57; 52: 58; 53: 59; 54: 60; 55: 61; 56: 62; 57: 63; 58: 64; 59: 65; 60: 66; 61: 67; 62: 68; 63: 69; 64: 70; 65: 71; 66: 72; 67: 73; 68: 74; 69: 75; 70: 76; 71: 77; 72: 78; 73: 79; 74: 80; 75: 81; 76: 82; 77: 83; 78: 84; 79: 85; 80: 86; 81: 87; 82: 88; 83: 89; 84: 90; 85: 91; 86: 92; 87: 93; 88: 94; 89: 95; 90: 96; 91: 97; 92: 98; 93: 99; 94: 100; }; 18 | 7: { '-1': 6; 0: 7; 1: 8; 2: 9; 3: 10; 4: 11; 5: 12; 6: 13; 7: 14; 8: 15; 9: 16; 10: 17; 11: 18; 12: 19; 13: 20; 14: 21; 15: 22; 16: 23; 17: 24; 18: 25; 19: 26; 20: 27; 21: 28; 22: 29; 23: 30; 24: 31; 25: 32; 26: 33; 27: 34; 28: 35; 29: 36; 30: 37; 31: 38; 32: 39; 33: 40; 34: 41; 35: 42; 36: 43; 37: 44; 38: 45; 39: 46; 40: 47; 41: 48; 42: 49; 43: 50; 44: 51; 45: 52; 46: 53; 47: 54; 48: 55; 49: 56; 50: 57; 51: 58; 52: 59; 53: 60; 54: 61; 55: 62; 56: 63; 57: 64; 58: 65; 59: 66; 60: 67; 61: 68; 62: 69; 63: 70; 64: 71; 65: 72; 66: 73; 67: 74; 68: 75; 69: 76; 70: 77; 71: 78; 72: 79; 73: 80; 74: 81; 75: 82; 76: 83; 77: 84; 78: 85; 79: 86; 80: 87; 81: 88; 82: 89; 83: 90; 84: 91; 85: 92; 86: 93; 87: 94; 88: 95; 89: 96; 90: 97; 91: 98; 92: 99; 93: 100; }; 19 | 8: { '-1': 7; 0: 8; 1: 9; 2: 10; 3: 11; 4: 12; 5: 13; 6: 14; 7: 15; 8: 16; 9: 17; 10: 18; 11: 19; 12: 20; 13: 21; 14: 22; 15: 23; 16: 24; 17: 25; 18: 26; 19: 27; 20: 28; 21: 29; 22: 30; 23: 31; 24: 32; 25: 33; 26: 34; 27: 35; 28: 36; 29: 37; 30: 38; 31: 39; 32: 40; 33: 41; 34: 42; 35: 43; 36: 44; 37: 45; 38: 46; 39: 47; 40: 48; 41: 49; 42: 50; 43: 51; 44: 52; 45: 53; 46: 54; 47: 55; 48: 56; 49: 57; 50: 58; 51: 59; 52: 60; 53: 61; 54: 62; 55: 63; 56: 64; 57: 65; 58: 66; 59: 67; 60: 68; 61: 69; 62: 70; 63: 71; 64: 72; 65: 73; 66: 74; 67: 75; 68: 76; 69: 77; 70: 78; 71: 79; 72: 80; 73: 81; 74: 82; 75: 83; 76: 84; 77: 85; 78: 86; 79: 87; 80: 88; 81: 89; 82: 90; 83: 91; 84: 92; 85: 93; 86: 94; 87: 95; 88: 96; 89: 97; 90: 98; 91: 99; 92: 100; }; 20 | 9: { '-1': 8; 0: 9; 1: 10; 2: 11; 3: 12; 4: 13; 5: 14; 6: 15; 7: 16; 8: 17; 9: 18; 10: 19; 11: 20; 12: 21; 13: 22; 14: 23; 15: 24; 16: 25; 17: 26; 18: 27; 19: 28; 20: 29; 21: 30; 22: 31; 23: 32; 24: 33; 25: 34; 26: 35; 27: 36; 28: 37; 29: 38; 30: 39; 31: 40; 32: 41; 33: 42; 34: 43; 35: 44; 36: 45; 37: 46; 38: 47; 39: 48; 40: 49; 41: 50; 42: 51; 43: 52; 44: 53; 45: 54; 46: 55; 47: 56; 48: 57; 49: 58; 50: 59; 51: 60; 52: 61; 53: 62; 54: 63; 55: 64; 56: 65; 57: 66; 58: 67; 59: 68; 60: 69; 61: 70; 62: 71; 63: 72; 64: 73; 65: 74; 66: 75; 67: 76; 68: 77; 69: 78; 70: 79; 71: 80; 72: 81; 73: 82; 74: 83; 75: 84; 76: 85; 77: 86; 78: 87; 79: 88; 80: 89; 81: 90; 82: 91; 83: 92; 84: 93; 85: 94; 86: 95; 87: 96; 88: 97; 89: 98; 90: 99; 91: 100; }; 21 | 10: { '-1': 9; 0: 10; 1: 11; 2: 12; 3: 13; 4: 14; 5: 15; 6: 16; 7: 17; 8: 18; 9: 19; 10: 20; 11: 21; 12: 22; 13: 23; 14: 24; 15: 25; 16: 26; 17: 27; 18: 28; 19: 29; 20: 30; 21: 31; 22: 32; 23: 33; 24: 34; 25: 35; 26: 36; 27: 37; 28: 38; 29: 39; 30: 40; 31: 41; 32: 42; 33: 43; 34: 44; 35: 45; 36: 46; 37: 47; 38: 48; 39: 49; 40: 50; 41: 51; 42: 52; 43: 53; 44: 54; 45: 55; 46: 56; 47: 57; 48: 58; 49: 59; 50: 60; 51: 61; 52: 62; 53: 63; 54: 64; 55: 65; 56: 66; 57: 67; 58: 68; 59: 69; 60: 70; 61: 71; 62: 72; 63: 73; 64: 74; 65: 75; 66: 76; 67: 77; 68: 78; 69: 79; 70: 80; 71: 81; 72: 82; 73: 83; 74: 84; 75: 85; 76: 86; 77: 87; 78: 88; 79: 89; 80: 90; 81: 91; 82: 92; 83: 93; 84: 94; 85: 95; 86: 96; 87: 97; 88: 98; 89: 99; 90: 100; }; 22 | 11: { '-1': 10; 0: 11; 1: 12; 2: 13; 3: 14; 4: 15; 5: 16; 6: 17; 7: 18; 8: 19; 9: 20; 10: 21; 11: 22; 12: 23; 13: 24; 14: 25; 15: 26; 16: 27; 17: 28; 18: 29; 19: 30; 20: 31; 21: 32; 22: 33; 23: 34; 24: 35; 25: 36; 26: 37; 27: 38; 28: 39; 29: 40; 30: 41; 31: 42; 32: 43; 33: 44; 34: 45; 35: 46; 36: 47; 37: 48; 38: 49; 39: 50; 40: 51; 41: 52; 42: 53; 43: 54; 44: 55; 45: 56; 46: 57; 47: 58; 48: 59; 49: 60; 50: 61; 51: 62; 52: 63; 53: 64; 54: 65; 55: 66; 56: 67; 57: 68; 58: 69; 59: 70; 60: 71; 61: 72; 62: 73; 63: 74; 64: 75; 65: 76; 66: 77; 67: 78; 68: 79; 69: 80; 70: 81; 71: 82; 72: 83; 73: 84; 74: 85; 75: 86; 76: 87; 77: 88; 78: 89; 79: 90; 80: 91; 81: 92; 82: 93; 83: 94; 84: 95; 85: 96; 86: 97; 87: 98; 88: 99; 89: 100; }; 23 | 12: { '-1': 11; 0: 12; 1: 13; 2: 14; 3: 15; 4: 16; 5: 17; 6: 18; 7: 19; 8: 20; 9: 21; 10: 22; 11: 23; 12: 24; 13: 25; 14: 26; 15: 27; 16: 28; 17: 29; 18: 30; 19: 31; 20: 32; 21: 33; 22: 34; 23: 35; 24: 36; 25: 37; 26: 38; 27: 39; 28: 40; 29: 41; 30: 42; 31: 43; 32: 44; 33: 45; 34: 46; 35: 47; 36: 48; 37: 49; 38: 50; 39: 51; 40: 52; 41: 53; 42: 54; 43: 55; 44: 56; 45: 57; 46: 58; 47: 59; 48: 60; 49: 61; 50: 62; 51: 63; 52: 64; 53: 65; 54: 66; 55: 67; 56: 68; 57: 69; 58: 70; 59: 71; 60: 72; 61: 73; 62: 74; 63: 75; 64: 76; 65: 77; 66: 78; 67: 79; 68: 80; 69: 81; 70: 82; 71: 83; 72: 84; 73: 85; 74: 86; 75: 87; 76: 88; 77: 89; 78: 90; 79: 91; 80: 92; 81: 93; 82: 94; 83: 95; 84: 96; 85: 97; 86: 98; 87: 99; 88: 100; }; 24 | 13: { '-1': 12; 0: 13; 1: 14; 2: 15; 3: 16; 4: 17; 5: 18; 6: 19; 7: 20; 8: 21; 9: 22; 10: 23; 11: 24; 12: 25; 13: 26; 14: 27; 15: 28; 16: 29; 17: 30; 18: 31; 19: 32; 20: 33; 21: 34; 22: 35; 23: 36; 24: 37; 25: 38; 26: 39; 27: 40; 28: 41; 29: 42; 30: 43; 31: 44; 32: 45; 33: 46; 34: 47; 35: 48; 36: 49; 37: 50; 38: 51; 39: 52; 40: 53; 41: 54; 42: 55; 43: 56; 44: 57; 45: 58; 46: 59; 47: 60; 48: 61; 49: 62; 50: 63; 51: 64; 52: 65; 53: 66; 54: 67; 55: 68; 56: 69; 57: 70; 58: 71; 59: 72; 60: 73; 61: 74; 62: 75; 63: 76; 64: 77; 65: 78; 66: 79; 67: 80; 68: 81; 69: 82; 70: 83; 71: 84; 72: 85; 73: 86; 74: 87; 75: 88; 76: 89; 77: 90; 78: 91; 79: 92; 80: 93; 81: 94; 82: 95; 83: 96; 84: 97; 85: 98; 86: 99; 87: 100; }; 25 | 14: { '-1': 13; 0: 14; 1: 15; 2: 16; 3: 17; 4: 18; 5: 19; 6: 20; 7: 21; 8: 22; 9: 23; 10: 24; 11: 25; 12: 26; 13: 27; 14: 28; 15: 29; 16: 30; 17: 31; 18: 32; 19: 33; 20: 34; 21: 35; 22: 36; 23: 37; 24: 38; 25: 39; 26: 40; 27: 41; 28: 42; 29: 43; 30: 44; 31: 45; 32: 46; 33: 47; 34: 48; 35: 49; 36: 50; 37: 51; 38: 52; 39: 53; 40: 54; 41: 55; 42: 56; 43: 57; 44: 58; 45: 59; 46: 60; 47: 61; 48: 62; 49: 63; 50: 64; 51: 65; 52: 66; 53: 67; 54: 68; 55: 69; 56: 70; 57: 71; 58: 72; 59: 73; 60: 74; 61: 75; 62: 76; 63: 77; 64: 78; 65: 79; 66: 80; 67: 81; 68: 82; 69: 83; 70: 84; 71: 85; 72: 86; 73: 87; 74: 88; 75: 89; 76: 90; 77: 91; 78: 92; 79: 93; 80: 94; 81: 95; 82: 96; 83: 97; 84: 98; 85: 99; 86: 100; }; 26 | 15: { '-1': 14; 0: 15; 1: 16; 2: 17; 3: 18; 4: 19; 5: 20; 6: 21; 7: 22; 8: 23; 9: 24; 10: 25; 11: 26; 12: 27; 13: 28; 14: 29; 15: 30; 16: 31; 17: 32; 18: 33; 19: 34; 20: 35; 21: 36; 22: 37; 23: 38; 24: 39; 25: 40; 26: 41; 27: 42; 28: 43; 29: 44; 30: 45; 31: 46; 32: 47; 33: 48; 34: 49; 35: 50; 36: 51; 37: 52; 38: 53; 39: 54; 40: 55; 41: 56; 42: 57; 43: 58; 44: 59; 45: 60; 46: 61; 47: 62; 48: 63; 49: 64; 50: 65; 51: 66; 52: 67; 53: 68; 54: 69; 55: 70; 56: 71; 57: 72; 58: 73; 59: 74; 60: 75; 61: 76; 62: 77; 63: 78; 64: 79; 65: 80; 66: 81; 67: 82; 68: 83; 69: 84; 70: 85; 71: 86; 72: 87; 73: 88; 74: 89; 75: 90; 76: 91; 77: 92; 78: 93; 79: 94; 80: 95; 81: 96; 82: 97; 83: 98; 84: 99; 85: 100; }; 27 | 16: { '-1': 15; 0: 16; 1: 17; 2: 18; 3: 19; 4: 20; 5: 21; 6: 22; 7: 23; 8: 24; 9: 25; 10: 26; 11: 27; 12: 28; 13: 29; 14: 30; 15: 31; 16: 32; 17: 33; 18: 34; 19: 35; 20: 36; 21: 37; 22: 38; 23: 39; 24: 40; 25: 41; 26: 42; 27: 43; 28: 44; 29: 45; 30: 46; 31: 47; 32: 48; 33: 49; 34: 50; 35: 51; 36: 52; 37: 53; 38: 54; 39: 55; 40: 56; 41: 57; 42: 58; 43: 59; 44: 60; 45: 61; 46: 62; 47: 63; 48: 64; 49: 65; 50: 66; 51: 67; 52: 68; 53: 69; 54: 70; 55: 71; 56: 72; 57: 73; 58: 74; 59: 75; 60: 76; 61: 77; 62: 78; 63: 79; 64: 80; 65: 81; 66: 82; 67: 83; 68: 84; 69: 85; 70: 86; 71: 87; 72: 88; 73: 89; 74: 90; 75: 91; 76: 92; 77: 93; 78: 94; 79: 95; 80: 96; 81: 97; 82: 98; 83: 99; 84: 100; }; 28 | 17: { '-1': 16; 0: 17; 1: 18; 2: 19; 3: 20; 4: 21; 5: 22; 6: 23; 7: 24; 8: 25; 9: 26; 10: 27; 11: 28; 12: 29; 13: 30; 14: 31; 15: 32; 16: 33; 17: 34; 18: 35; 19: 36; 20: 37; 21: 38; 22: 39; 23: 40; 24: 41; 25: 42; 26: 43; 27: 44; 28: 45; 29: 46; 30: 47; 31: 48; 32: 49; 33: 50; 34: 51; 35: 52; 36: 53; 37: 54; 38: 55; 39: 56; 40: 57; 41: 58; 42: 59; 43: 60; 44: 61; 45: 62; 46: 63; 47: 64; 48: 65; 49: 66; 50: 67; 51: 68; 52: 69; 53: 70; 54: 71; 55: 72; 56: 73; 57: 74; 58: 75; 59: 76; 60: 77; 61: 78; 62: 79; 63: 80; 64: 81; 65: 82; 66: 83; 67: 84; 68: 85; 69: 86; 70: 87; 71: 88; 72: 89; 73: 90; 74: 91; 75: 92; 76: 93; 77: 94; 78: 95; 79: 96; 80: 97; 81: 98; 82: 99; 83: 100; }; 29 | 18: { '-1': 17; 0: 18; 1: 19; 2: 20; 3: 21; 4: 22; 5: 23; 6: 24; 7: 25; 8: 26; 9: 27; 10: 28; 11: 29; 12: 30; 13: 31; 14: 32; 15: 33; 16: 34; 17: 35; 18: 36; 19: 37; 20: 38; 21: 39; 22: 40; 23: 41; 24: 42; 25: 43; 26: 44; 27: 45; 28: 46; 29: 47; 30: 48; 31: 49; 32: 50; 33: 51; 34: 52; 35: 53; 36: 54; 37: 55; 38: 56; 39: 57; 40: 58; 41: 59; 42: 60; 43: 61; 44: 62; 45: 63; 46: 64; 47: 65; 48: 66; 49: 67; 50: 68; 51: 69; 52: 70; 53: 71; 54: 72; 55: 73; 56: 74; 57: 75; 58: 76; 59: 77; 60: 78; 61: 79; 62: 80; 63: 81; 64: 82; 65: 83; 66: 84; 67: 85; 68: 86; 69: 87; 70: 88; 71: 89; 72: 90; 73: 91; 74: 92; 75: 93; 76: 94; 77: 95; 78: 96; 79: 97; 80: 98; 81: 99; 82: 100; }; 30 | 19: { '-1': 18; 0: 19; 1: 20; 2: 21; 3: 22; 4: 23; 5: 24; 6: 25; 7: 26; 8: 27; 9: 28; 10: 29; 11: 30; 12: 31; 13: 32; 14: 33; 15: 34; 16: 35; 17: 36; 18: 37; 19: 38; 20: 39; 21: 40; 22: 41; 23: 42; 24: 43; 25: 44; 26: 45; 27: 46; 28: 47; 29: 48; 30: 49; 31: 50; 32: 51; 33: 52; 34: 53; 35: 54; 36: 55; 37: 56; 38: 57; 39: 58; 40: 59; 41: 60; 42: 61; 43: 62; 44: 63; 45: 64; 46: 65; 47: 66; 48: 67; 49: 68; 50: 69; 51: 70; 52: 71; 53: 72; 54: 73; 55: 74; 56: 75; 57: 76; 58: 77; 59: 78; 60: 79; 61: 80; 62: 81; 63: 82; 64: 83; 65: 84; 66: 85; 67: 86; 68: 87; 69: 88; 70: 89; 71: 90; 72: 91; 73: 92; 74: 93; 75: 94; 76: 95; 77: 96; 78: 97; 79: 98; 80: 99; 81: 100; }; 31 | 20: { '-1': 19; 0: 20; 1: 21; 2: 22; 3: 23; 4: 24; 5: 25; 6: 26; 7: 27; 8: 28; 9: 29; 10: 30; 11: 31; 12: 32; 13: 33; 14: 34; 15: 35; 16: 36; 17: 37; 18: 38; 19: 39; 20: 40; 21: 41; 22: 42; 23: 43; 24: 44; 25: 45; 26: 46; 27: 47; 28: 48; 29: 49; 30: 50; 31: 51; 32: 52; 33: 53; 34: 54; 35: 55; 36: 56; 37: 57; 38: 58; 39: 59; 40: 60; 41: 61; 42: 62; 43: 63; 44: 64; 45: 65; 46: 66; 47: 67; 48: 68; 49: 69; 50: 70; 51: 71; 52: 72; 53: 73; 54: 74; 55: 75; 56: 76; 57: 77; 58: 78; 59: 79; 60: 80; 61: 81; 62: 82; 63: 83; 64: 84; 65: 85; 66: 86; 67: 87; 68: 88; 69: 89; 70: 90; 71: 91; 72: 92; 73: 93; 74: 94; 75: 95; 76: 96; 77: 97; 78: 98; 79: 99; 80: 100; }; 32 | 21: { '-1': 20; 0: 21; 1: 22; 2: 23; 3: 24; 4: 25; 5: 26; 6: 27; 7: 28; 8: 29; 9: 30; 10: 31; 11: 32; 12: 33; 13: 34; 14: 35; 15: 36; 16: 37; 17: 38; 18: 39; 19: 40; 20: 41; 21: 42; 22: 43; 23: 44; 24: 45; 25: 46; 26: 47; 27: 48; 28: 49; 29: 50; 30: 51; 31: 52; 32: 53; 33: 54; 34: 55; 35: 56; 36: 57; 37: 58; 38: 59; 39: 60; 40: 61; 41: 62; 42: 63; 43: 64; 44: 65; 45: 66; 46: 67; 47: 68; 48: 69; 49: 70; 50: 71; 51: 72; 52: 73; 53: 74; 54: 75; 55: 76; 56: 77; 57: 78; 58: 79; 59: 80; 60: 81; 61: 82; 62: 83; 63: 84; 64: 85; 65: 86; 66: 87; 67: 88; 68: 89; 69: 90; 70: 91; 71: 92; 72: 93; 73: 94; 74: 95; 75: 96; 76: 97; 77: 98; 78: 99; 79: 100; }; 33 | 22: { '-1': 21; 0: 22; 1: 23; 2: 24; 3: 25; 4: 26; 5: 27; 6: 28; 7: 29; 8: 30; 9: 31; 10: 32; 11: 33; 12: 34; 13: 35; 14: 36; 15: 37; 16: 38; 17: 39; 18: 40; 19: 41; 20: 42; 21: 43; 22: 44; 23: 45; 24: 46; 25: 47; 26: 48; 27: 49; 28: 50; 29: 51; 30: 52; 31: 53; 32: 54; 33: 55; 34: 56; 35: 57; 36: 58; 37: 59; 38: 60; 39: 61; 40: 62; 41: 63; 42: 64; 43: 65; 44: 66; 45: 67; 46: 68; 47: 69; 48: 70; 49: 71; 50: 72; 51: 73; 52: 74; 53: 75; 54: 76; 55: 77; 56: 78; 57: 79; 58: 80; 59: 81; 60: 82; 61: 83; 62: 84; 63: 85; 64: 86; 65: 87; 66: 88; 67: 89; 68: 90; 69: 91; 70: 92; 71: 93; 72: 94; 73: 95; 74: 96; 75: 97; 76: 98; 77: 99; 78: 100; }; 34 | 23: { '-1': 22; 0: 23; 1: 24; 2: 25; 3: 26; 4: 27; 5: 28; 6: 29; 7: 30; 8: 31; 9: 32; 10: 33; 11: 34; 12: 35; 13: 36; 14: 37; 15: 38; 16: 39; 17: 40; 18: 41; 19: 42; 20: 43; 21: 44; 22: 45; 23: 46; 24: 47; 25: 48; 26: 49; 27: 50; 28: 51; 29: 52; 30: 53; 31: 54; 32: 55; 33: 56; 34: 57; 35: 58; 36: 59; 37: 60; 38: 61; 39: 62; 40: 63; 41: 64; 42: 65; 43: 66; 44: 67; 45: 68; 46: 69; 47: 70; 48: 71; 49: 72; 50: 73; 51: 74; 52: 75; 53: 76; 54: 77; 55: 78; 56: 79; 57: 80; 58: 81; 59: 82; 60: 83; 61: 84; 62: 85; 63: 86; 64: 87; 65: 88; 66: 89; 67: 90; 68: 91; 69: 92; 70: 93; 71: 94; 72: 95; 73: 96; 74: 97; 75: 98; 76: 99; 77: 100; }; 35 | 24: { '-1': 23; 0: 24; 1: 25; 2: 26; 3: 27; 4: 28; 5: 29; 6: 30; 7: 31; 8: 32; 9: 33; 10: 34; 11: 35; 12: 36; 13: 37; 14: 38; 15: 39; 16: 40; 17: 41; 18: 42; 19: 43; 20: 44; 21: 45; 22: 46; 23: 47; 24: 48; 25: 49; 26: 50; 27: 51; 28: 52; 29: 53; 30: 54; 31: 55; 32: 56; 33: 57; 34: 58; 35: 59; 36: 60; 37: 61; 38: 62; 39: 63; 40: 64; 41: 65; 42: 66; 43: 67; 44: 68; 45: 69; 46: 70; 47: 71; 48: 72; 49: 73; 50: 74; 51: 75; 52: 76; 53: 77; 54: 78; 55: 79; 56: 80; 57: 81; 58: 82; 59: 83; 60: 84; 61: 85; 62: 86; 63: 87; 64: 88; 65: 89; 66: 90; 67: 91; 68: 92; 69: 93; 70: 94; 71: 95; 72: 96; 73: 97; 74: 98; 75: 99; 76: 100; }; 36 | 25: { '-1': 24; 0: 25; 1: 26; 2: 27; 3: 28; 4: 29; 5: 30; 6: 31; 7: 32; 8: 33; 9: 34; 10: 35; 11: 36; 12: 37; 13: 38; 14: 39; 15: 40; 16: 41; 17: 42; 18: 43; 19: 44; 20: 45; 21: 46; 22: 47; 23: 48; 24: 49; 25: 50; 26: 51; 27: 52; 28: 53; 29: 54; 30: 55; 31: 56; 32: 57; 33: 58; 34: 59; 35: 60; 36: 61; 37: 62; 38: 63; 39: 64; 40: 65; 41: 66; 42: 67; 43: 68; 44: 69; 45: 70; 46: 71; 47: 72; 48: 73; 49: 74; 50: 75; 51: 76; 52: 77; 53: 78; 54: 79; 55: 80; 56: 81; 57: 82; 58: 83; 59: 84; 60: 85; 61: 86; 62: 87; 63: 88; 64: 89; 65: 90; 66: 91; 67: 92; 68: 93; 69: 94; 70: 95; 71: 96; 72: 97; 73: 98; 74: 99; 75: 100; }; 37 | 26: { '-1': 25; 0: 26; 1: 27; 2: 28; 3: 29; 4: 30; 5: 31; 6: 32; 7: 33; 8: 34; 9: 35; 10: 36; 11: 37; 12: 38; 13: 39; 14: 40; 15: 41; 16: 42; 17: 43; 18: 44; 19: 45; 20: 46; 21: 47; 22: 48; 23: 49; 24: 50; 25: 51; 26: 52; 27: 53; 28: 54; 29: 55; 30: 56; 31: 57; 32: 58; 33: 59; 34: 60; 35: 61; 36: 62; 37: 63; 38: 64; 39: 65; 40: 66; 41: 67; 42: 68; 43: 69; 44: 70; 45: 71; 46: 72; 47: 73; 48: 74; 49: 75; 50: 76; 51: 77; 52: 78; 53: 79; 54: 80; 55: 81; 56: 82; 57: 83; 58: 84; 59: 85; 60: 86; 61: 87; 62: 88; 63: 89; 64: 90; 65: 91; 66: 92; 67: 93; 68: 94; 69: 95; 70: 96; 71: 97; 72: 98; 73: 99; 74: 100; }; 38 | 27: { '-1': 26; 0: 27; 1: 28; 2: 29; 3: 30; 4: 31; 5: 32; 6: 33; 7: 34; 8: 35; 9: 36; 10: 37; 11: 38; 12: 39; 13: 40; 14: 41; 15: 42; 16: 43; 17: 44; 18: 45; 19: 46; 20: 47; 21: 48; 22: 49; 23: 50; 24: 51; 25: 52; 26: 53; 27: 54; 28: 55; 29: 56; 30: 57; 31: 58; 32: 59; 33: 60; 34: 61; 35: 62; 36: 63; 37: 64; 38: 65; 39: 66; 40: 67; 41: 68; 42: 69; 43: 70; 44: 71; 45: 72; 46: 73; 47: 74; 48: 75; 49: 76; 50: 77; 51: 78; 52: 79; 53: 80; 54: 81; 55: 82; 56: 83; 57: 84; 58: 85; 59: 86; 60: 87; 61: 88; 62: 89; 63: 90; 64: 91; 65: 92; 66: 93; 67: 94; 68: 95; 69: 96; 70: 97; 71: 98; 72: 99; 73: 100; }; 39 | 28: { '-1': 27; 0: 28; 1: 29; 2: 30; 3: 31; 4: 32; 5: 33; 6: 34; 7: 35; 8: 36; 9: 37; 10: 38; 11: 39; 12: 40; 13: 41; 14: 42; 15: 43; 16: 44; 17: 45; 18: 46; 19: 47; 20: 48; 21: 49; 22: 50; 23: 51; 24: 52; 25: 53; 26: 54; 27: 55; 28: 56; 29: 57; 30: 58; 31: 59; 32: 60; 33: 61; 34: 62; 35: 63; 36: 64; 37: 65; 38: 66; 39: 67; 40: 68; 41: 69; 42: 70; 43: 71; 44: 72; 45: 73; 46: 74; 47: 75; 48: 76; 49: 77; 50: 78; 51: 79; 52: 80; 53: 81; 54: 82; 55: 83; 56: 84; 57: 85; 58: 86; 59: 87; 60: 88; 61: 89; 62: 90; 63: 91; 64: 92; 65: 93; 66: 94; 67: 95; 68: 96; 69: 97; 70: 98; 71: 99; 72: 100; }; 40 | 29: { '-1': 28; 0: 29; 1: 30; 2: 31; 3: 32; 4: 33; 5: 34; 6: 35; 7: 36; 8: 37; 9: 38; 10: 39; 11: 40; 12: 41; 13: 42; 14: 43; 15: 44; 16: 45; 17: 46; 18: 47; 19: 48; 20: 49; 21: 50; 22: 51; 23: 52; 24: 53; 25: 54; 26: 55; 27: 56; 28: 57; 29: 58; 30: 59; 31: 60; 32: 61; 33: 62; 34: 63; 35: 64; 36: 65; 37: 66; 38: 67; 39: 68; 40: 69; 41: 70; 42: 71; 43: 72; 44: 73; 45: 74; 46: 75; 47: 76; 48: 77; 49: 78; 50: 79; 51: 80; 52: 81; 53: 82; 54: 83; 55: 84; 56: 85; 57: 86; 58: 87; 59: 88; 60: 89; 61: 90; 62: 91; 63: 92; 64: 93; 65: 94; 66: 95; 67: 96; 68: 97; 69: 98; 70: 99; 71: 100; }; 41 | 30: { '-1': 29; 0: 30; 1: 31; 2: 32; 3: 33; 4: 34; 5: 35; 6: 36; 7: 37; 8: 38; 9: 39; 10: 40; 11: 41; 12: 42; 13: 43; 14: 44; 15: 45; 16: 46; 17: 47; 18: 48; 19: 49; 20: 50; 21: 51; 22: 52; 23: 53; 24: 54; 25: 55; 26: 56; 27: 57; 28: 58; 29: 59; 30: 60; 31: 61; 32: 62; 33: 63; 34: 64; 35: 65; 36: 66; 37: 67; 38: 68; 39: 69; 40: 70; 41: 71; 42: 72; 43: 73; 44: 74; 45: 75; 46: 76; 47: 77; 48: 78; 49: 79; 50: 80; 51: 81; 52: 82; 53: 83; 54: 84; 55: 85; 56: 86; 57: 87; 58: 88; 59: 89; 60: 90; 61: 91; 62: 92; 63: 93; 64: 94; 65: 95; 66: 96; 67: 97; 68: 98; 69: 99; 70: 100; }; 42 | 31: { '-1': 30; 0: 31; 1: 32; 2: 33; 3: 34; 4: 35; 5: 36; 6: 37; 7: 38; 8: 39; 9: 40; 10: 41; 11: 42; 12: 43; 13: 44; 14: 45; 15: 46; 16: 47; 17: 48; 18: 49; 19: 50; 20: 51; 21: 52; 22: 53; 23: 54; 24: 55; 25: 56; 26: 57; 27: 58; 28: 59; 29: 60; 30: 61; 31: 62; 32: 63; 33: 64; 34: 65; 35: 66; 36: 67; 37: 68; 38: 69; 39: 70; 40: 71; 41: 72; 42: 73; 43: 74; 44: 75; 45: 76; 46: 77; 47: 78; 48: 79; 49: 80; 50: 81; 51: 82; 52: 83; 53: 84; 54: 85; 55: 86; 56: 87; 57: 88; 58: 89; 59: 90; 60: 91; 61: 92; 62: 93; 63: 94; 64: 95; 65: 96; 66: 97; 67: 98; 68: 99; 69: 100; }; 43 | 32: { '-1': 31; 0: 32; 1: 33; 2: 34; 3: 35; 4: 36; 5: 37; 6: 38; 7: 39; 8: 40; 9: 41; 10: 42; 11: 43; 12: 44; 13: 45; 14: 46; 15: 47; 16: 48; 17: 49; 18: 50; 19: 51; 20: 52; 21: 53; 22: 54; 23: 55; 24: 56; 25: 57; 26: 58; 27: 59; 28: 60; 29: 61; 30: 62; 31: 63; 32: 64; 33: 65; 34: 66; 35: 67; 36: 68; 37: 69; 38: 70; 39: 71; 40: 72; 41: 73; 42: 74; 43: 75; 44: 76; 45: 77; 46: 78; 47: 79; 48: 80; 49: 81; 50: 82; 51: 83; 52: 84; 53: 85; 54: 86; 55: 87; 56: 88; 57: 89; 58: 90; 59: 91; 60: 92; 61: 93; 62: 94; 63: 95; 64: 96; 65: 97; 66: 98; 67: 99; 68: 100; }; 44 | 33: { '-1': 32; 0: 33; 1: 34; 2: 35; 3: 36; 4: 37; 5: 38; 6: 39; 7: 40; 8: 41; 9: 42; 10: 43; 11: 44; 12: 45; 13: 46; 14: 47; 15: 48; 16: 49; 17: 50; 18: 51; 19: 52; 20: 53; 21: 54; 22: 55; 23: 56; 24: 57; 25: 58; 26: 59; 27: 60; 28: 61; 29: 62; 30: 63; 31: 64; 32: 65; 33: 66; 34: 67; 35: 68; 36: 69; 37: 70; 38: 71; 39: 72; 40: 73; 41: 74; 42: 75; 43: 76; 44: 77; 45: 78; 46: 79; 47: 80; 48: 81; 49: 82; 50: 83; 51: 84; 52: 85; 53: 86; 54: 87; 55: 88; 56: 89; 57: 90; 58: 91; 59: 92; 60: 93; 61: 94; 62: 95; 63: 96; 64: 97; 65: 98; 66: 99; 67: 100; }; 45 | 34: { '-1': 33; 0: 34; 1: 35; 2: 36; 3: 37; 4: 38; 5: 39; 6: 40; 7: 41; 8: 42; 9: 43; 10: 44; 11: 45; 12: 46; 13: 47; 14: 48; 15: 49; 16: 50; 17: 51; 18: 52; 19: 53; 20: 54; 21: 55; 22: 56; 23: 57; 24: 58; 25: 59; 26: 60; 27: 61; 28: 62; 29: 63; 30: 64; 31: 65; 32: 66; 33: 67; 34: 68; 35: 69; 36: 70; 37: 71; 38: 72; 39: 73; 40: 74; 41: 75; 42: 76; 43: 77; 44: 78; 45: 79; 46: 80; 47: 81; 48: 82; 49: 83; 50: 84; 51: 85; 52: 86; 53: 87; 54: 88; 55: 89; 56: 90; 57: 91; 58: 92; 59: 93; 60: 94; 61: 95; 62: 96; 63: 97; 64: 98; 65: 99; 66: 100; }; 46 | 35: { '-1': 34; 0: 35; 1: 36; 2: 37; 3: 38; 4: 39; 5: 40; 6: 41; 7: 42; 8: 43; 9: 44; 10: 45; 11: 46; 12: 47; 13: 48; 14: 49; 15: 50; 16: 51; 17: 52; 18: 53; 19: 54; 20: 55; 21: 56; 22: 57; 23: 58; 24: 59; 25: 60; 26: 61; 27: 62; 28: 63; 29: 64; 30: 65; 31: 66; 32: 67; 33: 68; 34: 69; 35: 70; 36: 71; 37: 72; 38: 73; 39: 74; 40: 75; 41: 76; 42: 77; 43: 78; 44: 79; 45: 80; 46: 81; 47: 82; 48: 83; 49: 84; 50: 85; 51: 86; 52: 87; 53: 88; 54: 89; 55: 90; 56: 91; 57: 92; 58: 93; 59: 94; 60: 95; 61: 96; 62: 97; 63: 98; 64: 99; 65: 100; }; 47 | 36: { '-1': 35; 0: 36; 1: 37; 2: 38; 3: 39; 4: 40; 5: 41; 6: 42; 7: 43; 8: 44; 9: 45; 10: 46; 11: 47; 12: 48; 13: 49; 14: 50; 15: 51; 16: 52; 17: 53; 18: 54; 19: 55; 20: 56; 21: 57; 22: 58; 23: 59; 24: 60; 25: 61; 26: 62; 27: 63; 28: 64; 29: 65; 30: 66; 31: 67; 32: 68; 33: 69; 34: 70; 35: 71; 36: 72; 37: 73; 38: 74; 39: 75; 40: 76; 41: 77; 42: 78; 43: 79; 44: 80; 45: 81; 46: 82; 47: 83; 48: 84; 49: 85; 50: 86; 51: 87; 52: 88; 53: 89; 54: 90; 55: 91; 56: 92; 57: 93; 58: 94; 59: 95; 60: 96; 61: 97; 62: 98; 63: 99; 64: 100; }; 48 | 37: { '-1': 36; 0: 37; 1: 38; 2: 39; 3: 40; 4: 41; 5: 42; 6: 43; 7: 44; 8: 45; 9: 46; 10: 47; 11: 48; 12: 49; 13: 50; 14: 51; 15: 52; 16: 53; 17: 54; 18: 55; 19: 56; 20: 57; 21: 58; 22: 59; 23: 60; 24: 61; 25: 62; 26: 63; 27: 64; 28: 65; 29: 66; 30: 67; 31: 68; 32: 69; 33: 70; 34: 71; 35: 72; 36: 73; 37: 74; 38: 75; 39: 76; 40: 77; 41: 78; 42: 79; 43: 80; 44: 81; 45: 82; 46: 83; 47: 84; 48: 85; 49: 86; 50: 87; 51: 88; 52: 89; 53: 90; 54: 91; 55: 92; 56: 93; 57: 94; 58: 95; 59: 96; 60: 97; 61: 98; 62: 99; 63: 100; }; 49 | 38: { '-1': 37; 0: 38; 1: 39; 2: 40; 3: 41; 4: 42; 5: 43; 6: 44; 7: 45; 8: 46; 9: 47; 10: 48; 11: 49; 12: 50; 13: 51; 14: 52; 15: 53; 16: 54; 17: 55; 18: 56; 19: 57; 20: 58; 21: 59; 22: 60; 23: 61; 24: 62; 25: 63; 26: 64; 27: 65; 28: 66; 29: 67; 30: 68; 31: 69; 32: 70; 33: 71; 34: 72; 35: 73; 36: 74; 37: 75; 38: 76; 39: 77; 40: 78; 41: 79; 42: 80; 43: 81; 44: 82; 45: 83; 46: 84; 47: 85; 48: 86; 49: 87; 50: 88; 51: 89; 52: 90; 53: 91; 54: 92; 55: 93; 56: 94; 57: 95; 58: 96; 59: 97; 60: 98; 61: 99; 62: 100; }; 50 | 39: { '-1': 38; 0: 39; 1: 40; 2: 41; 3: 42; 4: 43; 5: 44; 6: 45; 7: 46; 8: 47; 9: 48; 10: 49; 11: 50; 12: 51; 13: 52; 14: 53; 15: 54; 16: 55; 17: 56; 18: 57; 19: 58; 20: 59; 21: 60; 22: 61; 23: 62; 24: 63; 25: 64; 26: 65; 27: 66; 28: 67; 29: 68; 30: 69; 31: 70; 32: 71; 33: 72; 34: 73; 35: 74; 36: 75; 37: 76; 38: 77; 39: 78; 40: 79; 41: 80; 42: 81; 43: 82; 44: 83; 45: 84; 46: 85; 47: 86; 48: 87; 49: 88; 50: 89; 51: 90; 52: 91; 53: 92; 54: 93; 55: 94; 56: 95; 57: 96; 58: 97; 59: 98; 60: 99; 61: 100; }; 51 | 40: { '-1': 39; 0: 40; 1: 41; 2: 42; 3: 43; 4: 44; 5: 45; 6: 46; 7: 47; 8: 48; 9: 49; 10: 50; 11: 51; 12: 52; 13: 53; 14: 54; 15: 55; 16: 56; 17: 57; 18: 58; 19: 59; 20: 60; 21: 61; 22: 62; 23: 63; 24: 64; 25: 65; 26: 66; 27: 67; 28: 68; 29: 69; 30: 70; 31: 71; 32: 72; 33: 73; 34: 74; 35: 75; 36: 76; 37: 77; 38: 78; 39: 79; 40: 80; 41: 81; 42: 82; 43: 83; 44: 84; 45: 85; 46: 86; 47: 87; 48: 88; 49: 89; 50: 90; 51: 91; 52: 92; 53: 93; 54: 94; 55: 95; 56: 96; 57: 97; 58: 98; 59: 99; 60: 100; }; 52 | 41: { '-1': 40; 0: 41; 1: 42; 2: 43; 3: 44; 4: 45; 5: 46; 6: 47; 7: 48; 8: 49; 9: 50; 10: 51; 11: 52; 12: 53; 13: 54; 14: 55; 15: 56; 16: 57; 17: 58; 18: 59; 19: 60; 20: 61; 21: 62; 22: 63; 23: 64; 24: 65; 25: 66; 26: 67; 27: 68; 28: 69; 29: 70; 30: 71; 31: 72; 32: 73; 33: 74; 34: 75; 35: 76; 36: 77; 37: 78; 38: 79; 39: 80; 40: 81; 41: 82; 42: 83; 43: 84; 44: 85; 45: 86; 46: 87; 47: 88; 48: 89; 49: 90; 50: 91; 51: 92; 52: 93; 53: 94; 54: 95; 55: 96; 56: 97; 57: 98; 58: 99; 59: 100; }; 53 | 42: { '-1': 41; 0: 42; 1: 43; 2: 44; 3: 45; 4: 46; 5: 47; 6: 48; 7: 49; 8: 50; 9: 51; 10: 52; 11: 53; 12: 54; 13: 55; 14: 56; 15: 57; 16: 58; 17: 59; 18: 60; 19: 61; 20: 62; 21: 63; 22: 64; 23: 65; 24: 66; 25: 67; 26: 68; 27: 69; 28: 70; 29: 71; 30: 72; 31: 73; 32: 74; 33: 75; 34: 76; 35: 77; 36: 78; 37: 79; 38: 80; 39: 81; 40: 82; 41: 83; 42: 84; 43: 85; 44: 86; 45: 87; 46: 88; 47: 89; 48: 90; 49: 91; 50: 92; 51: 93; 52: 94; 53: 95; 54: 96; 55: 97; 56: 98; 57: 99; 58: 100; }; 54 | 43: { '-1': 42; 0: 43; 1: 44; 2: 45; 3: 46; 4: 47; 5: 48; 6: 49; 7: 50; 8: 51; 9: 52; 10: 53; 11: 54; 12: 55; 13: 56; 14: 57; 15: 58; 16: 59; 17: 60; 18: 61; 19: 62; 20: 63; 21: 64; 22: 65; 23: 66; 24: 67; 25: 68; 26: 69; 27: 70; 28: 71; 29: 72; 30: 73; 31: 74; 32: 75; 33: 76; 34: 77; 35: 78; 36: 79; 37: 80; 38: 81; 39: 82; 40: 83; 41: 84; 42: 85; 43: 86; 44: 87; 45: 88; 46: 89; 47: 90; 48: 91; 49: 92; 50: 93; 51: 94; 52: 95; 53: 96; 54: 97; 55: 98; 56: 99; 57: 100; }; 55 | 44: { '-1': 43; 0: 44; 1: 45; 2: 46; 3: 47; 4: 48; 5: 49; 6: 50; 7: 51; 8: 52; 9: 53; 10: 54; 11: 55; 12: 56; 13: 57; 14: 58; 15: 59; 16: 60; 17: 61; 18: 62; 19: 63; 20: 64; 21: 65; 22: 66; 23: 67; 24: 68; 25: 69; 26: 70; 27: 71; 28: 72; 29: 73; 30: 74; 31: 75; 32: 76; 33: 77; 34: 78; 35: 79; 36: 80; 37: 81; 38: 82; 39: 83; 40: 84; 41: 85; 42: 86; 43: 87; 44: 88; 45: 89; 46: 90; 47: 91; 48: 92; 49: 93; 50: 94; 51: 95; 52: 96; 53: 97; 54: 98; 55: 99; 56: 100; }; 56 | 45: { '-1': 44; 0: 45; 1: 46; 2: 47; 3: 48; 4: 49; 5: 50; 6: 51; 7: 52; 8: 53; 9: 54; 10: 55; 11: 56; 12: 57; 13: 58; 14: 59; 15: 60; 16: 61; 17: 62; 18: 63; 19: 64; 20: 65; 21: 66; 22: 67; 23: 68; 24: 69; 25: 70; 26: 71; 27: 72; 28: 73; 29: 74; 30: 75; 31: 76; 32: 77; 33: 78; 34: 79; 35: 80; 36: 81; 37: 82; 38: 83; 39: 84; 40: 85; 41: 86; 42: 87; 43: 88; 44: 89; 45: 90; 46: 91; 47: 92; 48: 93; 49: 94; 50: 95; 51: 96; 52: 97; 53: 98; 54: 99; 55: 100; }; 57 | 46: { '-1': 45; 0: 46; 1: 47; 2: 48; 3: 49; 4: 50; 5: 51; 6: 52; 7: 53; 8: 54; 9: 55; 10: 56; 11: 57; 12: 58; 13: 59; 14: 60; 15: 61; 16: 62; 17: 63; 18: 64; 19: 65; 20: 66; 21: 67; 22: 68; 23: 69; 24: 70; 25: 71; 26: 72; 27: 73; 28: 74; 29: 75; 30: 76; 31: 77; 32: 78; 33: 79; 34: 80; 35: 81; 36: 82; 37: 83; 38: 84; 39: 85; 40: 86; 41: 87; 42: 88; 43: 89; 44: 90; 45: 91; 46: 92; 47: 93; 48: 94; 49: 95; 50: 96; 51: 97; 52: 98; 53: 99; 54: 100; }; 58 | 47: { '-1': 46; 0: 47; 1: 48; 2: 49; 3: 50; 4: 51; 5: 52; 6: 53; 7: 54; 8: 55; 9: 56; 10: 57; 11: 58; 12: 59; 13: 60; 14: 61; 15: 62; 16: 63; 17: 64; 18: 65; 19: 66; 20: 67; 21: 68; 22: 69; 23: 70; 24: 71; 25: 72; 26: 73; 27: 74; 28: 75; 29: 76; 30: 77; 31: 78; 32: 79; 33: 80; 34: 81; 35: 82; 36: 83; 37: 84; 38: 85; 39: 86; 40: 87; 41: 88; 42: 89; 43: 90; 44: 91; 45: 92; 46: 93; 47: 94; 48: 95; 49: 96; 50: 97; 51: 98; 52: 99; 53: 100; }; 59 | 48: { '-1': 47; 0: 48; 1: 49; 2: 50; 3: 51; 4: 52; 5: 53; 6: 54; 7: 55; 8: 56; 9: 57; 10: 58; 11: 59; 12: 60; 13: 61; 14: 62; 15: 63; 16: 64; 17: 65; 18: 66; 19: 67; 20: 68; 21: 69; 22: 70; 23: 71; 24: 72; 25: 73; 26: 74; 27: 75; 28: 76; 29: 77; 30: 78; 31: 79; 32: 80; 33: 81; 34: 82; 35: 83; 36: 84; 37: 85; 38: 86; 39: 87; 40: 88; 41: 89; 42: 90; 43: 91; 44: 92; 45: 93; 46: 94; 47: 95; 48: 96; 49: 97; 50: 98; 51: 99; 52: 100; }; 60 | 49: { '-1': 48; 0: 49; 1: 50; 2: 51; 3: 52; 4: 53; 5: 54; 6: 55; 7: 56; 8: 57; 9: 58; 10: 59; 11: 60; 12: 61; 13: 62; 14: 63; 15: 64; 16: 65; 17: 66; 18: 67; 19: 68; 20: 69; 21: 70; 22: 71; 23: 72; 24: 73; 25: 74; 26: 75; 27: 76; 28: 77; 29: 78; 30: 79; 31: 80; 32: 81; 33: 82; 34: 83; 35: 84; 36: 85; 37: 86; 38: 87; 39: 88; 40: 89; 41: 90; 42: 91; 43: 92; 44: 93; 45: 94; 46: 95; 47: 96; 48: 97; 49: 98; 50: 99; 51: 100; }; 61 | 50: { '-1': 49; 0: 50; 1: 51; 2: 52; 3: 53; 4: 54; 5: 55; 6: 56; 7: 57; 8: 58; 9: 59; 10: 60; 11: 61; 12: 62; 13: 63; 14: 64; 15: 65; 16: 66; 17: 67; 18: 68; 19: 69; 20: 70; 21: 71; 22: 72; 23: 73; 24: 74; 25: 75; 26: 76; 27: 77; 28: 78; 29: 79; 30: 80; 31: 81; 32: 82; 33: 83; 34: 84; 35: 85; 36: 86; 37: 87; 38: 88; 39: 89; 40: 90; 41: 91; 42: 92; 43: 93; 44: 94; 45: 95; 46: 96; 47: 97; 48: 98; 49: 99; 50: 100; }; 62 | 51: { '-1': 50; 0: 51; 1: 52; 2: 53; 3: 54; 4: 55; 5: 56; 6: 57; 7: 58; 8: 59; 9: 60; 10: 61; 11: 62; 12: 63; 13: 64; 14: 65; 15: 66; 16: 67; 17: 68; 18: 69; 19: 70; 20: 71; 21: 72; 22: 73; 23: 74; 24: 75; 25: 76; 26: 77; 27: 78; 28: 79; 29: 80; 30: 81; 31: 82; 32: 83; 33: 84; 34: 85; 35: 86; 36: 87; 37: 88; 38: 89; 39: 90; 40: 91; 41: 92; 42: 93; 43: 94; 44: 95; 45: 96; 46: 97; 47: 98; 48: 99; 49: 100; }; 63 | 52: { '-1': 51; 0: 52; 1: 53; 2: 54; 3: 55; 4: 56; 5: 57; 6: 58; 7: 59; 8: 60; 9: 61; 10: 62; 11: 63; 12: 64; 13: 65; 14: 66; 15: 67; 16: 68; 17: 69; 18: 70; 19: 71; 20: 72; 21: 73; 22: 74; 23: 75; 24: 76; 25: 77; 26: 78; 27: 79; 28: 80; 29: 81; 30: 82; 31: 83; 32: 84; 33: 85; 34: 86; 35: 87; 36: 88; 37: 89; 38: 90; 39: 91; 40: 92; 41: 93; 42: 94; 43: 95; 44: 96; 45: 97; 46: 98; 47: 99; 48: 100; }; 64 | 53: { '-1': 52; 0: 53; 1: 54; 2: 55; 3: 56; 4: 57; 5: 58; 6: 59; 7: 60; 8: 61; 9: 62; 10: 63; 11: 64; 12: 65; 13: 66; 14: 67; 15: 68; 16: 69; 17: 70; 18: 71; 19: 72; 20: 73; 21: 74; 22: 75; 23: 76; 24: 77; 25: 78; 26: 79; 27: 80; 28: 81; 29: 82; 30: 83; 31: 84; 32: 85; 33: 86; 34: 87; 35: 88; 36: 89; 37: 90; 38: 91; 39: 92; 40: 93; 41: 94; 42: 95; 43: 96; 44: 97; 45: 98; 46: 99; 47: 100; }; 65 | 54: { '-1': 53; 0: 54; 1: 55; 2: 56; 3: 57; 4: 58; 5: 59; 6: 60; 7: 61; 8: 62; 9: 63; 10: 64; 11: 65; 12: 66; 13: 67; 14: 68; 15: 69; 16: 70; 17: 71; 18: 72; 19: 73; 20: 74; 21: 75; 22: 76; 23: 77; 24: 78; 25: 79; 26: 80; 27: 81; 28: 82; 29: 83; 30: 84; 31: 85; 32: 86; 33: 87; 34: 88; 35: 89; 36: 90; 37: 91; 38: 92; 39: 93; 40: 94; 41: 95; 42: 96; 43: 97; 44: 98; 45: 99; 46: 100; }; 66 | 55: { '-1': 54; 0: 55; 1: 56; 2: 57; 3: 58; 4: 59; 5: 60; 6: 61; 7: 62; 8: 63; 9: 64; 10: 65; 11: 66; 12: 67; 13: 68; 14: 69; 15: 70; 16: 71; 17: 72; 18: 73; 19: 74; 20: 75; 21: 76; 22: 77; 23: 78; 24: 79; 25: 80; 26: 81; 27: 82; 28: 83; 29: 84; 30: 85; 31: 86; 32: 87; 33: 88; 34: 89; 35: 90; 36: 91; 37: 92; 38: 93; 39: 94; 40: 95; 41: 96; 42: 97; 43: 98; 44: 99; 45: 100; }; 67 | 56: { '-1': 55; 0: 56; 1: 57; 2: 58; 3: 59; 4: 60; 5: 61; 6: 62; 7: 63; 8: 64; 9: 65; 10: 66; 11: 67; 12: 68; 13: 69; 14: 70; 15: 71; 16: 72; 17: 73; 18: 74; 19: 75; 20: 76; 21: 77; 22: 78; 23: 79; 24: 80; 25: 81; 26: 82; 27: 83; 28: 84; 29: 85; 30: 86; 31: 87; 32: 88; 33: 89; 34: 90; 35: 91; 36: 92; 37: 93; 38: 94; 39: 95; 40: 96; 41: 97; 42: 98; 43: 99; 44: 100; }; 68 | 57: { '-1': 56; 0: 57; 1: 58; 2: 59; 3: 60; 4: 61; 5: 62; 6: 63; 7: 64; 8: 65; 9: 66; 10: 67; 11: 68; 12: 69; 13: 70; 14: 71; 15: 72; 16: 73; 17: 74; 18: 75; 19: 76; 20: 77; 21: 78; 22: 79; 23: 80; 24: 81; 25: 82; 26: 83; 27: 84; 28: 85; 29: 86; 30: 87; 31: 88; 32: 89; 33: 90; 34: 91; 35: 92; 36: 93; 37: 94; 38: 95; 39: 96; 40: 97; 41: 98; 42: 99; 43: 100; }; 69 | 58: { '-1': 57; 0: 58; 1: 59; 2: 60; 3: 61; 4: 62; 5: 63; 6: 64; 7: 65; 8: 66; 9: 67; 10: 68; 11: 69; 12: 70; 13: 71; 14: 72; 15: 73; 16: 74; 17: 75; 18: 76; 19: 77; 20: 78; 21: 79; 22: 80; 23: 81; 24: 82; 25: 83; 26: 84; 27: 85; 28: 86; 29: 87; 30: 88; 31: 89; 32: 90; 33: 91; 34: 92; 35: 93; 36: 94; 37: 95; 38: 96; 39: 97; 40: 98; 41: 99; 42: 100; }; 70 | 59: { '-1': 58; 0: 59; 1: 60; 2: 61; 3: 62; 4: 63; 5: 64; 6: 65; 7: 66; 8: 67; 9: 68; 10: 69; 11: 70; 12: 71; 13: 72; 14: 73; 15: 74; 16: 75; 17: 76; 18: 77; 19: 78; 20: 79; 21: 80; 22: 81; 23: 82; 24: 83; 25: 84; 26: 85; 27: 86; 28: 87; 29: 88; 30: 89; 31: 90; 32: 91; 33: 92; 34: 93; 35: 94; 36: 95; 37: 96; 38: 97; 39: 98; 40: 99; 41: 100; }; 71 | 60: { '-1': 59; 0: 60; 1: 61; 2: 62; 3: 63; 4: 64; 5: 65; 6: 66; 7: 67; 8: 68; 9: 69; 10: 70; 11: 71; 12: 72; 13: 73; 14: 74; 15: 75; 16: 76; 17: 77; 18: 78; 19: 79; 20: 80; 21: 81; 22: 82; 23: 83; 24: 84; 25: 85; 26: 86; 27: 87; 28: 88; 29: 89; 30: 90; 31: 91; 32: 92; 33: 93; 34: 94; 35: 95; 36: 96; 37: 97; 38: 98; 39: 99; 40: 100; }; 72 | 61: { '-1': 60; 0: 61; 1: 62; 2: 63; 3: 64; 4: 65; 5: 66; 6: 67; 7: 68; 8: 69; 9: 70; 10: 71; 11: 72; 12: 73; 13: 74; 14: 75; 15: 76; 16: 77; 17: 78; 18: 79; 19: 80; 20: 81; 21: 82; 22: 83; 23: 84; 24: 85; 25: 86; 26: 87; 27: 88; 28: 89; 29: 90; 30: 91; 31: 92; 32: 93; 33: 94; 34: 95; 35: 96; 36: 97; 37: 98; 38: 99; 39: 100; }; 73 | 62: { '-1': 61; 0: 62; 1: 63; 2: 64; 3: 65; 4: 66; 5: 67; 6: 68; 7: 69; 8: 70; 9: 71; 10: 72; 11: 73; 12: 74; 13: 75; 14: 76; 15: 77; 16: 78; 17: 79; 18: 80; 19: 81; 20: 82; 21: 83; 22: 84; 23: 85; 24: 86; 25: 87; 26: 88; 27: 89; 28: 90; 29: 91; 30: 92; 31: 93; 32: 94; 33: 95; 34: 96; 35: 97; 36: 98; 37: 99; 38: 100; }; 74 | 63: { '-1': 62; 0: 63; 1: 64; 2: 65; 3: 66; 4: 67; 5: 68; 6: 69; 7: 70; 8: 71; 9: 72; 10: 73; 11: 74; 12: 75; 13: 76; 14: 77; 15: 78; 16: 79; 17: 80; 18: 81; 19: 82; 20: 83; 21: 84; 22: 85; 23: 86; 24: 87; 25: 88; 26: 89; 27: 90; 28: 91; 29: 92; 30: 93; 31: 94; 32: 95; 33: 96; 34: 97; 35: 98; 36: 99; 37: 100; }; 75 | 64: { '-1': 63; 0: 64; 1: 65; 2: 66; 3: 67; 4: 68; 5: 69; 6: 70; 7: 71; 8: 72; 9: 73; 10: 74; 11: 75; 12: 76; 13: 77; 14: 78; 15: 79; 16: 80; 17: 81; 18: 82; 19: 83; 20: 84; 21: 85; 22: 86; 23: 87; 24: 88; 25: 89; 26: 90; 27: 91; 28: 92; 29: 93; 30: 94; 31: 95; 32: 96; 33: 97; 34: 98; 35: 99; 36: 100; }; 76 | 65: { '-1': 64; 0: 65; 1: 66; 2: 67; 3: 68; 4: 69; 5: 70; 6: 71; 7: 72; 8: 73; 9: 74; 10: 75; 11: 76; 12: 77; 13: 78; 14: 79; 15: 80; 16: 81; 17: 82; 18: 83; 19: 84; 20: 85; 21: 86; 22: 87; 23: 88; 24: 89; 25: 90; 26: 91; 27: 92; 28: 93; 29: 94; 30: 95; 31: 96; 32: 97; 33: 98; 34: 99; 35: 100; }; 77 | 66: { '-1': 65; 0: 66; 1: 67; 2: 68; 3: 69; 4: 70; 5: 71; 6: 72; 7: 73; 8: 74; 9: 75; 10: 76; 11: 77; 12: 78; 13: 79; 14: 80; 15: 81; 16: 82; 17: 83; 18: 84; 19: 85; 20: 86; 21: 87; 22: 88; 23: 89; 24: 90; 25: 91; 26: 92; 27: 93; 28: 94; 29: 95; 30: 96; 31: 97; 32: 98; 33: 99; 34: 100; }; 78 | 67: { '-1': 66; 0: 67; 1: 68; 2: 69; 3: 70; 4: 71; 5: 72; 6: 73; 7: 74; 8: 75; 9: 76; 10: 77; 11: 78; 12: 79; 13: 80; 14: 81; 15: 82; 16: 83; 17: 84; 18: 85; 19: 86; 20: 87; 21: 88; 22: 89; 23: 90; 24: 91; 25: 92; 26: 93; 27: 94; 28: 95; 29: 96; 30: 97; 31: 98; 32: 99; 33: 100; }; 79 | 68: { '-1': 67; 0: 68; 1: 69; 2: 70; 3: 71; 4: 72; 5: 73; 6: 74; 7: 75; 8: 76; 9: 77; 10: 78; 11: 79; 12: 80; 13: 81; 14: 82; 15: 83; 16: 84; 17: 85; 18: 86; 19: 87; 20: 88; 21: 89; 22: 90; 23: 91; 24: 92; 25: 93; 26: 94; 27: 95; 28: 96; 29: 97; 30: 98; 31: 99; 32: 100; }; 80 | 69: { '-1': 68; 0: 69; 1: 70; 2: 71; 3: 72; 4: 73; 5: 74; 6: 75; 7: 76; 8: 77; 9: 78; 10: 79; 11: 80; 12: 81; 13: 82; 14: 83; 15: 84; 16: 85; 17: 86; 18: 87; 19: 88; 20: 89; 21: 90; 22: 91; 23: 92; 24: 93; 25: 94; 26: 95; 27: 96; 28: 97; 29: 98; 30: 99; 31: 100; }; 81 | 70: { '-1': 69; 0: 70; 1: 71; 2: 72; 3: 73; 4: 74; 5: 75; 6: 76; 7: 77; 8: 78; 9: 79; 10: 80; 11: 81; 12: 82; 13: 83; 14: 84; 15: 85; 16: 86; 17: 87; 18: 88; 19: 89; 20: 90; 21: 91; 22: 92; 23: 93; 24: 94; 25: 95; 26: 96; 27: 97; 28: 98; 29: 99; 30: 100; }; 82 | 71: { '-1': 70; 0: 71; 1: 72; 2: 73; 3: 74; 4: 75; 5: 76; 6: 77; 7: 78; 8: 79; 9: 80; 10: 81; 11: 82; 12: 83; 13: 84; 14: 85; 15: 86; 16: 87; 17: 88; 18: 89; 19: 90; 20: 91; 21: 92; 22: 93; 23: 94; 24: 95; 25: 96; 26: 97; 27: 98; 28: 99; 29: 100; }; 83 | 72: { '-1': 71; 0: 72; 1: 73; 2: 74; 3: 75; 4: 76; 5: 77; 6: 78; 7: 79; 8: 80; 9: 81; 10: 82; 11: 83; 12: 84; 13: 85; 14: 86; 15: 87; 16: 88; 17: 89; 18: 90; 19: 91; 20: 92; 21: 93; 22: 94; 23: 95; 24: 96; 25: 97; 26: 98; 27: 99; 28: 100; }; 84 | 73: { '-1': 72; 0: 73; 1: 74; 2: 75; 3: 76; 4: 77; 5: 78; 6: 79; 7: 80; 8: 81; 9: 82; 10: 83; 11: 84; 12: 85; 13: 86; 14: 87; 15: 88; 16: 89; 17: 90; 18: 91; 19: 92; 20: 93; 21: 94; 22: 95; 23: 96; 24: 97; 25: 98; 26: 99; 27: 100; }; 85 | 74: { '-1': 73; 0: 74; 1: 75; 2: 76; 3: 77; 4: 78; 5: 79; 6: 80; 7: 81; 8: 82; 9: 83; 10: 84; 11: 85; 12: 86; 13: 87; 14: 88; 15: 89; 16: 90; 17: 91; 18: 92; 19: 93; 20: 94; 21: 95; 22: 96; 23: 97; 24: 98; 25: 99; 26: 100; }; 86 | 75: { '-1': 74; 0: 75; 1: 76; 2: 77; 3: 78; 4: 79; 5: 80; 6: 81; 7: 82; 8: 83; 9: 84; 10: 85; 11: 86; 12: 87; 13: 88; 14: 89; 15: 90; 16: 91; 17: 92; 18: 93; 19: 94; 20: 95; 21: 96; 22: 97; 23: 98; 24: 99; 25: 100; }; 87 | 76: { '-1': 75; 0: 76; 1: 77; 2: 78; 3: 79; 4: 80; 5: 81; 6: 82; 7: 83; 8: 84; 9: 85; 10: 86; 11: 87; 12: 88; 13: 89; 14: 90; 15: 91; 16: 92; 17: 93; 18: 94; 19: 95; 20: 96; 21: 97; 22: 98; 23: 99; 24: 100; }; 88 | 77: { '-1': 76; 0: 77; 1: 78; 2: 79; 3: 80; 4: 81; 5: 82; 6: 83; 7: 84; 8: 85; 9: 86; 10: 87; 11: 88; 12: 89; 13: 90; 14: 91; 15: 92; 16: 93; 17: 94; 18: 95; 19: 96; 20: 97; 21: 98; 22: 99; 23: 100; }; 89 | 78: { '-1': 77; 0: 78; 1: 79; 2: 80; 3: 81; 4: 82; 5: 83; 6: 84; 7: 85; 8: 86; 9: 87; 10: 88; 11: 89; 12: 90; 13: 91; 14: 92; 15: 93; 16: 94; 17: 95; 18: 96; 19: 97; 20: 98; 21: 99; 22: 100; }; 90 | 79: { '-1': 78; 0: 79; 1: 80; 2: 81; 3: 82; 4: 83; 5: 84; 6: 85; 7: 86; 8: 87; 9: 88; 10: 89; 11: 90; 12: 91; 13: 92; 14: 93; 15: 94; 16: 95; 17: 96; 18: 97; 19: 98; 20: 99; 21: 100; }; 91 | 80: { '-1': 79; 0: 80; 1: 81; 2: 82; 3: 83; 4: 84; 5: 85; 6: 86; 7: 87; 8: 88; 9: 89; 10: 90; 11: 91; 12: 92; 13: 93; 14: 94; 15: 95; 16: 96; 17: 97; 18: 98; 19: 99; 20: 100; }; 92 | 81: { '-1': 80; 0: 81; 1: 82; 2: 83; 3: 84; 4: 85; 5: 86; 6: 87; 7: 88; 8: 89; 9: 90; 10: 91; 11: 92; 12: 93; 13: 94; 14: 95; 15: 96; 16: 97; 17: 98; 18: 99; 19: 100; }; 93 | 82: { '-1': 81; 0: 82; 1: 83; 2: 84; 3: 85; 4: 86; 5: 87; 6: 88; 7: 89; 8: 90; 9: 91; 10: 92; 11: 93; 12: 94; 13: 95; 14: 96; 15: 97; 16: 98; 17: 99; 18: 100; }; 94 | 83: { '-1': 82; 0: 83; 1: 84; 2: 85; 3: 86; 4: 87; 5: 88; 6: 89; 7: 90; 8: 91; 9: 92; 10: 93; 11: 94; 12: 95; 13: 96; 14: 97; 15: 98; 16: 99; 17: 100; }; 95 | 84: { '-1': 83; 0: 84; 1: 85; 2: 86; 3: 87; 4: 88; 5: 89; 6: 90; 7: 91; 8: 92; 9: 93; 10: 94; 11: 95; 12: 96; 13: 97; 14: 98; 15: 99; 16: 100; }; 96 | 85: { '-1': 84; 0: 85; 1: 86; 2: 87; 3: 88; 4: 89; 5: 90; 6: 91; 7: 92; 8: 93; 9: 94; 10: 95; 11: 96; 12: 97; 13: 98; 14: 99; 15: 100; }; 97 | 86: { '-1': 85; 0: 86; 1: 87; 2: 88; 3: 89; 4: 90; 5: 91; 6: 92; 7: 93; 8: 94; 9: 95; 10: 96; 11: 97; 12: 98; 13: 99; 14: 100; }; 98 | 87: { '-1': 86; 0: 87; 1: 88; 2: 89; 3: 90; 4: 91; 5: 92; 6: 93; 7: 94; 8: 95; 9: 96; 10: 97; 11: 98; 12: 99; 13: 100; }; 99 | 88: { '-1': 87; 0: 88; 1: 89; 2: 90; 3: 91; 4: 92; 5: 93; 6: 94; 7: 95; 8: 96; 9: 97; 10: 98; 11: 99; 12: 100; }; 100 | 89: { '-1': 88; 0: 89; 1: 90; 2: 91; 3: 92; 4: 93; 5: 94; 6: 95; 7: 96; 8: 97; 9: 98; 10: 99; 11: 100; }; 101 | 90: { '-1': 89; 0: 90; 1: 91; 2: 92; 3: 93; 4: 94; 5: 95; 6: 96; 7: 97; 8: 98; 9: 99; 10: 100; }; 102 | 91: { '-1': 90; 0: 91; 1: 92; 2: 93; 3: 94; 4: 95; 5: 96; 6: 97; 7: 98; 8: 99; 9: 100; }; 103 | 92: { '-1': 91; 0: 92; 1: 93; 2: 94; 3: 95; 4: 96; 5: 97; 6: 98; 7: 99; 8: 100; }; 104 | 93: { '-1': 92; 0: 93; 1: 94; 2: 95; 3: 96; 4: 97; 5: 98; 6: 99; 7: 100; }; 105 | 94: { '-1': 93; 0: 94; 1: 95; 2: 96; 3: 97; 4: 98; 5: 99; 6: 100; }; 106 | 95: { '-1': 94; 0: 95; 1: 96; 2: 97; 3: 98; 4: 99; 5: 100; }; 107 | 96: { '-1': 95; 0: 96; 1: 97; 2: 98; 3: 99; 4: 100; }; 108 | 97: { '-1': 96; 0: 97; 1: 98; 2: 99; 3: 100; }; 109 | 98: { '-1': 97; 0: 98; 1: 99; 2: 100; }; 110 | 99: { '-1': 98; 0: 99; 1: 100; }; 111 | }; 112 | -------------------------------------------------------------------------------- /lib/conditional.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns {Then} if {If} is true, otherwise returns {Else} 3 | */ 4 | export type If< If, Then, Else > = If extends true ? Then : Else; 5 | -------------------------------------------------------------------------------- /lib/extends.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns true if T extends E, otherwise false 3 | */ 4 | export type Extends< T, E > = T extends E ? true : false; 5 | -------------------------------------------------------------------------------- /lib/falsy.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns true if {T} is falsy, i.e. it is any of: 3 | * false, 0, "", null, undefined 4 | * 5 | * Otherwise, returns false 6 | */ 7 | export type IsFalsy< T > = 8 | T extends false 9 | ? true 10 | : T extends 0 11 | ? true 12 | : T extends "" 13 | ? true 14 | : T extends null 15 | ? true 16 | : T extends undefined 17 | ? true 18 | : false; 19 | -------------------------------------------------------------------------------- /lib/fill.d.ts: -------------------------------------------------------------------------------- 1 | // 2 | // This is the generic version: 3 | // 4 | // type Fill< N extends number, T = null, Cur extends unknown[ ] = [ ] > = 5 | // Cur[ 'length' ] extends N 6 | // ? Cur 7 | // : Fill< N, [ ...Cur, T ] >; 8 | 9 | /** 10 | * Make a tuple of size N filled with T 11 | */ 12 | export type Fill< N extends number, T = any > = 13 | N extends N98 14 | ? FillMap< T >[ N ] 15 | : never; 16 | 17 | type FillMap< T > = { 18 | 0 : [ ] 19 | 1 : [ T ] 20 | 2 : [ T, T ] 21 | 3 : [ T, T, T ] 22 | 4 : [ T, T, T, T ] 23 | 5 : [ T, T, T, T, T ] 24 | 6 : [ T, T, T, T, T, T ] 25 | 7 : [ T, T, T, T, T, T, T ] 26 | 8 : [ T, T, T, T, T, T, T, T ] 27 | 9 : [ T, T, T, T, T, T, T, T, T ] 28 | 10 : [ T, T, T, T, T, T, T, T, T, T ] 29 | 11 : [ T, T, T, T, T, T, T, T, T, T, T ] 30 | 12 : [ T, T, T, T, T, T, T, T, T, T, T, T ] 31 | 13 : [ T, T, T, T, T, T, T, T, T, T, T, T, T ] 32 | 14 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 33 | 15 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 34 | 16 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 35 | 17 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 36 | 18 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 37 | 19 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 38 | 20 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 39 | 21 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 40 | 22 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ] 41 | 23 : [ 42 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 43 | ] 44 | 24 : [ 45 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 46 | T 47 | ] 48 | 25 : [ 49 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 50 | T, T 51 | ] 52 | 26 : [ 53 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 54 | T, T, T 55 | ] 56 | 27 : [ 57 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 58 | T, T, T, T 59 | ] 60 | 28 : [ 61 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 62 | T, T, T, T, T 63 | ] 64 | 29 : [ 65 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 66 | T, T, T, T, T, T 67 | ] 68 | 30 : [ 69 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 70 | T, T, T, T, T, T, T 71 | ] 72 | 31 : [ 73 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 74 | T, T, T, T, T, T, T, T 75 | ] 76 | 32 : [ 77 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 78 | T, T, T, T, T, T, T, T, T 79 | ] 80 | 33 : [ 81 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 82 | T, T, T, T, T, T, T, T, T, T 83 | ] 84 | 34 : [ 85 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 86 | T, T, T, T, T, T, T, T, T, T, T 87 | ] 88 | 35 : [ 89 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 90 | T, T, T, T, T, T, T, T, T, T, T, T 91 | ] 92 | 36 : [ 93 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 94 | T, T, T, T, T, T, T, T, T, T, T, T, T 95 | ] 96 | 37 : [ 97 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 98 | T, T, T, T, T, T, T, T, T, T, T, T, T, T 99 | ] 100 | 38 : [ 101 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 102 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 103 | ] 104 | 39 : [ 105 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 106 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 107 | ] 108 | 40 : [ 109 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 110 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 111 | ] 112 | 41 : [ 113 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 114 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 115 | ] 116 | 42 : [ 117 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 118 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 119 | ] 120 | 43 : [ 121 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 122 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 123 | ] 124 | 44 : [ 125 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 126 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 127 | ] 128 | 45 : [ 129 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 130 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 131 | ] 132 | 46 : [ 133 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 134 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 135 | ] 136 | 47 : [ 137 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 138 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 139 | T 140 | ] 141 | 48 : [ 142 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 143 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 144 | T, T 145 | ] 146 | 49 : [ 147 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 148 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 149 | T, T, T 150 | ] 151 | 50 : [ 152 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 153 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 154 | T, T, T, T 155 | ] 156 | 51 : [ 157 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 158 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 159 | T, T, T, T, T 160 | ] 161 | 52 : [ 162 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 163 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 164 | T, T, T, T, T, T 165 | ] 166 | 53 : [ 167 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 168 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 169 | T, T, T, T, T, T, T 170 | ] 171 | 54 : [ 172 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 173 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 174 | T, T, T, T, T, T, T, T 175 | ] 176 | 55 : [ 177 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 178 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 179 | T, T, T, T, T, T, T, T, T 180 | ] 181 | 56 : [ 182 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 183 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 184 | T, T, T, T, T, T, T, T, T, T 185 | ] 186 | 57 : [ 187 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 188 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 189 | T, T, T, T, T, T, T, T, T, T, T 190 | ] 191 | 58 : [ 192 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 193 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 194 | T, T, T, T, T, T, T, T, T, T, T, T 195 | ] 196 | 59 : [ 197 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 198 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 199 | T, T, T, T, T, T, T, T, T, T, T, T, T 200 | ] 201 | 60 : [ 202 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 203 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 204 | T, T, T, T, T, T, T, T, T, T, T, T, T, T 205 | ] 206 | 61 : [ 207 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 208 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 209 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 210 | ] 211 | 62 : [ 212 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 213 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 214 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 215 | ] 216 | 63 : [ 217 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 218 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 219 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 220 | ] 221 | 64 : [ 222 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 223 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 224 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 225 | ] 226 | 65 : [ 227 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 228 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 229 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 230 | ] 231 | 66 : [ 232 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 233 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 234 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 235 | ] 236 | 67 : [ 237 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 238 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 239 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 240 | ] 241 | 68 : [ 242 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 243 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 244 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 245 | ] 246 | 69 : [ 247 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 248 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 249 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 250 | ] 251 | 70 : [ 252 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 253 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 254 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 255 | T 256 | ] 257 | 71 : [ 258 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 259 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 260 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 261 | T, T 262 | ] 263 | 72 : [ 264 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 265 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 266 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 267 | T, T, T 268 | ] 269 | 73 : [ 270 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 271 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 272 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 273 | T, T, T, T 274 | ] 275 | 74 : [ 276 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 277 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 278 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 279 | T, T, T, T, T 280 | ] 281 | 75 : [ 282 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 283 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 284 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 285 | T, T, T, T, T, T 286 | ] 287 | 76 : [ 288 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 289 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 290 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 291 | T, T, T, T, T, T, T 292 | ] 293 | 77 : [ 294 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 295 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 296 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 297 | T, T, T, T, T, T, T, T 298 | ] 299 | 78 : [ 300 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 301 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 302 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 303 | T, T, T, T, T, T, T, T, T 304 | ] 305 | 79 : [ 306 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 307 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 308 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 309 | T, T, T, T, T, T, T, T, T, T 310 | ] 311 | 80 : [ 312 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 313 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 314 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 315 | T, T, T, T, T, T, T, T, T, T, T 316 | ] 317 | 81 : [ 318 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 319 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 320 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 321 | T, T, T, T, T, T, T, T, T, T, T, T 322 | ] 323 | 82 : [ 324 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 325 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 326 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 327 | T, T, T, T, T, T, T, T, T, T, T, T, T 328 | ] 329 | 83 : [ 330 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 331 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 332 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 333 | T, T, T, T, T, T, T, T, T, T, T, T, T, T 334 | ] 335 | 84 : [ 336 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 337 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 338 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 339 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 340 | ] 341 | 85 : [ 342 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 343 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 344 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 345 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 346 | ] 347 | 86 : [ 348 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 349 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 350 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 351 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 352 | ] 353 | 87 : [ 354 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 355 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 356 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 357 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 358 | ] 359 | 88 : [ 360 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 361 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 362 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 363 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 364 | ] 365 | 89 : [ 366 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 367 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 368 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 369 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 370 | ] 371 | 90 : [ 372 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 373 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 374 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 375 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 376 | ] 377 | 91 : [ 378 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 379 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 380 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 381 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 382 | ] 383 | 92 : [ 384 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 385 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 386 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 387 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T 388 | ] 389 | 93 : [ 390 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 391 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 392 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 393 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 394 | T 395 | ] 396 | 94 : [ 397 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 398 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 399 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 400 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 401 | T, T 402 | ] 403 | 95 : [ 404 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 405 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 406 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 407 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 408 | T, T, T 409 | ] 410 | 96 : [ 411 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 412 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 413 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 414 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 415 | T, T, T, T 416 | ] 417 | 97 : [ 418 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 419 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 420 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 421 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 422 | T, T, T, T, T 423 | ] 424 | 98 : [ 425 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 426 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 427 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 428 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 429 | T, T, T, T, T, T 430 | ] 431 | 99 : [ 432 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 433 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 434 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 435 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, 436 | T, T, T, T, T, T, T 437 | ] 438 | }; 439 | 440 | type N98 = keyof FillMap< 0 >; 441 | -------------------------------------------------------------------------------- /lib/first.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the first element of a tuple 3 | */ 4 | export type First< T extends readonly unknown[ ], Fallback = never > = 5 | T[ 'length' ] extends 0 ? Fallback : T[ 0 ]; 6 | -------------------------------------------------------------------------------- /lib/greater-than.d.ts: -------------------------------------------------------------------------------- 1 | import { Fill } from './fill' 2 | import { LargerThan } from './larger-than' 3 | 4 | /** 5 | * Returns true if A is greater than B. 6 | * 7 | * If OrEqual is set to true, also returns true if A equals B. 8 | */ 9 | export type GreaterThan 10 | < 11 | A extends number, 12 | B extends number, 13 | OrEqual = false 14 | > = 15 | A extends B 16 | ? OrEqual 17 | : LargerThan< Fill< A >, Fill< B > >; 18 | -------------------------------------------------------------------------------- /lib/is.d.ts: -------------------------------------------------------------------------------- 1 | import { And } from './logic' 2 | import { Extends } from './extends' 3 | 4 | /** 5 | * Returns true if {T} and {U} are the exact same type, otherwise false 6 | */ 7 | export type Is< T, U > = And< Extends< T, U >, Extends< U, T > >; 8 | -------------------------------------------------------------------------------- /lib/larger-than.d.ts: -------------------------------------------------------------------------------- 1 | import type { Rest } from './rest' 2 | import type { SameLength } from './same-length' 3 | 4 | /** 5 | * Return true if tuple A is of greater length than tuple B. 6 | * 7 | * If OrEqual is set to true, the comparison is LargerThan-or-equal. 8 | */ 9 | export type LargerThan 10 | < 11 | A extends readonly unknown[ ], 12 | B extends readonly unknown[ ], 13 | OrEqual = false 14 | > = 15 | A extends never ? never : // These cover "too large" tuples 16 | B extends never ? never : // e.g. created by Fill 17 | SameLength< A, B > extends true 18 | ? OrEqual 19 | : LargerAsSubset< A, B >; 20 | 21 | type LargerAsSubset 22 | < 23 | A extends readonly unknown[ ], 24 | B extends readonly unknown[ ], 25 | > = 26 | A extends [ ...B, ...unknown[ ] ] 27 | ? true 28 | : B extends [ ...A, ...unknown[ ] ] 29 | ? false 30 | : LargerByLength< A, B >; 31 | 32 | type LargerByLength 33 | < 34 | A extends readonly unknown[ ], 35 | B extends readonly unknown[ ], 36 | > = 37 | A[ 'length' ] extends 0 38 | ? false 39 | : B[ 'length' ] extends 0 40 | ? true 41 | : LargerByLength< Rest< A >, Rest< B > > ; 42 | -------------------------------------------------------------------------------- /lib/last.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the last element of a tuple 3 | */ 4 | export type Last< T extends readonly unknown[ ], Fallback = never > = 5 | T[ 'length' ] extends 0 ? Fallback : ( [ 42, ...T ] )[ T[ 'length' ] ]; 6 | -------------------------------------------------------------------------------- /lib/length-of.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the length of the tuple T, or {IfUnbound} (defaults to -1) if the 3 | * tuple is of infinite size. 4 | */ 5 | export type LengthOf< T extends readonly unknown[ ], IfUnbound = -1 > = 6 | number extends T[ 'length' ] ? IfUnbound : T[ 'length' ]; 7 | -------------------------------------------------------------------------------- /lib/logic.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Return true if A *and* B is true, otherwise returns false 3 | */ 4 | export type And< A, B > = 5 | A extends true 6 | ? B extends true 7 | ? true 8 | : false 9 | : false; 10 | 11 | /** 12 | * Return true if A *or* B is true, otherwise returns false 13 | */ 14 | export type Or< A, B > = 15 | A extends true 16 | ? true 17 | : B extends true 18 | ? true 19 | : false; 20 | 21 | /** 22 | * Return true if A is not B, otherwise returns false 23 | */ 24 | export type Xor< A, B > = 25 | A extends true 26 | ? B extends false 27 | ? true 28 | : false 29 | : B extends true 30 | ? true 31 | : false; 32 | -------------------------------------------------------------------------------- /lib/mul.d.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Multiply two numbers (each between 0 and 98) where the result is <= 100 4 | */ 5 | export type Mul< A extends number, B extends number > = 6 | A extends keyof MulTable 7 | ? B extends keyof MulTable[ A ] 8 | ? MulTable[ A ][ B ] 9 | : never 10 | : never; 11 | 12 | type MulTable = { 13 | 0: { 0: 0; 1: 0; 2: 0; 3: 0; 4: 0; 5: 0; 6: 0; 7: 0; 8: 0; 9: 0; 10: 0; 11: 0; 12: 0; 13: 0; 14: 0; 15: 0; 16: 0; 17: 0; 18: 0; 19: 0; 20: 0; 21: 0; 22: 0; 23: 0; 24: 0; 25: 0; 26: 0; 27: 0; 28: 0; 29: 0; 30: 0; 31: 0; 32: 0; 33: 0; 34: 0; 35: 0; 36: 0; 37: 0; 38: 0; 39: 0; 40: 0; 41: 0; 42: 0; 43: 0; 44: 0; 45: 0; 46: 0; 47: 0; 48: 0; 49: 0; 50: 0; 51: 0; 52: 0; 53: 0; 54: 0; 55: 0; 56: 0; 57: 0; 58: 0; 59: 0; 60: 0; 61: 0; 62: 0; 63: 0; 64: 0; 65: 0; 66: 0; 67: 0; 68: 0; 69: 0; 70: 0; 71: 0; 72: 0; 73: 0; 74: 0; 75: 0; 76: 0; 77: 0; 78: 0; 79: 0; 80: 0; 81: 0; 82: 0; 83: 0; 84: 0; 85: 0; 86: 0; 87: 0; 88: 0; 89: 0; 90: 0; 91: 0; 92: 0; 93: 0; 94: 0; 95: 0; 96: 0; 97: 0; 98: 0; 99: 0; }; 14 | 1: { 0: 0; 1: 1; 2: 2; 3: 3; 4: 4; 5: 5; 6: 6; 7: 7; 8: 8; 9: 9; 10: 10; 11: 11; 12: 12; 13: 13; 14: 14; 15: 15; 16: 16; 17: 17; 18: 18; 19: 19; 20: 20; 21: 21; 22: 22; 23: 23; 24: 24; 25: 25; 26: 26; 27: 27; 28: 28; 29: 29; 30: 30; 31: 31; 32: 32; 33: 33; 34: 34; 35: 35; 36: 36; 37: 37; 38: 38; 39: 39; 40: 40; 41: 41; 42: 42; 43: 43; 44: 44; 45: 45; 46: 46; 47: 47; 48: 48; 49: 49; 50: 50; 51: 51; 52: 52; 53: 53; 54: 54; 55: 55; 56: 56; 57: 57; 58: 58; 59: 59; 60: 60; 61: 61; 62: 62; 63: 63; 64: 64; 65: 65; 66: 66; 67: 67; 68: 68; 69: 69; 70: 70; 71: 71; 72: 72; 73: 73; 74: 74; 75: 75; 76: 76; 77: 77; 78: 78; 79: 79; 80: 80; 81: 81; 82: 82; 83: 83; 84: 84; 85: 85; 86: 86; 87: 87; 88: 88; 89: 89; 90: 90; 91: 91; 92: 92; 93: 93; 94: 94; 95: 95; 96: 96; 97: 97; 98: 98; 99: 99; }; 15 | 2: { 0: 0; 1: 2; 2: 4; 3: 6; 4: 8; 5: 10; 6: 12; 7: 14; 8: 16; 9: 18; 10: 20; 11: 22; 12: 24; 13: 26; 14: 28; 15: 30; 16: 32; 17: 34; 18: 36; 19: 38; 20: 40; 21: 42; 22: 44; 23: 46; 24: 48; 25: 50; 26: 52; 27: 54; 28: 56; 29: 58; 30: 60; 31: 62; 32: 64; 33: 66; 34: 68; 35: 70; 36: 72; 37: 74; 38: 76; 39: 78; 40: 80; 41: 82; 42: 84; 43: 86; 44: 88; 45: 90; 46: 92; 47: 94; 48: 96; 49: 98; 50: 100; }; 16 | 3: { 0: 0; 1: 3; 2: 6; 3: 9; 4: 12; 5: 15; 6: 18; 7: 21; 8: 24; 9: 27; 10: 30; 11: 33; 12: 36; 13: 39; 14: 42; 15: 45; 16: 48; 17: 51; 18: 54; 19: 57; 20: 60; 21: 63; 22: 66; 23: 69; 24: 72; 25: 75; 26: 78; 27: 81; 28: 84; 29: 87; 30: 90; 31: 93; 32: 96; 33: 99; }; 17 | 4: { 0: 0; 1: 4; 2: 8; 3: 12; 4: 16; 5: 20; 6: 24; 7: 28; 8: 32; 9: 36; 10: 40; 11: 44; 12: 48; 13: 52; 14: 56; 15: 60; 16: 64; 17: 68; 18: 72; 19: 76; 20: 80; 21: 84; 22: 88; 23: 92; 24: 96; 25: 100; }; 18 | 5: { 0: 0; 1: 5; 2: 10; 3: 15; 4: 20; 5: 25; 6: 30; 7: 35; 8: 40; 9: 45; 10: 50; 11: 55; 12: 60; 13: 65; 14: 70; 15: 75; 16: 80; 17: 85; 18: 90; 19: 95; 20: 100; }; 19 | 6: { 0: 0; 1: 6; 2: 12; 3: 18; 4: 24; 5: 30; 6: 36; 7: 42; 8: 48; 9: 54; 10: 60; 11: 66; 12: 72; 13: 78; 14: 84; 15: 90; 16: 96; }; 20 | 7: { 0: 0; 1: 7; 2: 14; 3: 21; 4: 28; 5: 35; 6: 42; 7: 49; 8: 56; 9: 63; 10: 70; 11: 77; 12: 84; 13: 91; 14: 98; }; 21 | 8: { 0: 0; 1: 8; 2: 16; 3: 24; 4: 32; 5: 40; 6: 48; 7: 56; 8: 64; 9: 72; 10: 80; 11: 88; 12: 96; }; 22 | 9: { 0: 0; 1: 9; 2: 18; 3: 27; 4: 36; 5: 45; 6: 54; 7: 63; 8: 72; 9: 81; 10: 90; 11: 99; }; 23 | 10: { 0: 0; 1: 10; 2: 20; 3: 30; 4: 40; 5: 50; 6: 60; 7: 70; 8: 80; 9: 90; 10: 100; }; 24 | 11: { 0: 0; 1: 11; 2: 22; 3: 33; 4: 44; 5: 55; 6: 66; 7: 77; 8: 88; 9: 99; }; 25 | 12: { 0: 0; 1: 12; 2: 24; 3: 36; 4: 48; 5: 60; 6: 72; 7: 84; 8: 96; }; 26 | 13: { 0: 0; 1: 13; 2: 26; 3: 39; 4: 52; 5: 65; 6: 78; 7: 91; }; 27 | 14: { 0: 0; 1: 14; 2: 28; 3: 42; 4: 56; 5: 70; 6: 84; 7: 98; }; 28 | 15: { 0: 0; 1: 15; 2: 30; 3: 45; 4: 60; 5: 75; 6: 90; }; 29 | 16: { 0: 0; 1: 16; 2: 32; 3: 48; 4: 64; 5: 80; 6: 96; }; 30 | 17: { 0: 0; 1: 17; 2: 34; 3: 51; 4: 68; 5: 85; }; 31 | 18: { 0: 0; 1: 18; 2: 36; 3: 54; 4: 72; 5: 90; }; 32 | 19: { 0: 0; 1: 19; 2: 38; 3: 57; 4: 76; 5: 95; }; 33 | 20: { 0: 0; 1: 20; 2: 40; 3: 60; 4: 80; 5: 100; }; 34 | 21: { 0: 0; 1: 21; 2: 42; 3: 63; 4: 84; }; 35 | 22: { 0: 0; 1: 22; 2: 44; 3: 66; 4: 88; }; 36 | 23: { 0: 0; 1: 23; 2: 46; 3: 69; 4: 92; }; 37 | 24: { 0: 0; 1: 24; 2: 48; 3: 72; 4: 96; }; 38 | 25: { 0: 0; 1: 25; 2: 50; 3: 75; 4: 100; }; 39 | 26: { 0: 0; 1: 26; 2: 52; 3: 78; }; 40 | 27: { 0: 0; 1: 27; 2: 54; 3: 81; }; 41 | 28: { 0: 0; 1: 28; 2: 56; 3: 84; }; 42 | 29: { 0: 0; 1: 29; 2: 58; 3: 87; }; 43 | 30: { 0: 0; 1: 30; 2: 60; 3: 90; }; 44 | 31: { 0: 0; 1: 31; 2: 62; 3: 93; }; 45 | 32: { 0: 0; 1: 32; 2: 64; 3: 96; }; 46 | 33: { 0: 0; 1: 33; 2: 66; 3: 99; }; 47 | 34: { 0: 0; 1: 34; 2: 68; }; 48 | 35: { 0: 0; 1: 35; 2: 70; }; 49 | 36: { 0: 0; 1: 36; 2: 72; }; 50 | 37: { 0: 0; 1: 37; 2: 74; }; 51 | 38: { 0: 0; 1: 38; 2: 76; }; 52 | 39: { 0: 0; 1: 39; 2: 78; }; 53 | 40: { 0: 0; 1: 40; 2: 80; }; 54 | 41: { 0: 0; 1: 41; 2: 82; }; 55 | 42: { 0: 0; 1: 42; 2: 84; }; 56 | 43: { 0: 0; 1: 43; 2: 86; }; 57 | 44: { 0: 0; 1: 44; 2: 88; }; 58 | 45: { 0: 0; 1: 45; 2: 90; }; 59 | 46: { 0: 0; 1: 46; 2: 92; }; 60 | 47: { 0: 0; 1: 47; 2: 94; }; 61 | 48: { 0: 0; 1: 48; 2: 96; }; 62 | 49: { 0: 0; 1: 49; 2: 98; }; 63 | 50: { 0: 0; 1: 50; 2: 100; }; 64 | 51: { 0: 0; 1: 51; }; 65 | 52: { 0: 0; 1: 52; }; 66 | 53: { 0: 0; 1: 53; }; 67 | 54: { 0: 0; 1: 54; }; 68 | 55: { 0: 0; 1: 55; }; 69 | 56: { 0: 0; 1: 56; }; 70 | 57: { 0: 0; 1: 57; }; 71 | 58: { 0: 0; 1: 58; }; 72 | 59: { 0: 0; 1: 59; }; 73 | 60: { 0: 0; 1: 60; }; 74 | 61: { 0: 0; 1: 61; }; 75 | 62: { 0: 0; 1: 62; }; 76 | 63: { 0: 0; 1: 63; }; 77 | 64: { 0: 0; 1: 64; }; 78 | 65: { 0: 0; 1: 65; }; 79 | 66: { 0: 0; 1: 66; }; 80 | 67: { 0: 0; 1: 67; }; 81 | 68: { 0: 0; 1: 68; }; 82 | 69: { 0: 0; 1: 69; }; 83 | 70: { 0: 0; 1: 70; }; 84 | 71: { 0: 0; 1: 71; }; 85 | 72: { 0: 0; 1: 72; }; 86 | 73: { 0: 0; 1: 73; }; 87 | 74: { 0: 0; 1: 74; }; 88 | 75: { 0: 0; 1: 75; }; 89 | 76: { 0: 0; 1: 76; }; 90 | 77: { 0: 0; 1: 77; }; 91 | 78: { 0: 0; 1: 78; }; 92 | 79: { 0: 0; 1: 79; }; 93 | 80: { 0: 0; 1: 80; }; 94 | 81: { 0: 0; 1: 81; }; 95 | 82: { 0: 0; 1: 82; }; 96 | 83: { 0: 0; 1: 83; }; 97 | 84: { 0: 0; 1: 84; }; 98 | 85: { 0: 0; 1: 85; }; 99 | 86: { 0: 0; 1: 86; }; 100 | 87: { 0: 0; 1: 87; }; 101 | 88: { 0: 0; 1: 88; }; 102 | 89: { 0: 0; 1: 89; }; 103 | 90: { 0: 0; 1: 90; }; 104 | 91: { 0: 0; 1: 91; }; 105 | 92: { 0: 0; 1: 92; }; 106 | 93: { 0: 0; 1: 93; }; 107 | 94: { 0: 0; 1: 94; }; 108 | 95: { 0: 0; 1: 95; }; 109 | 96: { 0: 0; 1: 96; }; 110 | 97: { 0: 0; 1: 97; }; 111 | 98: { 0: 0; 1: 98; }; 112 | 99: { 0: 0; 1: 99; }; 113 | }; 114 | -------------------------------------------------------------------------------- /lib/not.d.ts: -------------------------------------------------------------------------------- 1 | import { IsFalsy } from './falsy' 2 | 3 | /** 4 | * Returns true if {T} is false, and false if {T} is true. 5 | * 6 | * The second optional argument is Strict and defaults to true. If this is set 7 | * to false, the return will be true for any non-truthy type, i.e.: 8 | * false, 0, "", null, undefined 9 | * 10 | * If T is not true or false, the return is never. 11 | */ 12 | export type Not< T, Strict extends boolean = true > = 13 | T extends false 14 | ? true 15 | : T extends true 16 | ? false 17 | : Strict extends false 18 | ? IsFalsy< T > 19 | : never; 20 | -------------------------------------------------------------------------------- /lib/optional.d.ts: -------------------------------------------------------------------------------- 1 | import type { ReverseRest } from './reverse-rest' 2 | import type { Truncate } from './truncate' 3 | import type { Shift } from './shift' 4 | 5 | /** 6 | * Append an optional tuple to a required tuple. 7 | * 8 | * E.g: 9 | * AppendOptional< [ 1, 2 ], [ 3, 4 ] > outputs: 10 | * | [ 1, 2 ] 11 | * | [ 1, 2, 3 ] 12 | * | [ 1, 2, 3, 4 ] 13 | */ 14 | export type AppendOptional 15 | < 16 | R extends readonly unknown[ ], 17 | O extends readonly unknown[ ] 18 | > = 19 | O[ 'length' ] extends 0 ? R : 20 | | [ ...R, ...O ] 21 | | AppendOptional< R, ReverseRest< O > >; 22 | 23 | /** 24 | * Turn the elements in T from index N into optional. 25 | */ 26 | export type OptionalFrom< T extends readonly unknown[ ], N extends number > = 27 | AppendOptional< Truncate< T, N >, Shift< T, N > >; 28 | -------------------------------------------------------------------------------- /lib/overwrite.d.ts: -------------------------------------------------------------------------------- 1 | import { LargerThan } from './larger-than' 2 | import { Shift } from './shift' 3 | 4 | /** 5 | * Overwrite the elements in tuple T1 with those in tuple T2. 6 | * 7 | * If T2 is larger than or same size as T1, T2 as is is returned. 8 | * If T2 is smaller, the returned tuple is T2 followed by the rest of the 9 | * elements in T1. 10 | */ 11 | export type Overwrite 12 | < 13 | T1 extends readonly unknown[ ], 14 | T2 extends readonly unknown[ ] 15 | >= 16 | LargerThan< T2, T1, true > extends true 17 | ? T2 18 | : [ ...T2, ...Shift< T1, T2[ 'length' ] > ]; 19 | -------------------------------------------------------------------------------- /lib/rest.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the last types of an array, excluding the first 3 | */ 4 | export type Rest< T extends readonly unknown[ ] > = 5 | T extends readonly [ infer _, ...infer U ] ? U : [ ]; 6 | -------------------------------------------------------------------------------- /lib/reverse-rest.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the first types of an array, excluding the last 3 | */ 4 | export type ReverseRest< T extends readonly unknown[ ] > = 5 | T extends readonly [ ...infer U, infer _ ] ? U : [ ]; 6 | -------------------------------------------------------------------------------- /lib/reverse.d.ts: -------------------------------------------------------------------------------- 1 | import type { Rest } from './rest' 2 | import type { First } from './first' 3 | 4 | 5 | /** 6 | * Reverse the order of the elements in tuple T 7 | */ 8 | export type Reverse 9 | < 10 | T extends readonly unknown[ ], 11 | Ret extends unknown[ ] = [ ] 12 | > = 13 | T[ 'length' ] extends 0 14 | ? Ret 15 | : Reverse< Rest< T >, [ First< T >, ...Ret ] >; 16 | -------------------------------------------------------------------------------- /lib/same-length.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Return true if tuple A has the same length as tuple B 3 | */ 4 | export type SameLength 5 | < 6 | A extends readonly unknown[ ], 7 | B extends readonly unknown[ ] 8 | > = 9 | A[ 'length' ] extends B[ 'length' ] ? true : false; 10 | -------------------------------------------------------------------------------- /lib/shift.d.ts: -------------------------------------------------------------------------------- 1 | // 2 | // This is the generic solution - doesn't scale very well with TypeScript: 3 | // 4 | // type Shift 5 | // < 6 | // T extends readonly unknown[ ], 7 | // N extends number, 8 | // Trash extends unknown[ ] = [ ] 9 | // > = 10 | // N extends Trash[ 'length' ] 11 | // ? T 12 | // : Shift< Rest< T >, N, [ ...Trash, First< T > ] >; 13 | 14 | /** 15 | * Remove N first elements from array 16 | */ 17 | export type Shift< T extends readonly unknown[ ], N extends number > = 18 | N extends 0 19 | ? T 20 | : T extends readonly [ infer T1, infer T2, infer T3, infer T4, ...infer Tx ] 21 | ? N extends 1 ? [ T2, T3, T4, ...Tx ] 22 | : N extends 2 ? [ T3, T4, ...Tx ] 23 | : N extends 3 ? [ T4, ...Tx ] 24 | : N extends 4 ? Tx 25 | : [ ] // This is the above-max-limit fallback 26 | : T extends readonly [ infer T1, infer T2, infer T3 ] 27 | ? N extends 1 ? [ T2, T3 ] 28 | : N extends 2 ? [ T3 ] 29 | : [ ] 30 | : T extends readonly [ infer T1, infer T2 ] 31 | ? N extends 1 ? [ T2 ] 32 | : [ ] 33 | : T extends readonly [ infer T1 ] 34 | ? [ ] 35 | : [ ] 36 | ; 37 | -------------------------------------------------------------------------------- /lib/slice.d.ts: -------------------------------------------------------------------------------- 1 | import type { Shift } from './shift' 2 | import type { Add } from './add' 3 | import type { Truncate } from './truncate' 4 | 5 | 6 | /** 7 | * Slice a tuple from Start to (and not including) End 8 | * 9 | * Set Inclusive to true, to have End be inclusive 10 | */ 11 | export type Slice 12 | < 13 | T extends readonly unknown[ ], 14 | Start extends number = 0, 15 | End extends number = -1, 16 | Inclusive = false, 17 | > = 18 | End extends -1 19 | ? Shift< T, Start > 20 | : Inclusive extends true 21 | ? Shift< Truncate< T, Add< End, 1 > >, Start > 22 | : Shift< Truncate< T, End >, Start >; 23 | -------------------------------------------------------------------------------- /lib/sub.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Subtract {B} from {A}. 3 | */ 4 | export type Sub< A extends number, B extends number > = 5 | A extends keyof SubMap ? B extends keyof SubMap[ A ] ? SubMap[ A ][ B ] 6 | : never 7 | : never; 8 | 9 | type SubMap = { 10 | '-1': { '-1': 0; 0: -1; 1: -2; }; 11 | 0: { '-1': 1; 0: 0; 1: -1; 2: -2; }; 12 | 1: { '-1': 2; 0: 1; 1: 0; 2: -1; 3: -2; }; 13 | 2: { '-1': 3; 0: 2; 1: 1; 2: 0; 3: -1; 4: -2; }; 14 | 3: { '-1': 4; 0: 3; 1: 2; 2: 1; 3: 0; 4: -1; 5: -2; }; 15 | 4: { '-1': 5; 0: 4; 1: 3; 2: 2; 3: 1; 4: 0; 5: -1; 6: -2; }; 16 | 5: { '-1': 6; 0: 5; 1: 4; 2: 3; 3: 2; 4: 1; 5: 0; 6: -1; 7: -2; }; 17 | 6: { '-1': 7; 0: 6; 1: 5; 2: 4; 3: 3; 4: 2; 5: 1; 6: 0; 7: -1; 8: -2; }; 18 | 7: { '-1': 8; 0: 7; 1: 6; 2: 5; 3: 4; 4: 3; 5: 2; 6: 1; 7: 0; 8: -1; 9: -2; }; 19 | 8: { '-1': 9; 0: 8; 1: 7; 2: 6; 3: 5; 4: 4; 5: 3; 6: 2; 7: 1; 8: 0; 9: -1; 10: -2; }; 20 | 9: { '-1': 10; 0: 9; 1: 8; 2: 7; 3: 6; 4: 5; 5: 4; 6: 3; 7: 2; 8: 1; 9: 0; 10: -1; 11: -2; }; 21 | 10: { '-1': 11; 0: 10; 1: 9; 2: 8; 3: 7; 4: 6; 5: 5; 6: 4; 7: 3; 8: 2; 9: 1; 10: 0; 11: -1; 12: -2; }; 22 | 11: { '-1': 12; 0: 11; 1: 10; 2: 9; 3: 8; 4: 7; 5: 6; 6: 5; 7: 4; 8: 3; 9: 2; 10: 1; 11: 0; 12: -1; 13: -2; }; 23 | 12: { '-1': 13; 0: 12; 1: 11; 2: 10; 3: 9; 4: 8; 5: 7; 6: 6; 7: 5; 8: 4; 9: 3; 10: 2; 11: 1; 12: 0; 13: -1; 14: -2; }; 24 | 13: { '-1': 14; 0: 13; 1: 12; 2: 11; 3: 10; 4: 9; 5: 8; 6: 7; 7: 6; 8: 5; 9: 4; 10: 3; 11: 2; 12: 1; 13: 0; 14: -1; 15: -2; }; 25 | 14: { '-1': 15; 0: 14; 1: 13; 2: 12; 3: 11; 4: 10; 5: 9; 6: 8; 7: 7; 8: 6; 9: 5; 10: 4; 11: 3; 12: 2; 13: 1; 14: 0; 15: -1; 16: -2; }; 26 | 15: { '-1': 16; 0: 15; 1: 14; 2: 13; 3: 12; 4: 11; 5: 10; 6: 9; 7: 8; 8: 7; 9: 6; 10: 5; 11: 4; 12: 3; 13: 2; 14: 1; 15: 0; 16: -1; 17: -2; }; 27 | 16: { '-1': 17; 0: 16; 1: 15; 2: 14; 3: 13; 4: 12; 5: 11; 6: 10; 7: 9; 8: 8; 9: 7; 10: 6; 11: 5; 12: 4; 13: 3; 14: 2; 15: 1; 16: 0; 17: -1; 18: -2; }; 28 | 17: { '-1': 18; 0: 17; 1: 16; 2: 15; 3: 14; 4: 13; 5: 12; 6: 11; 7: 10; 8: 9; 9: 8; 10: 7; 11: 6; 12: 5; 13: 4; 14: 3; 15: 2; 16: 1; 17: 0; 18: -1; 19: -2; }; 29 | 18: { '-1': 19; 0: 18; 1: 17; 2: 16; 3: 15; 4: 14; 5: 13; 6: 12; 7: 11; 8: 10; 9: 9; 10: 8; 11: 7; 12: 6; 13: 5; 14: 4; 15: 3; 16: 2; 17: 1; 18: 0; 19: -1; 20: -2; }; 30 | 19: { '-1': 20; 0: 19; 1: 18; 2: 17; 3: 16; 4: 15; 5: 14; 6: 13; 7: 12; 8: 11; 9: 10; 10: 9; 11: 8; 12: 7; 13: 6; 14: 5; 15: 4; 16: 3; 17: 2; 18: 1; 19: 0; 20: -1; 21: -2; }; 31 | 20: { '-1': 21; 0: 20; 1: 19; 2: 18; 3: 17; 4: 16; 5: 15; 6: 14; 7: 13; 8: 12; 9: 11; 10: 10; 11: 9; 12: 8; 13: 7; 14: 6; 15: 5; 16: 4; 17: 3; 18: 2; 19: 1; 20: 0; 21: -1; 22: -2; }; 32 | 21: { '-1': 22; 0: 21; 1: 20; 2: 19; 3: 18; 4: 17; 5: 16; 6: 15; 7: 14; 8: 13; 9: 12; 10: 11; 11: 10; 12: 9; 13: 8; 14: 7; 15: 6; 16: 5; 17: 4; 18: 3; 19: 2; 20: 1; 21: 0; 22: -1; 23: -2; }; 33 | 22: { '-1': 23; 0: 22; 1: 21; 2: 20; 3: 19; 4: 18; 5: 17; 6: 16; 7: 15; 8: 14; 9: 13; 10: 12; 11: 11; 12: 10; 13: 9; 14: 8; 15: 7; 16: 6; 17: 5; 18: 4; 19: 3; 20: 2; 21: 1; 22: 0; 23: -1; 24: -2; }; 34 | 23: { '-1': 24; 0: 23; 1: 22; 2: 21; 3: 20; 4: 19; 5: 18; 6: 17; 7: 16; 8: 15; 9: 14; 10: 13; 11: 12; 12: 11; 13: 10; 14: 9; 15: 8; 16: 7; 17: 6; 18: 5; 19: 4; 20: 3; 21: 2; 22: 1; 23: 0; 24: -1; 25: -2; }; 35 | 24: { '-1': 25; 0: 24; 1: 23; 2: 22; 3: 21; 4: 20; 5: 19; 6: 18; 7: 17; 8: 16; 9: 15; 10: 14; 11: 13; 12: 12; 13: 11; 14: 10; 15: 9; 16: 8; 17: 7; 18: 6; 19: 5; 20: 4; 21: 3; 22: 2; 23: 1; 24: 0; 25: -1; 26: -2; }; 36 | 25: { '-1': 26; 0: 25; 1: 24; 2: 23; 3: 22; 4: 21; 5: 20; 6: 19; 7: 18; 8: 17; 9: 16; 10: 15; 11: 14; 12: 13; 13: 12; 14: 11; 15: 10; 16: 9; 17: 8; 18: 7; 19: 6; 20: 5; 21: 4; 22: 3; 23: 2; 24: 1; 25: 0; 26: -1; 27: -2; }; 37 | 26: { '-1': 27; 0: 26; 1: 25; 2: 24; 3: 23; 4: 22; 5: 21; 6: 20; 7: 19; 8: 18; 9: 17; 10: 16; 11: 15; 12: 14; 13: 13; 14: 12; 15: 11; 16: 10; 17: 9; 18: 8; 19: 7; 20: 6; 21: 5; 22: 4; 23: 3; 24: 2; 25: 1; 26: 0; 27: -1; 28: -2; }; 38 | 27: { '-1': 28; 0: 27; 1: 26; 2: 25; 3: 24; 4: 23; 5: 22; 6: 21; 7: 20; 8: 19; 9: 18; 10: 17; 11: 16; 12: 15; 13: 14; 14: 13; 15: 12; 16: 11; 17: 10; 18: 9; 19: 8; 20: 7; 21: 6; 22: 5; 23: 4; 24: 3; 25: 2; 26: 1; 27: 0; 28: -1; 29: -2; }; 39 | 28: { '-1': 29; 0: 28; 1: 27; 2: 26; 3: 25; 4: 24; 5: 23; 6: 22; 7: 21; 8: 20; 9: 19; 10: 18; 11: 17; 12: 16; 13: 15; 14: 14; 15: 13; 16: 12; 17: 11; 18: 10; 19: 9; 20: 8; 21: 7; 22: 6; 23: 5; 24: 4; 25: 3; 26: 2; 27: 1; 28: 0; 29: -1; 30: -2; }; 40 | 29: { '-1': 30; 0: 29; 1: 28; 2: 27; 3: 26; 4: 25; 5: 24; 6: 23; 7: 22; 8: 21; 9: 20; 10: 19; 11: 18; 12: 17; 13: 16; 14: 15; 15: 14; 16: 13; 17: 12; 18: 11; 19: 10; 20: 9; 21: 8; 22: 7; 23: 6; 24: 5; 25: 4; 26: 3; 27: 2; 28: 1; 29: 0; 30: -1; 31: -2; }; 41 | 30: { '-1': 31; 0: 30; 1: 29; 2: 28; 3: 27; 4: 26; 5: 25; 6: 24; 7: 23; 8: 22; 9: 21; 10: 20; 11: 19; 12: 18; 13: 17; 14: 16; 15: 15; 16: 14; 17: 13; 18: 12; 19: 11; 20: 10; 21: 9; 22: 8; 23: 7; 24: 6; 25: 5; 26: 4; 27: 3; 28: 2; 29: 1; 30: 0; 31: -1; 32: -2; }; 42 | 31: { '-1': 32; 0: 31; 1: 30; 2: 29; 3: 28; 4: 27; 5: 26; 6: 25; 7: 24; 8: 23; 9: 22; 10: 21; 11: 20; 12: 19; 13: 18; 14: 17; 15: 16; 16: 15; 17: 14; 18: 13; 19: 12; 20: 11; 21: 10; 22: 9; 23: 8; 24: 7; 25: 6; 26: 5; 27: 4; 28: 3; 29: 2; 30: 1; 31: 0; 32: -1; 33: -2; }; 43 | 32: { '-1': 33; 0: 32; 1: 31; 2: 30; 3: 29; 4: 28; 5: 27; 6: 26; 7: 25; 8: 24; 9: 23; 10: 22; 11: 21; 12: 20; 13: 19; 14: 18; 15: 17; 16: 16; 17: 15; 18: 14; 19: 13; 20: 12; 21: 11; 22: 10; 23: 9; 24: 8; 25: 7; 26: 6; 27: 5; 28: 4; 29: 3; 30: 2; 31: 1; 32: 0; 33: -1; 34: -2; }; 44 | 33: { '-1': 34; 0: 33; 1: 32; 2: 31; 3: 30; 4: 29; 5: 28; 6: 27; 7: 26; 8: 25; 9: 24; 10: 23; 11: 22; 12: 21; 13: 20; 14: 19; 15: 18; 16: 17; 17: 16; 18: 15; 19: 14; 20: 13; 21: 12; 22: 11; 23: 10; 24: 9; 25: 8; 26: 7; 27: 6; 28: 5; 29: 4; 30: 3; 31: 2; 32: 1; 33: 0; 34: -1; 35: -2; }; 45 | 34: { '-1': 35; 0: 34; 1: 33; 2: 32; 3: 31; 4: 30; 5: 29; 6: 28; 7: 27; 8: 26; 9: 25; 10: 24; 11: 23; 12: 22; 13: 21; 14: 20; 15: 19; 16: 18; 17: 17; 18: 16; 19: 15; 20: 14; 21: 13; 22: 12; 23: 11; 24: 10; 25: 9; 26: 8; 27: 7; 28: 6; 29: 5; 30: 4; 31: 3; 32: 2; 33: 1; 34: 0; 35: -1; 36: -2; }; 46 | 35: { '-1': 36; 0: 35; 1: 34; 2: 33; 3: 32; 4: 31; 5: 30; 6: 29; 7: 28; 8: 27; 9: 26; 10: 25; 11: 24; 12: 23; 13: 22; 14: 21; 15: 20; 16: 19; 17: 18; 18: 17; 19: 16; 20: 15; 21: 14; 22: 13; 23: 12; 24: 11; 25: 10; 26: 9; 27: 8; 28: 7; 29: 6; 30: 5; 31: 4; 32: 3; 33: 2; 34: 1; 35: 0; 36: -1; 37: -2; }; 47 | 36: { '-1': 37; 0: 36; 1: 35; 2: 34; 3: 33; 4: 32; 5: 31; 6: 30; 7: 29; 8: 28; 9: 27; 10: 26; 11: 25; 12: 24; 13: 23; 14: 22; 15: 21; 16: 20; 17: 19; 18: 18; 19: 17; 20: 16; 21: 15; 22: 14; 23: 13; 24: 12; 25: 11; 26: 10; 27: 9; 28: 8; 29: 7; 30: 6; 31: 5; 32: 4; 33: 3; 34: 2; 35: 1; 36: 0; 37: -1; 38: -2; }; 48 | 37: { '-1': 38; 0: 37; 1: 36; 2: 35; 3: 34; 4: 33; 5: 32; 6: 31; 7: 30; 8: 29; 9: 28; 10: 27; 11: 26; 12: 25; 13: 24; 14: 23; 15: 22; 16: 21; 17: 20; 18: 19; 19: 18; 20: 17; 21: 16; 22: 15; 23: 14; 24: 13; 25: 12; 26: 11; 27: 10; 28: 9; 29: 8; 30: 7; 31: 6; 32: 5; 33: 4; 34: 3; 35: 2; 36: 1; 37: 0; 38: -1; 39: -2; }; 49 | 38: { '-1': 39; 0: 38; 1: 37; 2: 36; 3: 35; 4: 34; 5: 33; 6: 32; 7: 31; 8: 30; 9: 29; 10: 28; 11: 27; 12: 26; 13: 25; 14: 24; 15: 23; 16: 22; 17: 21; 18: 20; 19: 19; 20: 18; 21: 17; 22: 16; 23: 15; 24: 14; 25: 13; 26: 12; 27: 11; 28: 10; 29: 9; 30: 8; 31: 7; 32: 6; 33: 5; 34: 4; 35: 3; 36: 2; 37: 1; 38: 0; 39: -1; 40: -2; }; 50 | 39: { '-1': 40; 0: 39; 1: 38; 2: 37; 3: 36; 4: 35; 5: 34; 6: 33; 7: 32; 8: 31; 9: 30; 10: 29; 11: 28; 12: 27; 13: 26; 14: 25; 15: 24; 16: 23; 17: 22; 18: 21; 19: 20; 20: 19; 21: 18; 22: 17; 23: 16; 24: 15; 25: 14; 26: 13; 27: 12; 28: 11; 29: 10; 30: 9; 31: 8; 32: 7; 33: 6; 34: 5; 35: 4; 36: 3; 37: 2; 38: 1; 39: 0; 40: -1; 41: -2; }; 51 | 40: { '-1': 41; 0: 40; 1: 39; 2: 38; 3: 37; 4: 36; 5: 35; 6: 34; 7: 33; 8: 32; 9: 31; 10: 30; 11: 29; 12: 28; 13: 27; 14: 26; 15: 25; 16: 24; 17: 23; 18: 22; 19: 21; 20: 20; 21: 19; 22: 18; 23: 17; 24: 16; 25: 15; 26: 14; 27: 13; 28: 12; 29: 11; 30: 10; 31: 9; 32: 8; 33: 7; 34: 6; 35: 5; 36: 4; 37: 3; 38: 2; 39: 1; 40: 0; 41: -1; 42: -2; }; 52 | 41: { '-1': 42; 0: 41; 1: 40; 2: 39; 3: 38; 4: 37; 5: 36; 6: 35; 7: 34; 8: 33; 9: 32; 10: 31; 11: 30; 12: 29; 13: 28; 14: 27; 15: 26; 16: 25; 17: 24; 18: 23; 19: 22; 20: 21; 21: 20; 22: 19; 23: 18; 24: 17; 25: 16; 26: 15; 27: 14; 28: 13; 29: 12; 30: 11; 31: 10; 32: 9; 33: 8; 34: 7; 35: 6; 36: 5; 37: 4; 38: 3; 39: 2; 40: 1; 41: 0; 42: -1; 43: -2; }; 53 | 42: { '-1': 43; 0: 42; 1: 41; 2: 40; 3: 39; 4: 38; 5: 37; 6: 36; 7: 35; 8: 34; 9: 33; 10: 32; 11: 31; 12: 30; 13: 29; 14: 28; 15: 27; 16: 26; 17: 25; 18: 24; 19: 23; 20: 22; 21: 21; 22: 20; 23: 19; 24: 18; 25: 17; 26: 16; 27: 15; 28: 14; 29: 13; 30: 12; 31: 11; 32: 10; 33: 9; 34: 8; 35: 7; 36: 6; 37: 5; 38: 4; 39: 3; 40: 2; 41: 1; 42: 0; 43: -1; 44: -2; }; 54 | 43: { '-1': 44; 0: 43; 1: 42; 2: 41; 3: 40; 4: 39; 5: 38; 6: 37; 7: 36; 8: 35; 9: 34; 10: 33; 11: 32; 12: 31; 13: 30; 14: 29; 15: 28; 16: 27; 17: 26; 18: 25; 19: 24; 20: 23; 21: 22; 22: 21; 23: 20; 24: 19; 25: 18; 26: 17; 27: 16; 28: 15; 29: 14; 30: 13; 31: 12; 32: 11; 33: 10; 34: 9; 35: 8; 36: 7; 37: 6; 38: 5; 39: 4; 40: 3; 41: 2; 42: 1; 43: 0; 44: -1; 45: -2; }; 55 | 44: { '-1': 45; 0: 44; 1: 43; 2: 42; 3: 41; 4: 40; 5: 39; 6: 38; 7: 37; 8: 36; 9: 35; 10: 34; 11: 33; 12: 32; 13: 31; 14: 30; 15: 29; 16: 28; 17: 27; 18: 26; 19: 25; 20: 24; 21: 23; 22: 22; 23: 21; 24: 20; 25: 19; 26: 18; 27: 17; 28: 16; 29: 15; 30: 14; 31: 13; 32: 12; 33: 11; 34: 10; 35: 9; 36: 8; 37: 7; 38: 6; 39: 5; 40: 4; 41: 3; 42: 2; 43: 1; 44: 0; 45: -1; 46: -2; }; 56 | 45: { '-1': 46; 0: 45; 1: 44; 2: 43; 3: 42; 4: 41; 5: 40; 6: 39; 7: 38; 8: 37; 9: 36; 10: 35; 11: 34; 12: 33; 13: 32; 14: 31; 15: 30; 16: 29; 17: 28; 18: 27; 19: 26; 20: 25; 21: 24; 22: 23; 23: 22; 24: 21; 25: 20; 26: 19; 27: 18; 28: 17; 29: 16; 30: 15; 31: 14; 32: 13; 33: 12; 34: 11; 35: 10; 36: 9; 37: 8; 38: 7; 39: 6; 40: 5; 41: 4; 42: 3; 43: 2; 44: 1; 45: 0; 46: -1; 47: -2; }; 57 | 46: { '-1': 47; 0: 46; 1: 45; 2: 44; 3: 43; 4: 42; 5: 41; 6: 40; 7: 39; 8: 38; 9: 37; 10: 36; 11: 35; 12: 34; 13: 33; 14: 32; 15: 31; 16: 30; 17: 29; 18: 28; 19: 27; 20: 26; 21: 25; 22: 24; 23: 23; 24: 22; 25: 21; 26: 20; 27: 19; 28: 18; 29: 17; 30: 16; 31: 15; 32: 14; 33: 13; 34: 12; 35: 11; 36: 10; 37: 9; 38: 8; 39: 7; 40: 6; 41: 5; 42: 4; 43: 3; 44: 2; 45: 1; 46: 0; 47: -1; 48: -2; }; 58 | 47: { '-1': 48; 0: 47; 1: 46; 2: 45; 3: 44; 4: 43; 5: 42; 6: 41; 7: 40; 8: 39; 9: 38; 10: 37; 11: 36; 12: 35; 13: 34; 14: 33; 15: 32; 16: 31; 17: 30; 18: 29; 19: 28; 20: 27; 21: 26; 22: 25; 23: 24; 24: 23; 25: 22; 26: 21; 27: 20; 28: 19; 29: 18; 30: 17; 31: 16; 32: 15; 33: 14; 34: 13; 35: 12; 36: 11; 37: 10; 38: 9; 39: 8; 40: 7; 41: 6; 42: 5; 43: 4; 44: 3; 45: 2; 46: 1; 47: 0; 48: -1; 49: -2; }; 59 | 48: { '-1': 49; 0: 48; 1: 47; 2: 46; 3: 45; 4: 44; 5: 43; 6: 42; 7: 41; 8: 40; 9: 39; 10: 38; 11: 37; 12: 36; 13: 35; 14: 34; 15: 33; 16: 32; 17: 31; 18: 30; 19: 29; 20: 28; 21: 27; 22: 26; 23: 25; 24: 24; 25: 23; 26: 22; 27: 21; 28: 20; 29: 19; 30: 18; 31: 17; 32: 16; 33: 15; 34: 14; 35: 13; 36: 12; 37: 11; 38: 10; 39: 9; 40: 8; 41: 7; 42: 6; 43: 5; 44: 4; 45: 3; 46: 2; 47: 1; 48: 0; 49: -1; 50: -2; }; 60 | 49: { '-1': 50; 0: 49; 1: 48; 2: 47; 3: 46; 4: 45; 5: 44; 6: 43; 7: 42; 8: 41; 9: 40; 10: 39; 11: 38; 12: 37; 13: 36; 14: 35; 15: 34; 16: 33; 17: 32; 18: 31; 19: 30; 20: 29; 21: 28; 22: 27; 23: 26; 24: 25; 25: 24; 26: 23; 27: 22; 28: 21; 29: 20; 30: 19; 31: 18; 32: 17; 33: 16; 34: 15; 35: 14; 36: 13; 37: 12; 38: 11; 39: 10; 40: 9; 41: 8; 42: 7; 43: 6; 44: 5; 45: 4; 46: 3; 47: 2; 48: 1; 49: 0; 50: -1; 51: -2; }; 61 | 50: { '-1': 51; 0: 50; 1: 49; 2: 48; 3: 47; 4: 46; 5: 45; 6: 44; 7: 43; 8: 42; 9: 41; 10: 40; 11: 39; 12: 38; 13: 37; 14: 36; 15: 35; 16: 34; 17: 33; 18: 32; 19: 31; 20: 30; 21: 29; 22: 28; 23: 27; 24: 26; 25: 25; 26: 24; 27: 23; 28: 22; 29: 21; 30: 20; 31: 19; 32: 18; 33: 17; 34: 16; 35: 15; 36: 14; 37: 13; 38: 12; 39: 11; 40: 10; 41: 9; 42: 8; 43: 7; 44: 6; 45: 5; 46: 4; 47: 3; 48: 2; 49: 1; 50: 0; 51: -1; 52: -2; }; 62 | 51: { '-1': 52; 0: 51; 1: 50; 2: 49; 3: 48; 4: 47; 5: 46; 6: 45; 7: 44; 8: 43; 9: 42; 10: 41; 11: 40; 12: 39; 13: 38; 14: 37; 15: 36; 16: 35; 17: 34; 18: 33; 19: 32; 20: 31; 21: 30; 22: 29; 23: 28; 24: 27; 25: 26; 26: 25; 27: 24; 28: 23; 29: 22; 30: 21; 31: 20; 32: 19; 33: 18; 34: 17; 35: 16; 36: 15; 37: 14; 38: 13; 39: 12; 40: 11; 41: 10; 42: 9; 43: 8; 44: 7; 45: 6; 46: 5; 47: 4; 48: 3; 49: 2; 50: 1; 51: 0; 52: -1; 53: -2; }; 63 | 52: { '-1': 53; 0: 52; 1: 51; 2: 50; 3: 49; 4: 48; 5: 47; 6: 46; 7: 45; 8: 44; 9: 43; 10: 42; 11: 41; 12: 40; 13: 39; 14: 38; 15: 37; 16: 36; 17: 35; 18: 34; 19: 33; 20: 32; 21: 31; 22: 30; 23: 29; 24: 28; 25: 27; 26: 26; 27: 25; 28: 24; 29: 23; 30: 22; 31: 21; 32: 20; 33: 19; 34: 18; 35: 17; 36: 16; 37: 15; 38: 14; 39: 13; 40: 12; 41: 11; 42: 10; 43: 9; 44: 8; 45: 7; 46: 6; 47: 5; 48: 4; 49: 3; 50: 2; 51: 1; 52: 0; 53: -1; 54: -2; }; 64 | 53: { '-1': 54; 0: 53; 1: 52; 2: 51; 3: 50; 4: 49; 5: 48; 6: 47; 7: 46; 8: 45; 9: 44; 10: 43; 11: 42; 12: 41; 13: 40; 14: 39; 15: 38; 16: 37; 17: 36; 18: 35; 19: 34; 20: 33; 21: 32; 22: 31; 23: 30; 24: 29; 25: 28; 26: 27; 27: 26; 28: 25; 29: 24; 30: 23; 31: 22; 32: 21; 33: 20; 34: 19; 35: 18; 36: 17; 37: 16; 38: 15; 39: 14; 40: 13; 41: 12; 42: 11; 43: 10; 44: 9; 45: 8; 46: 7; 47: 6; 48: 5; 49: 4; 50: 3; 51: 2; 52: 1; 53: 0; 54: -1; 55: -2; }; 65 | 54: { '-1': 55; 0: 54; 1: 53; 2: 52; 3: 51; 4: 50; 5: 49; 6: 48; 7: 47; 8: 46; 9: 45; 10: 44; 11: 43; 12: 42; 13: 41; 14: 40; 15: 39; 16: 38; 17: 37; 18: 36; 19: 35; 20: 34; 21: 33; 22: 32; 23: 31; 24: 30; 25: 29; 26: 28; 27: 27; 28: 26; 29: 25; 30: 24; 31: 23; 32: 22; 33: 21; 34: 20; 35: 19; 36: 18; 37: 17; 38: 16; 39: 15; 40: 14; 41: 13; 42: 12; 43: 11; 44: 10; 45: 9; 46: 8; 47: 7; 48: 6; 49: 5; 50: 4; 51: 3; 52: 2; 53: 1; 54: 0; 55: -1; 56: -2; }; 66 | 55: { '-1': 56; 0: 55; 1: 54; 2: 53; 3: 52; 4: 51; 5: 50; 6: 49; 7: 48; 8: 47; 9: 46; 10: 45; 11: 44; 12: 43; 13: 42; 14: 41; 15: 40; 16: 39; 17: 38; 18: 37; 19: 36; 20: 35; 21: 34; 22: 33; 23: 32; 24: 31; 25: 30; 26: 29; 27: 28; 28: 27; 29: 26; 30: 25; 31: 24; 32: 23; 33: 22; 34: 21; 35: 20; 36: 19; 37: 18; 38: 17; 39: 16; 40: 15; 41: 14; 42: 13; 43: 12; 44: 11; 45: 10; 46: 9; 47: 8; 48: 7; 49: 6; 50: 5; 51: 4; 52: 3; 53: 2; 54: 1; 55: 0; 56: -1; 57: -2; }; 67 | 56: { '-1': 57; 0: 56; 1: 55; 2: 54; 3: 53; 4: 52; 5: 51; 6: 50; 7: 49; 8: 48; 9: 47; 10: 46; 11: 45; 12: 44; 13: 43; 14: 42; 15: 41; 16: 40; 17: 39; 18: 38; 19: 37; 20: 36; 21: 35; 22: 34; 23: 33; 24: 32; 25: 31; 26: 30; 27: 29; 28: 28; 29: 27; 30: 26; 31: 25; 32: 24; 33: 23; 34: 22; 35: 21; 36: 20; 37: 19; 38: 18; 39: 17; 40: 16; 41: 15; 42: 14; 43: 13; 44: 12; 45: 11; 46: 10; 47: 9; 48: 8; 49: 7; 50: 6; 51: 5; 52: 4; 53: 3; 54: 2; 55: 1; 56: 0; 57: -1; 58: -2; }; 68 | 57: { '-1': 58; 0: 57; 1: 56; 2: 55; 3: 54; 4: 53; 5: 52; 6: 51; 7: 50; 8: 49; 9: 48; 10: 47; 11: 46; 12: 45; 13: 44; 14: 43; 15: 42; 16: 41; 17: 40; 18: 39; 19: 38; 20: 37; 21: 36; 22: 35; 23: 34; 24: 33; 25: 32; 26: 31; 27: 30; 28: 29; 29: 28; 30: 27; 31: 26; 32: 25; 33: 24; 34: 23; 35: 22; 36: 21; 37: 20; 38: 19; 39: 18; 40: 17; 41: 16; 42: 15; 43: 14; 44: 13; 45: 12; 46: 11; 47: 10; 48: 9; 49: 8; 50: 7; 51: 6; 52: 5; 53: 4; 54: 3; 55: 2; 56: 1; 57: 0; 58: -1; 59: -2; }; 69 | 58: { '-1': 59; 0: 58; 1: 57; 2: 56; 3: 55; 4: 54; 5: 53; 6: 52; 7: 51; 8: 50; 9: 49; 10: 48; 11: 47; 12: 46; 13: 45; 14: 44; 15: 43; 16: 42; 17: 41; 18: 40; 19: 39; 20: 38; 21: 37; 22: 36; 23: 35; 24: 34; 25: 33; 26: 32; 27: 31; 28: 30; 29: 29; 30: 28; 31: 27; 32: 26; 33: 25; 34: 24; 35: 23; 36: 22; 37: 21; 38: 20; 39: 19; 40: 18; 41: 17; 42: 16; 43: 15; 44: 14; 45: 13; 46: 12; 47: 11; 48: 10; 49: 9; 50: 8; 51: 7; 52: 6; 53: 5; 54: 4; 55: 3; 56: 2; 57: 1; 58: 0; 59: -1; 60: -2; }; 70 | 59: { '-1': 60; 0: 59; 1: 58; 2: 57; 3: 56; 4: 55; 5: 54; 6: 53; 7: 52; 8: 51; 9: 50; 10: 49; 11: 48; 12: 47; 13: 46; 14: 45; 15: 44; 16: 43; 17: 42; 18: 41; 19: 40; 20: 39; 21: 38; 22: 37; 23: 36; 24: 35; 25: 34; 26: 33; 27: 32; 28: 31; 29: 30; 30: 29; 31: 28; 32: 27; 33: 26; 34: 25; 35: 24; 36: 23; 37: 22; 38: 21; 39: 20; 40: 19; 41: 18; 42: 17; 43: 16; 44: 15; 45: 14; 46: 13; 47: 12; 48: 11; 49: 10; 50: 9; 51: 8; 52: 7; 53: 6; 54: 5; 55: 4; 56: 3; 57: 2; 58: 1; 59: 0; 60: -1; 61: -2; }; 71 | 60: { '-1': 61; 0: 60; 1: 59; 2: 58; 3: 57; 4: 56; 5: 55; 6: 54; 7: 53; 8: 52; 9: 51; 10: 50; 11: 49; 12: 48; 13: 47; 14: 46; 15: 45; 16: 44; 17: 43; 18: 42; 19: 41; 20: 40; 21: 39; 22: 38; 23: 37; 24: 36; 25: 35; 26: 34; 27: 33; 28: 32; 29: 31; 30: 30; 31: 29; 32: 28; 33: 27; 34: 26; 35: 25; 36: 24; 37: 23; 38: 22; 39: 21; 40: 20; 41: 19; 42: 18; 43: 17; 44: 16; 45: 15; 46: 14; 47: 13; 48: 12; 49: 11; 50: 10; 51: 9; 52: 8; 53: 7; 54: 6; 55: 5; 56: 4; 57: 3; 58: 2; 59: 1; 60: 0; 61: -1; 62: -2; }; 72 | 61: { '-1': 62; 0: 61; 1: 60; 2: 59; 3: 58; 4: 57; 5: 56; 6: 55; 7: 54; 8: 53; 9: 52; 10: 51; 11: 50; 12: 49; 13: 48; 14: 47; 15: 46; 16: 45; 17: 44; 18: 43; 19: 42; 20: 41; 21: 40; 22: 39; 23: 38; 24: 37; 25: 36; 26: 35; 27: 34; 28: 33; 29: 32; 30: 31; 31: 30; 32: 29; 33: 28; 34: 27; 35: 26; 36: 25; 37: 24; 38: 23; 39: 22; 40: 21; 41: 20; 42: 19; 43: 18; 44: 17; 45: 16; 46: 15; 47: 14; 48: 13; 49: 12; 50: 11; 51: 10; 52: 9; 53: 8; 54: 7; 55: 6; 56: 5; 57: 4; 58: 3; 59: 2; 60: 1; 61: 0; 62: -1; 63: -2; }; 73 | 62: { '-1': 63; 0: 62; 1: 61; 2: 60; 3: 59; 4: 58; 5: 57; 6: 56; 7: 55; 8: 54; 9: 53; 10: 52; 11: 51; 12: 50; 13: 49; 14: 48; 15: 47; 16: 46; 17: 45; 18: 44; 19: 43; 20: 42; 21: 41; 22: 40; 23: 39; 24: 38; 25: 37; 26: 36; 27: 35; 28: 34; 29: 33; 30: 32; 31: 31; 32: 30; 33: 29; 34: 28; 35: 27; 36: 26; 37: 25; 38: 24; 39: 23; 40: 22; 41: 21; 42: 20; 43: 19; 44: 18; 45: 17; 46: 16; 47: 15; 48: 14; 49: 13; 50: 12; 51: 11; 52: 10; 53: 9; 54: 8; 55: 7; 56: 6; 57: 5; 58: 4; 59: 3; 60: 2; 61: 1; 62: 0; 63: -1; 64: -2; }; 74 | 63: { '-1': 64; 0: 63; 1: 62; 2: 61; 3: 60; 4: 59; 5: 58; 6: 57; 7: 56; 8: 55; 9: 54; 10: 53; 11: 52; 12: 51; 13: 50; 14: 49; 15: 48; 16: 47; 17: 46; 18: 45; 19: 44; 20: 43; 21: 42; 22: 41; 23: 40; 24: 39; 25: 38; 26: 37; 27: 36; 28: 35; 29: 34; 30: 33; 31: 32; 32: 31; 33: 30; 34: 29; 35: 28; 36: 27; 37: 26; 38: 25; 39: 24; 40: 23; 41: 22; 42: 21; 43: 20; 44: 19; 45: 18; 46: 17; 47: 16; 48: 15; 49: 14; 50: 13; 51: 12; 52: 11; 53: 10; 54: 9; 55: 8; 56: 7; 57: 6; 58: 5; 59: 4; 60: 3; 61: 2; 62: 1; 63: 0; 64: -1; 65: -2; }; 75 | 64: { '-1': 65; 0: 64; 1: 63; 2: 62; 3: 61; 4: 60; 5: 59; 6: 58; 7: 57; 8: 56; 9: 55; 10: 54; 11: 53; 12: 52; 13: 51; 14: 50; 15: 49; 16: 48; 17: 47; 18: 46; 19: 45; 20: 44; 21: 43; 22: 42; 23: 41; 24: 40; 25: 39; 26: 38; 27: 37; 28: 36; 29: 35; 30: 34; 31: 33; 32: 32; 33: 31; 34: 30; 35: 29; 36: 28; 37: 27; 38: 26; 39: 25; 40: 24; 41: 23; 42: 22; 43: 21; 44: 20; 45: 19; 46: 18; 47: 17; 48: 16; 49: 15; 50: 14; 51: 13; 52: 12; 53: 11; 54: 10; 55: 9; 56: 8; 57: 7; 58: 6; 59: 5; 60: 4; 61: 3; 62: 2; 63: 1; 64: 0; 65: -1; 66: -2; }; 76 | 65: { '-1': 66; 0: 65; 1: 64; 2: 63; 3: 62; 4: 61; 5: 60; 6: 59; 7: 58; 8: 57; 9: 56; 10: 55; 11: 54; 12: 53; 13: 52; 14: 51; 15: 50; 16: 49; 17: 48; 18: 47; 19: 46; 20: 45; 21: 44; 22: 43; 23: 42; 24: 41; 25: 40; 26: 39; 27: 38; 28: 37; 29: 36; 30: 35; 31: 34; 32: 33; 33: 32; 34: 31; 35: 30; 36: 29; 37: 28; 38: 27; 39: 26; 40: 25; 41: 24; 42: 23; 43: 22; 44: 21; 45: 20; 46: 19; 47: 18; 48: 17; 49: 16; 50: 15; 51: 14; 52: 13; 53: 12; 54: 11; 55: 10; 56: 9; 57: 8; 58: 7; 59: 6; 60: 5; 61: 4; 62: 3; 63: 2; 64: 1; 65: 0; 66: -1; 67: -2; }; 77 | 66: { '-1': 67; 0: 66; 1: 65; 2: 64; 3: 63; 4: 62; 5: 61; 6: 60; 7: 59; 8: 58; 9: 57; 10: 56; 11: 55; 12: 54; 13: 53; 14: 52; 15: 51; 16: 50; 17: 49; 18: 48; 19: 47; 20: 46; 21: 45; 22: 44; 23: 43; 24: 42; 25: 41; 26: 40; 27: 39; 28: 38; 29: 37; 30: 36; 31: 35; 32: 34; 33: 33; 34: 32; 35: 31; 36: 30; 37: 29; 38: 28; 39: 27; 40: 26; 41: 25; 42: 24; 43: 23; 44: 22; 45: 21; 46: 20; 47: 19; 48: 18; 49: 17; 50: 16; 51: 15; 52: 14; 53: 13; 54: 12; 55: 11; 56: 10; 57: 9; 58: 8; 59: 7; 60: 6; 61: 5; 62: 4; 63: 3; 64: 2; 65: 1; 66: 0; 67: -1; 68: -2; }; 78 | 67: { '-1': 68; 0: 67; 1: 66; 2: 65; 3: 64; 4: 63; 5: 62; 6: 61; 7: 60; 8: 59; 9: 58; 10: 57; 11: 56; 12: 55; 13: 54; 14: 53; 15: 52; 16: 51; 17: 50; 18: 49; 19: 48; 20: 47; 21: 46; 22: 45; 23: 44; 24: 43; 25: 42; 26: 41; 27: 40; 28: 39; 29: 38; 30: 37; 31: 36; 32: 35; 33: 34; 34: 33; 35: 32; 36: 31; 37: 30; 38: 29; 39: 28; 40: 27; 41: 26; 42: 25; 43: 24; 44: 23; 45: 22; 46: 21; 47: 20; 48: 19; 49: 18; 50: 17; 51: 16; 52: 15; 53: 14; 54: 13; 55: 12; 56: 11; 57: 10; 58: 9; 59: 8; 60: 7; 61: 6; 62: 5; 63: 4; 64: 3; 65: 2; 66: 1; 67: 0; 68: -1; 69: -2; }; 79 | 68: { '-1': 69; 0: 68; 1: 67; 2: 66; 3: 65; 4: 64; 5: 63; 6: 62; 7: 61; 8: 60; 9: 59; 10: 58; 11: 57; 12: 56; 13: 55; 14: 54; 15: 53; 16: 52; 17: 51; 18: 50; 19: 49; 20: 48; 21: 47; 22: 46; 23: 45; 24: 44; 25: 43; 26: 42; 27: 41; 28: 40; 29: 39; 30: 38; 31: 37; 32: 36; 33: 35; 34: 34; 35: 33; 36: 32; 37: 31; 38: 30; 39: 29; 40: 28; 41: 27; 42: 26; 43: 25; 44: 24; 45: 23; 46: 22; 47: 21; 48: 20; 49: 19; 50: 18; 51: 17; 52: 16; 53: 15; 54: 14; 55: 13; 56: 12; 57: 11; 58: 10; 59: 9; 60: 8; 61: 7; 62: 6; 63: 5; 64: 4; 65: 3; 66: 2; 67: 1; 68: 0; 69: -1; 70: -2; }; 80 | 69: { '-1': 70; 0: 69; 1: 68; 2: 67; 3: 66; 4: 65; 5: 64; 6: 63; 7: 62; 8: 61; 9: 60; 10: 59; 11: 58; 12: 57; 13: 56; 14: 55; 15: 54; 16: 53; 17: 52; 18: 51; 19: 50; 20: 49; 21: 48; 22: 47; 23: 46; 24: 45; 25: 44; 26: 43; 27: 42; 28: 41; 29: 40; 30: 39; 31: 38; 32: 37; 33: 36; 34: 35; 35: 34; 36: 33; 37: 32; 38: 31; 39: 30; 40: 29; 41: 28; 42: 27; 43: 26; 44: 25; 45: 24; 46: 23; 47: 22; 48: 21; 49: 20; 50: 19; 51: 18; 52: 17; 53: 16; 54: 15; 55: 14; 56: 13; 57: 12; 58: 11; 59: 10; 60: 9; 61: 8; 62: 7; 63: 6; 64: 5; 65: 4; 66: 3; 67: 2; 68: 1; 69: 0; 70: -1; 71: -2; }; 81 | 70: { '-1': 71; 0: 70; 1: 69; 2: 68; 3: 67; 4: 66; 5: 65; 6: 64; 7: 63; 8: 62; 9: 61; 10: 60; 11: 59; 12: 58; 13: 57; 14: 56; 15: 55; 16: 54; 17: 53; 18: 52; 19: 51; 20: 50; 21: 49; 22: 48; 23: 47; 24: 46; 25: 45; 26: 44; 27: 43; 28: 42; 29: 41; 30: 40; 31: 39; 32: 38; 33: 37; 34: 36; 35: 35; 36: 34; 37: 33; 38: 32; 39: 31; 40: 30; 41: 29; 42: 28; 43: 27; 44: 26; 45: 25; 46: 24; 47: 23; 48: 22; 49: 21; 50: 20; 51: 19; 52: 18; 53: 17; 54: 16; 55: 15; 56: 14; 57: 13; 58: 12; 59: 11; 60: 10; 61: 9; 62: 8; 63: 7; 64: 6; 65: 5; 66: 4; 67: 3; 68: 2; 69: 1; 70: 0; 71: -1; 72: -2; }; 82 | 71: { '-1': 72; 0: 71; 1: 70; 2: 69; 3: 68; 4: 67; 5: 66; 6: 65; 7: 64; 8: 63; 9: 62; 10: 61; 11: 60; 12: 59; 13: 58; 14: 57; 15: 56; 16: 55; 17: 54; 18: 53; 19: 52; 20: 51; 21: 50; 22: 49; 23: 48; 24: 47; 25: 46; 26: 45; 27: 44; 28: 43; 29: 42; 30: 41; 31: 40; 32: 39; 33: 38; 34: 37; 35: 36; 36: 35; 37: 34; 38: 33; 39: 32; 40: 31; 41: 30; 42: 29; 43: 28; 44: 27; 45: 26; 46: 25; 47: 24; 48: 23; 49: 22; 50: 21; 51: 20; 52: 19; 53: 18; 54: 17; 55: 16; 56: 15; 57: 14; 58: 13; 59: 12; 60: 11; 61: 10; 62: 9; 63: 8; 64: 7; 65: 6; 66: 5; 67: 4; 68: 3; 69: 2; 70: 1; 71: 0; 72: -1; 73: -2; }; 83 | 72: { '-1': 73; 0: 72; 1: 71; 2: 70; 3: 69; 4: 68; 5: 67; 6: 66; 7: 65; 8: 64; 9: 63; 10: 62; 11: 61; 12: 60; 13: 59; 14: 58; 15: 57; 16: 56; 17: 55; 18: 54; 19: 53; 20: 52; 21: 51; 22: 50; 23: 49; 24: 48; 25: 47; 26: 46; 27: 45; 28: 44; 29: 43; 30: 42; 31: 41; 32: 40; 33: 39; 34: 38; 35: 37; 36: 36; 37: 35; 38: 34; 39: 33; 40: 32; 41: 31; 42: 30; 43: 29; 44: 28; 45: 27; 46: 26; 47: 25; 48: 24; 49: 23; 50: 22; 51: 21; 52: 20; 53: 19; 54: 18; 55: 17; 56: 16; 57: 15; 58: 14; 59: 13; 60: 12; 61: 11; 62: 10; 63: 9; 64: 8; 65: 7; 66: 6; 67: 5; 68: 4; 69: 3; 70: 2; 71: 1; 72: 0; 73: -1; 74: -2; }; 84 | 73: { '-1': 74; 0: 73; 1: 72; 2: 71; 3: 70; 4: 69; 5: 68; 6: 67; 7: 66; 8: 65; 9: 64; 10: 63; 11: 62; 12: 61; 13: 60; 14: 59; 15: 58; 16: 57; 17: 56; 18: 55; 19: 54; 20: 53; 21: 52; 22: 51; 23: 50; 24: 49; 25: 48; 26: 47; 27: 46; 28: 45; 29: 44; 30: 43; 31: 42; 32: 41; 33: 40; 34: 39; 35: 38; 36: 37; 37: 36; 38: 35; 39: 34; 40: 33; 41: 32; 42: 31; 43: 30; 44: 29; 45: 28; 46: 27; 47: 26; 48: 25; 49: 24; 50: 23; 51: 22; 52: 21; 53: 20; 54: 19; 55: 18; 56: 17; 57: 16; 58: 15; 59: 14; 60: 13; 61: 12; 62: 11; 63: 10; 64: 9; 65: 8; 66: 7; 67: 6; 68: 5; 69: 4; 70: 3; 71: 2; 72: 1; 73: 0; 74: -1; 75: -2; }; 85 | 74: { '-1': 75; 0: 74; 1: 73; 2: 72; 3: 71; 4: 70; 5: 69; 6: 68; 7: 67; 8: 66; 9: 65; 10: 64; 11: 63; 12: 62; 13: 61; 14: 60; 15: 59; 16: 58; 17: 57; 18: 56; 19: 55; 20: 54; 21: 53; 22: 52; 23: 51; 24: 50; 25: 49; 26: 48; 27: 47; 28: 46; 29: 45; 30: 44; 31: 43; 32: 42; 33: 41; 34: 40; 35: 39; 36: 38; 37: 37; 38: 36; 39: 35; 40: 34; 41: 33; 42: 32; 43: 31; 44: 30; 45: 29; 46: 28; 47: 27; 48: 26; 49: 25; 50: 24; 51: 23; 52: 22; 53: 21; 54: 20; 55: 19; 56: 18; 57: 17; 58: 16; 59: 15; 60: 14; 61: 13; 62: 12; 63: 11; 64: 10; 65: 9; 66: 8; 67: 7; 68: 6; 69: 5; 70: 4; 71: 3; 72: 2; 73: 1; 74: 0; 75: -1; 76: -2; }; 86 | 75: { '-1': 76; 0: 75; 1: 74; 2: 73; 3: 72; 4: 71; 5: 70; 6: 69; 7: 68; 8: 67; 9: 66; 10: 65; 11: 64; 12: 63; 13: 62; 14: 61; 15: 60; 16: 59; 17: 58; 18: 57; 19: 56; 20: 55; 21: 54; 22: 53; 23: 52; 24: 51; 25: 50; 26: 49; 27: 48; 28: 47; 29: 46; 30: 45; 31: 44; 32: 43; 33: 42; 34: 41; 35: 40; 36: 39; 37: 38; 38: 37; 39: 36; 40: 35; 41: 34; 42: 33; 43: 32; 44: 31; 45: 30; 46: 29; 47: 28; 48: 27; 49: 26; 50: 25; 51: 24; 52: 23; 53: 22; 54: 21; 55: 20; 56: 19; 57: 18; 58: 17; 59: 16; 60: 15; 61: 14; 62: 13; 63: 12; 64: 11; 65: 10; 66: 9; 67: 8; 68: 7; 69: 6; 70: 5; 71: 4; 72: 3; 73: 2; 74: 1; 75: 0; 76: -1; 77: -2; }; 87 | 76: { '-1': 77; 0: 76; 1: 75; 2: 74; 3: 73; 4: 72; 5: 71; 6: 70; 7: 69; 8: 68; 9: 67; 10: 66; 11: 65; 12: 64; 13: 63; 14: 62; 15: 61; 16: 60; 17: 59; 18: 58; 19: 57; 20: 56; 21: 55; 22: 54; 23: 53; 24: 52; 25: 51; 26: 50; 27: 49; 28: 48; 29: 47; 30: 46; 31: 45; 32: 44; 33: 43; 34: 42; 35: 41; 36: 40; 37: 39; 38: 38; 39: 37; 40: 36; 41: 35; 42: 34; 43: 33; 44: 32; 45: 31; 46: 30; 47: 29; 48: 28; 49: 27; 50: 26; 51: 25; 52: 24; 53: 23; 54: 22; 55: 21; 56: 20; 57: 19; 58: 18; 59: 17; 60: 16; 61: 15; 62: 14; 63: 13; 64: 12; 65: 11; 66: 10; 67: 9; 68: 8; 69: 7; 70: 6; 71: 5; 72: 4; 73: 3; 74: 2; 75: 1; 76: 0; 77: -1; 78: -2; }; 88 | 77: { '-1': 78; 0: 77; 1: 76; 2: 75; 3: 74; 4: 73; 5: 72; 6: 71; 7: 70; 8: 69; 9: 68; 10: 67; 11: 66; 12: 65; 13: 64; 14: 63; 15: 62; 16: 61; 17: 60; 18: 59; 19: 58; 20: 57; 21: 56; 22: 55; 23: 54; 24: 53; 25: 52; 26: 51; 27: 50; 28: 49; 29: 48; 30: 47; 31: 46; 32: 45; 33: 44; 34: 43; 35: 42; 36: 41; 37: 40; 38: 39; 39: 38; 40: 37; 41: 36; 42: 35; 43: 34; 44: 33; 45: 32; 46: 31; 47: 30; 48: 29; 49: 28; 50: 27; 51: 26; 52: 25; 53: 24; 54: 23; 55: 22; 56: 21; 57: 20; 58: 19; 59: 18; 60: 17; 61: 16; 62: 15; 63: 14; 64: 13; 65: 12; 66: 11; 67: 10; 68: 9; 69: 8; 70: 7; 71: 6; 72: 5; 73: 4; 74: 3; 75: 2; 76: 1; 77: 0; 78: -1; 79: -2; }; 89 | 78: { '-1': 79; 0: 78; 1: 77; 2: 76; 3: 75; 4: 74; 5: 73; 6: 72; 7: 71; 8: 70; 9: 69; 10: 68; 11: 67; 12: 66; 13: 65; 14: 64; 15: 63; 16: 62; 17: 61; 18: 60; 19: 59; 20: 58; 21: 57; 22: 56; 23: 55; 24: 54; 25: 53; 26: 52; 27: 51; 28: 50; 29: 49; 30: 48; 31: 47; 32: 46; 33: 45; 34: 44; 35: 43; 36: 42; 37: 41; 38: 40; 39: 39; 40: 38; 41: 37; 42: 36; 43: 35; 44: 34; 45: 33; 46: 32; 47: 31; 48: 30; 49: 29; 50: 28; 51: 27; 52: 26; 53: 25; 54: 24; 55: 23; 56: 22; 57: 21; 58: 20; 59: 19; 60: 18; 61: 17; 62: 16; 63: 15; 64: 14; 65: 13; 66: 12; 67: 11; 68: 10; 69: 9; 70: 8; 71: 7; 72: 6; 73: 5; 74: 4; 75: 3; 76: 2; 77: 1; 78: 0; 79: -1; 80: -2; }; 90 | 79: { '-1': 80; 0: 79; 1: 78; 2: 77; 3: 76; 4: 75; 5: 74; 6: 73; 7: 72; 8: 71; 9: 70; 10: 69; 11: 68; 12: 67; 13: 66; 14: 65; 15: 64; 16: 63; 17: 62; 18: 61; 19: 60; 20: 59; 21: 58; 22: 57; 23: 56; 24: 55; 25: 54; 26: 53; 27: 52; 28: 51; 29: 50; 30: 49; 31: 48; 32: 47; 33: 46; 34: 45; 35: 44; 36: 43; 37: 42; 38: 41; 39: 40; 40: 39; 41: 38; 42: 37; 43: 36; 44: 35; 45: 34; 46: 33; 47: 32; 48: 31; 49: 30; 50: 29; 51: 28; 52: 27; 53: 26; 54: 25; 55: 24; 56: 23; 57: 22; 58: 21; 59: 20; 60: 19; 61: 18; 62: 17; 63: 16; 64: 15; 65: 14; 66: 13; 67: 12; 68: 11; 69: 10; 70: 9; 71: 8; 72: 7; 73: 6; 74: 5; 75: 4; 76: 3; 77: 2; 78: 1; 79: 0; 80: -1; 81: -2; }; 91 | 80: { '-1': 81; 0: 80; 1: 79; 2: 78; 3: 77; 4: 76; 5: 75; 6: 74; 7: 73; 8: 72; 9: 71; 10: 70; 11: 69; 12: 68; 13: 67; 14: 66; 15: 65; 16: 64; 17: 63; 18: 62; 19: 61; 20: 60; 21: 59; 22: 58; 23: 57; 24: 56; 25: 55; 26: 54; 27: 53; 28: 52; 29: 51; 30: 50; 31: 49; 32: 48; 33: 47; 34: 46; 35: 45; 36: 44; 37: 43; 38: 42; 39: 41; 40: 40; 41: 39; 42: 38; 43: 37; 44: 36; 45: 35; 46: 34; 47: 33; 48: 32; 49: 31; 50: 30; 51: 29; 52: 28; 53: 27; 54: 26; 55: 25; 56: 24; 57: 23; 58: 22; 59: 21; 60: 20; 61: 19; 62: 18; 63: 17; 64: 16; 65: 15; 66: 14; 67: 13; 68: 12; 69: 11; 70: 10; 71: 9; 72: 8; 73: 7; 74: 6; 75: 5; 76: 4; 77: 3; 78: 2; 79: 1; 80: 0; 81: -1; 82: -2; }; 92 | 81: { '-1': 82; 0: 81; 1: 80; 2: 79; 3: 78; 4: 77; 5: 76; 6: 75; 7: 74; 8: 73; 9: 72; 10: 71; 11: 70; 12: 69; 13: 68; 14: 67; 15: 66; 16: 65; 17: 64; 18: 63; 19: 62; 20: 61; 21: 60; 22: 59; 23: 58; 24: 57; 25: 56; 26: 55; 27: 54; 28: 53; 29: 52; 30: 51; 31: 50; 32: 49; 33: 48; 34: 47; 35: 46; 36: 45; 37: 44; 38: 43; 39: 42; 40: 41; 41: 40; 42: 39; 43: 38; 44: 37; 45: 36; 46: 35; 47: 34; 48: 33; 49: 32; 50: 31; 51: 30; 52: 29; 53: 28; 54: 27; 55: 26; 56: 25; 57: 24; 58: 23; 59: 22; 60: 21; 61: 20; 62: 19; 63: 18; 64: 17; 65: 16; 66: 15; 67: 14; 68: 13; 69: 12; 70: 11; 71: 10; 72: 9; 73: 8; 74: 7; 75: 6; 76: 5; 77: 4; 78: 3; 79: 2; 80: 1; 81: 0; 82: -1; 83: -2; }; 93 | 82: { '-1': 83; 0: 82; 1: 81; 2: 80; 3: 79; 4: 78; 5: 77; 6: 76; 7: 75; 8: 74; 9: 73; 10: 72; 11: 71; 12: 70; 13: 69; 14: 68; 15: 67; 16: 66; 17: 65; 18: 64; 19: 63; 20: 62; 21: 61; 22: 60; 23: 59; 24: 58; 25: 57; 26: 56; 27: 55; 28: 54; 29: 53; 30: 52; 31: 51; 32: 50; 33: 49; 34: 48; 35: 47; 36: 46; 37: 45; 38: 44; 39: 43; 40: 42; 41: 41; 42: 40; 43: 39; 44: 38; 45: 37; 46: 36; 47: 35; 48: 34; 49: 33; 50: 32; 51: 31; 52: 30; 53: 29; 54: 28; 55: 27; 56: 26; 57: 25; 58: 24; 59: 23; 60: 22; 61: 21; 62: 20; 63: 19; 64: 18; 65: 17; 66: 16; 67: 15; 68: 14; 69: 13; 70: 12; 71: 11; 72: 10; 73: 9; 74: 8; 75: 7; 76: 6; 77: 5; 78: 4; 79: 3; 80: 2; 81: 1; 82: 0; 83: -1; 84: -2; }; 94 | 83: { '-1': 84; 0: 83; 1: 82; 2: 81; 3: 80; 4: 79; 5: 78; 6: 77; 7: 76; 8: 75; 9: 74; 10: 73; 11: 72; 12: 71; 13: 70; 14: 69; 15: 68; 16: 67; 17: 66; 18: 65; 19: 64; 20: 63; 21: 62; 22: 61; 23: 60; 24: 59; 25: 58; 26: 57; 27: 56; 28: 55; 29: 54; 30: 53; 31: 52; 32: 51; 33: 50; 34: 49; 35: 48; 36: 47; 37: 46; 38: 45; 39: 44; 40: 43; 41: 42; 42: 41; 43: 40; 44: 39; 45: 38; 46: 37; 47: 36; 48: 35; 49: 34; 50: 33; 51: 32; 52: 31; 53: 30; 54: 29; 55: 28; 56: 27; 57: 26; 58: 25; 59: 24; 60: 23; 61: 22; 62: 21; 63: 20; 64: 19; 65: 18; 66: 17; 67: 16; 68: 15; 69: 14; 70: 13; 71: 12; 72: 11; 73: 10; 74: 9; 75: 8; 76: 7; 77: 6; 78: 5; 79: 4; 80: 3; 81: 2; 82: 1; 83: 0; 84: -1; 85: -2; }; 95 | 84: { '-1': 85; 0: 84; 1: 83; 2: 82; 3: 81; 4: 80; 5: 79; 6: 78; 7: 77; 8: 76; 9: 75; 10: 74; 11: 73; 12: 72; 13: 71; 14: 70; 15: 69; 16: 68; 17: 67; 18: 66; 19: 65; 20: 64; 21: 63; 22: 62; 23: 61; 24: 60; 25: 59; 26: 58; 27: 57; 28: 56; 29: 55; 30: 54; 31: 53; 32: 52; 33: 51; 34: 50; 35: 49; 36: 48; 37: 47; 38: 46; 39: 45; 40: 44; 41: 43; 42: 42; 43: 41; 44: 40; 45: 39; 46: 38; 47: 37; 48: 36; 49: 35; 50: 34; 51: 33; 52: 32; 53: 31; 54: 30; 55: 29; 56: 28; 57: 27; 58: 26; 59: 25; 60: 24; 61: 23; 62: 22; 63: 21; 64: 20; 65: 19; 66: 18; 67: 17; 68: 16; 69: 15; 70: 14; 71: 13; 72: 12; 73: 11; 74: 10; 75: 9; 76: 8; 77: 7; 78: 6; 79: 5; 80: 4; 81: 3; 82: 2; 83: 1; 84: 0; 85: -1; 86: -2; }; 96 | 85: { '-1': 86; 0: 85; 1: 84; 2: 83; 3: 82; 4: 81; 5: 80; 6: 79; 7: 78; 8: 77; 9: 76; 10: 75; 11: 74; 12: 73; 13: 72; 14: 71; 15: 70; 16: 69; 17: 68; 18: 67; 19: 66; 20: 65; 21: 64; 22: 63; 23: 62; 24: 61; 25: 60; 26: 59; 27: 58; 28: 57; 29: 56; 30: 55; 31: 54; 32: 53; 33: 52; 34: 51; 35: 50; 36: 49; 37: 48; 38: 47; 39: 46; 40: 45; 41: 44; 42: 43; 43: 42; 44: 41; 45: 40; 46: 39; 47: 38; 48: 37; 49: 36; 50: 35; 51: 34; 52: 33; 53: 32; 54: 31; 55: 30; 56: 29; 57: 28; 58: 27; 59: 26; 60: 25; 61: 24; 62: 23; 63: 22; 64: 21; 65: 20; 66: 19; 67: 18; 68: 17; 69: 16; 70: 15; 71: 14; 72: 13; 73: 12; 74: 11; 75: 10; 76: 9; 77: 8; 78: 7; 79: 6; 80: 5; 81: 4; 82: 3; 83: 2; 84: 1; 85: 0; 86: -1; 87: -2; }; 97 | 86: { '-1': 87; 0: 86; 1: 85; 2: 84; 3: 83; 4: 82; 5: 81; 6: 80; 7: 79; 8: 78; 9: 77; 10: 76; 11: 75; 12: 74; 13: 73; 14: 72; 15: 71; 16: 70; 17: 69; 18: 68; 19: 67; 20: 66; 21: 65; 22: 64; 23: 63; 24: 62; 25: 61; 26: 60; 27: 59; 28: 58; 29: 57; 30: 56; 31: 55; 32: 54; 33: 53; 34: 52; 35: 51; 36: 50; 37: 49; 38: 48; 39: 47; 40: 46; 41: 45; 42: 44; 43: 43; 44: 42; 45: 41; 46: 40; 47: 39; 48: 38; 49: 37; 50: 36; 51: 35; 52: 34; 53: 33; 54: 32; 55: 31; 56: 30; 57: 29; 58: 28; 59: 27; 60: 26; 61: 25; 62: 24; 63: 23; 64: 22; 65: 21; 66: 20; 67: 19; 68: 18; 69: 17; 70: 16; 71: 15; 72: 14; 73: 13; 74: 12; 75: 11; 76: 10; 77: 9; 78: 8; 79: 7; 80: 6; 81: 5; 82: 4; 83: 3; 84: 2; 85: 1; 86: 0; 87: -1; 88: -2; }; 98 | 87: { '-1': 88; 0: 87; 1: 86; 2: 85; 3: 84; 4: 83; 5: 82; 6: 81; 7: 80; 8: 79; 9: 78; 10: 77; 11: 76; 12: 75; 13: 74; 14: 73; 15: 72; 16: 71; 17: 70; 18: 69; 19: 68; 20: 67; 21: 66; 22: 65; 23: 64; 24: 63; 25: 62; 26: 61; 27: 60; 28: 59; 29: 58; 30: 57; 31: 56; 32: 55; 33: 54; 34: 53; 35: 52; 36: 51; 37: 50; 38: 49; 39: 48; 40: 47; 41: 46; 42: 45; 43: 44; 44: 43; 45: 42; 46: 41; 47: 40; 48: 39; 49: 38; 50: 37; 51: 36; 52: 35; 53: 34; 54: 33; 55: 32; 56: 31; 57: 30; 58: 29; 59: 28; 60: 27; 61: 26; 62: 25; 63: 24; 64: 23; 65: 22; 66: 21; 67: 20; 68: 19; 69: 18; 70: 17; 71: 16; 72: 15; 73: 14; 74: 13; 75: 12; 76: 11; 77: 10; 78: 9; 79: 8; 80: 7; 81: 6; 82: 5; 83: 4; 84: 3; 85: 2; 86: 1; 87: 0; 88: -1; 89: -2; }; 99 | 88: { '-1': 89; 0: 88; 1: 87; 2: 86; 3: 85; 4: 84; 5: 83; 6: 82; 7: 81; 8: 80; 9: 79; 10: 78; 11: 77; 12: 76; 13: 75; 14: 74; 15: 73; 16: 72; 17: 71; 18: 70; 19: 69; 20: 68; 21: 67; 22: 66; 23: 65; 24: 64; 25: 63; 26: 62; 27: 61; 28: 60; 29: 59; 30: 58; 31: 57; 32: 56; 33: 55; 34: 54; 35: 53; 36: 52; 37: 51; 38: 50; 39: 49; 40: 48; 41: 47; 42: 46; 43: 45; 44: 44; 45: 43; 46: 42; 47: 41; 48: 40; 49: 39; 50: 38; 51: 37; 52: 36; 53: 35; 54: 34; 55: 33; 56: 32; 57: 31; 58: 30; 59: 29; 60: 28; 61: 27; 62: 26; 63: 25; 64: 24; 65: 23; 66: 22; 67: 21; 68: 20; 69: 19; 70: 18; 71: 17; 72: 16; 73: 15; 74: 14; 75: 13; 76: 12; 77: 11; 78: 10; 79: 9; 80: 8; 81: 7; 82: 6; 83: 5; 84: 4; 85: 3; 86: 2; 87: 1; 88: 0; 89: -1; 90: -2; }; 100 | 89: { '-1': 90; 0: 89; 1: 88; 2: 87; 3: 86; 4: 85; 5: 84; 6: 83; 7: 82; 8: 81; 9: 80; 10: 79; 11: 78; 12: 77; 13: 76; 14: 75; 15: 74; 16: 73; 17: 72; 18: 71; 19: 70; 20: 69; 21: 68; 22: 67; 23: 66; 24: 65; 25: 64; 26: 63; 27: 62; 28: 61; 29: 60; 30: 59; 31: 58; 32: 57; 33: 56; 34: 55; 35: 54; 36: 53; 37: 52; 38: 51; 39: 50; 40: 49; 41: 48; 42: 47; 43: 46; 44: 45; 45: 44; 46: 43; 47: 42; 48: 41; 49: 40; 50: 39; 51: 38; 52: 37; 53: 36; 54: 35; 55: 34; 56: 33; 57: 32; 58: 31; 59: 30; 60: 29; 61: 28; 62: 27; 63: 26; 64: 25; 65: 24; 66: 23; 67: 22; 68: 21; 69: 20; 70: 19; 71: 18; 72: 17; 73: 16; 74: 15; 75: 14; 76: 13; 77: 12; 78: 11; 79: 10; 80: 9; 81: 8; 82: 7; 83: 6; 84: 5; 85: 4; 86: 3; 87: 2; 88: 1; 89: 0; 90: -1; 91: -2; }; 101 | 90: { '-1': 91; 0: 90; 1: 89; 2: 88; 3: 87; 4: 86; 5: 85; 6: 84; 7: 83; 8: 82; 9: 81; 10: 80; 11: 79; 12: 78; 13: 77; 14: 76; 15: 75; 16: 74; 17: 73; 18: 72; 19: 71; 20: 70; 21: 69; 22: 68; 23: 67; 24: 66; 25: 65; 26: 64; 27: 63; 28: 62; 29: 61; 30: 60; 31: 59; 32: 58; 33: 57; 34: 56; 35: 55; 36: 54; 37: 53; 38: 52; 39: 51; 40: 50; 41: 49; 42: 48; 43: 47; 44: 46; 45: 45; 46: 44; 47: 43; 48: 42; 49: 41; 50: 40; 51: 39; 52: 38; 53: 37; 54: 36; 55: 35; 56: 34; 57: 33; 58: 32; 59: 31; 60: 30; 61: 29; 62: 28; 63: 27; 64: 26; 65: 25; 66: 24; 67: 23; 68: 22; 69: 21; 70: 20; 71: 19; 72: 18; 73: 17; 74: 16; 75: 15; 76: 14; 77: 13; 78: 12; 79: 11; 80: 10; 81: 9; 82: 8; 83: 7; 84: 6; 85: 5; 86: 4; 87: 3; 88: 2; 89: 1; 90: 0; 91: -1; 92: -2; }; 102 | 91: { '-1': 92; 0: 91; 1: 90; 2: 89; 3: 88; 4: 87; 5: 86; 6: 85; 7: 84; 8: 83; 9: 82; 10: 81; 11: 80; 12: 79; 13: 78; 14: 77; 15: 76; 16: 75; 17: 74; 18: 73; 19: 72; 20: 71; 21: 70; 22: 69; 23: 68; 24: 67; 25: 66; 26: 65; 27: 64; 28: 63; 29: 62; 30: 61; 31: 60; 32: 59; 33: 58; 34: 57; 35: 56; 36: 55; 37: 54; 38: 53; 39: 52; 40: 51; 41: 50; 42: 49; 43: 48; 44: 47; 45: 46; 46: 45; 47: 44; 48: 43; 49: 42; 50: 41; 51: 40; 52: 39; 53: 38; 54: 37; 55: 36; 56: 35; 57: 34; 58: 33; 59: 32; 60: 31; 61: 30; 62: 29; 63: 28; 64: 27; 65: 26; 66: 25; 67: 24; 68: 23; 69: 22; 70: 21; 71: 20; 72: 19; 73: 18; 74: 17; 75: 16; 76: 15; 77: 14; 78: 13; 79: 12; 80: 11; 81: 10; 82: 9; 83: 8; 84: 7; 85: 6; 86: 5; 87: 4; 88: 3; 89: 2; 90: 1; 91: 0; 92: -1; 93: -2; }; 103 | 92: { '-1': 93; 0: 92; 1: 91; 2: 90; 3: 89; 4: 88; 5: 87; 6: 86; 7: 85; 8: 84; 9: 83; 10: 82; 11: 81; 12: 80; 13: 79; 14: 78; 15: 77; 16: 76; 17: 75; 18: 74; 19: 73; 20: 72; 21: 71; 22: 70; 23: 69; 24: 68; 25: 67; 26: 66; 27: 65; 28: 64; 29: 63; 30: 62; 31: 61; 32: 60; 33: 59; 34: 58; 35: 57; 36: 56; 37: 55; 38: 54; 39: 53; 40: 52; 41: 51; 42: 50; 43: 49; 44: 48; 45: 47; 46: 46; 47: 45; 48: 44; 49: 43; 50: 42; 51: 41; 52: 40; 53: 39; 54: 38; 55: 37; 56: 36; 57: 35; 58: 34; 59: 33; 60: 32; 61: 31; 62: 30; 63: 29; 64: 28; 65: 27; 66: 26; 67: 25; 68: 24; 69: 23; 70: 22; 71: 21; 72: 20; 73: 19; 74: 18; 75: 17; 76: 16; 77: 15; 78: 14; 79: 13; 80: 12; 81: 11; 82: 10; 83: 9; 84: 8; 85: 7; 86: 6; 87: 5; 88: 4; 89: 3; 90: 2; 91: 1; 92: 0; 93: -1; 94: -2; }; 104 | 93: { '-1': 94; 0: 93; 1: 92; 2: 91; 3: 90; 4: 89; 5: 88; 6: 87; 7: 86; 8: 85; 9: 84; 10: 83; 11: 82; 12: 81; 13: 80; 14: 79; 15: 78; 16: 77; 17: 76; 18: 75; 19: 74; 20: 73; 21: 72; 22: 71; 23: 70; 24: 69; 25: 68; 26: 67; 27: 66; 28: 65; 29: 64; 30: 63; 31: 62; 32: 61; 33: 60; 34: 59; 35: 58; 36: 57; 37: 56; 38: 55; 39: 54; 40: 53; 41: 52; 42: 51; 43: 50; 44: 49; 45: 48; 46: 47; 47: 46; 48: 45; 49: 44; 50: 43; 51: 42; 52: 41; 53: 40; 54: 39; 55: 38; 56: 37; 57: 36; 58: 35; 59: 34; 60: 33; 61: 32; 62: 31; 63: 30; 64: 29; 65: 28; 66: 27; 67: 26; 68: 25; 69: 24; 70: 23; 71: 22; 72: 21; 73: 20; 74: 19; 75: 18; 76: 17; 77: 16; 78: 15; 79: 14; 80: 13; 81: 12; 82: 11; 83: 10; 84: 9; 85: 8; 86: 7; 87: 6; 88: 5; 89: 4; 90: 3; 91: 2; 92: 1; 93: 0; 94: -1; 95: -2; }; 105 | 94: { '-1': 95; 0: 94; 1: 93; 2: 92; 3: 91; 4: 90; 5: 89; 6: 88; 7: 87; 8: 86; 9: 85; 10: 84; 11: 83; 12: 82; 13: 81; 14: 80; 15: 79; 16: 78; 17: 77; 18: 76; 19: 75; 20: 74; 21: 73; 22: 72; 23: 71; 24: 70; 25: 69; 26: 68; 27: 67; 28: 66; 29: 65; 30: 64; 31: 63; 32: 62; 33: 61; 34: 60; 35: 59; 36: 58; 37: 57; 38: 56; 39: 55; 40: 54; 41: 53; 42: 52; 43: 51; 44: 50; 45: 49; 46: 48; 47: 47; 48: 46; 49: 45; 50: 44; 51: 43; 52: 42; 53: 41; 54: 40; 55: 39; 56: 38; 57: 37; 58: 36; 59: 35; 60: 34; 61: 33; 62: 32; 63: 31; 64: 30; 65: 29; 66: 28; 67: 27; 68: 26; 69: 25; 70: 24; 71: 23; 72: 22; 73: 21; 74: 20; 75: 19; 76: 18; 77: 17; 78: 16; 79: 15; 80: 14; 81: 13; 82: 12; 83: 11; 84: 10; 85: 9; 86: 8; 87: 7; 88: 6; 89: 5; 90: 4; 91: 3; 92: 2; 93: 1; 94: 0; 95: -1; 96: -2; }; 106 | 95: { '-1': 96; 0: 95; 1: 94; 2: 93; 3: 92; 4: 91; 5: 90; 6: 89; 7: 88; 8: 87; 9: 86; 10: 85; 11: 84; 12: 83; 13: 82; 14: 81; 15: 80; 16: 79; 17: 78; 18: 77; 19: 76; 20: 75; 21: 74; 22: 73; 23: 72; 24: 71; 25: 70; 26: 69; 27: 68; 28: 67; 29: 66; 30: 65; 31: 64; 32: 63; 33: 62; 34: 61; 35: 60; 36: 59; 37: 58; 38: 57; 39: 56; 40: 55; 41: 54; 42: 53; 43: 52; 44: 51; 45: 50; 46: 49; 47: 48; 48: 47; 49: 46; 50: 45; 51: 44; 52: 43; 53: 42; 54: 41; 55: 40; 56: 39; 57: 38; 58: 37; 59: 36; 60: 35; 61: 34; 62: 33; 63: 32; 64: 31; 65: 30; 66: 29; 67: 28; 68: 27; 69: 26; 70: 25; 71: 24; 72: 23; 73: 22; 74: 21; 75: 20; 76: 19; 77: 18; 78: 17; 79: 16; 80: 15; 81: 14; 82: 13; 83: 12; 84: 11; 85: 10; 86: 9; 87: 8; 88: 7; 89: 6; 90: 5; 91: 4; 92: 3; 93: 2; 94: 1; 95: 0; 96: -1; 97: -2; }; 107 | 96: { '-1': 97; 0: 96; 1: 95; 2: 94; 3: 93; 4: 92; 5: 91; 6: 90; 7: 89; 8: 88; 9: 87; 10: 86; 11: 85; 12: 84; 13: 83; 14: 82; 15: 81; 16: 80; 17: 79; 18: 78; 19: 77; 20: 76; 21: 75; 22: 74; 23: 73; 24: 72; 25: 71; 26: 70; 27: 69; 28: 68; 29: 67; 30: 66; 31: 65; 32: 64; 33: 63; 34: 62; 35: 61; 36: 60; 37: 59; 38: 58; 39: 57; 40: 56; 41: 55; 42: 54; 43: 53; 44: 52; 45: 51; 46: 50; 47: 49; 48: 48; 49: 47; 50: 46; 51: 45; 52: 44; 53: 43; 54: 42; 55: 41; 56: 40; 57: 39; 58: 38; 59: 37; 60: 36; 61: 35; 62: 34; 63: 33; 64: 32; 65: 31; 66: 30; 67: 29; 68: 28; 69: 27; 70: 26; 71: 25; 72: 24; 73: 23; 74: 22; 75: 21; 76: 20; 77: 19; 78: 18; 79: 17; 80: 16; 81: 15; 82: 14; 83: 13; 84: 12; 85: 11; 86: 10; 87: 9; 88: 8; 89: 7; 90: 6; 91: 5; 92: 4; 93: 3; 94: 2; 95: 1; 96: 0; 97: -1; 98: -2; }; 108 | 97: { '-1': 98; 0: 97; 1: 96; 2: 95; 3: 94; 4: 93; 5: 92; 6: 91; 7: 90; 8: 89; 9: 88; 10: 87; 11: 86; 12: 85; 13: 84; 14: 83; 15: 82; 16: 81; 17: 80; 18: 79; 19: 78; 20: 77; 21: 76; 22: 75; 23: 74; 24: 73; 25: 72; 26: 71; 27: 70; 28: 69; 29: 68; 30: 67; 31: 66; 32: 65; 33: 64; 34: 63; 35: 62; 36: 61; 37: 60; 38: 59; 39: 58; 40: 57; 41: 56; 42: 55; 43: 54; 44: 53; 45: 52; 46: 51; 47: 50; 48: 49; 49: 48; 50: 47; 51: 46; 52: 45; 53: 44; 54: 43; 55: 42; 56: 41; 57: 40; 58: 39; 59: 38; 60: 37; 61: 36; 62: 35; 63: 34; 64: 33; 65: 32; 66: 31; 67: 30; 68: 29; 69: 28; 70: 27; 71: 26; 72: 25; 73: 24; 74: 23; 75: 22; 76: 21; 77: 20; 78: 19; 79: 18; 80: 17; 81: 16; 82: 15; 83: 14; 84: 13; 85: 12; 86: 11; 87: 10; 88: 9; 89: 8; 90: 7; 91: 6; 92: 5; 93: 4; 94: 3; 95: 2; 96: 1; 97: 0; 98: -1; 99: -2; }; 109 | 98: { '-1': 99; 0: 98; 1: 97; 2: 96; 3: 95; 4: 94; 5: 93; 6: 92; 7: 91; 8: 90; 9: 89; 10: 88; 11: 87; 12: 86; 13: 85; 14: 84; 15: 83; 16: 82; 17: 81; 18: 80; 19: 79; 20: 78; 21: 77; 22: 76; 23: 75; 24: 74; 25: 73; 26: 72; 27: 71; 28: 70; 29: 69; 30: 68; 31: 67; 32: 66; 33: 65; 34: 64; 35: 63; 36: 62; 37: 61; 38: 60; 39: 59; 40: 58; 41: 57; 42: 56; 43: 55; 44: 54; 45: 53; 46: 52; 47: 51; 48: 50; 49: 49; 50: 48; 51: 47; 52: 46; 53: 45; 54: 44; 55: 43; 56: 42; 57: 41; 58: 40; 59: 39; 60: 38; 61: 37; 62: 36; 63: 35; 64: 34; 65: 33; 66: 32; 67: 31; 68: 30; 69: 29; 70: 28; 71: 27; 72: 26; 73: 25; 74: 24; 75: 23; 76: 22; 77: 21; 78: 20; 79: 19; 80: 18; 81: 17; 82: 16; 83: 15; 84: 14; 85: 13; 86: 12; 87: 11; 88: 10; 89: 9; 90: 8; 91: 7; 92: 6; 93: 5; 94: 4; 95: 3; 96: 2; 97: 1; 98: 0; 99: -1; }; 110 | 99: { '-1': 100; 0: 99; 1: 98; 2: 97; 3: 96; 4: 95; 5: 94; 6: 93; 7: 92; 8: 91; 9: 90; 10: 89; 11: 88; 12: 87; 13: 86; 14: 85; 15: 84; 16: 83; 17: 82; 18: 81; 19: 80; 20: 79; 21: 78; 22: 77; 23: 76; 24: 75; 25: 74; 26: 73; 27: 72; 28: 71; 29: 70; 30: 69; 31: 68; 32: 67; 33: 66; 34: 65; 35: 64; 36: 63; 37: 62; 38: 61; 39: 60; 40: 59; 41: 58; 42: 57; 43: 56; 44: 55; 45: 54; 46: 53; 47: 52; 48: 51; 49: 50; 50: 49; 51: 48; 52: 47; 53: 46; 54: 45; 55: 44; 56: 43; 57: 42; 58: 41; 59: 40; 60: 39; 61: 38; 62: 37; 63: 36; 64: 35; 65: 34; 66: 33; 67: 32; 68: 31; 69: 30; 70: 29; 71: 28; 72: 27; 73: 26; 74: 25; 75: 24; 76: 23; 77: 22; 78: 21; 79: 20; 80: 19; 81: 18; 82: 17; 83: 16; 84: 15; 85: 14; 86: 13; 87: 12; 88: 11; 89: 10; 90: 9; 91: 8; 92: 7; 93: 6; 94: 5; 95: 4; 96: 3; 97: 2; 98: 1; 99: 0; }; 111 | }; 112 | -------------------------------------------------------------------------------- /lib/truncate.d.ts: -------------------------------------------------------------------------------- 1 | import type { ReverseRest } from "./reverse-rest" 2 | 3 | // 4 | // This is the generic solution - doesn't scale very well with TypeScript: 5 | // 6 | // type Truncate 7 | // < 8 | // T extends readonly unknown[ ], 9 | // N extends number, 10 | // Ret extends unknown[ ] = [ ] 11 | // > = 12 | // N extends Ret[ 'length' ] 13 | // ? Ret 14 | // : Truncate< Rest< T >, N, [ ...Ret, First< T > ] >; 15 | 16 | 17 | /** 18 | * Return the first N elements from array 19 | */ 20 | export type Truncate< T extends readonly unknown[ ], N extends number > = 21 | N extends 0 22 | ? [ ] 23 | : T extends readonly [ ] 24 | ? [ ] 25 | : T extends readonly [ 26 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 27 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 28 | infer T14, infer T15, infer T16, infer T17, infer T18, infer T19, 29 | infer T20, ...infer Tx 30 | ] 31 | ? N extends 20 ? 32 | [ 33 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 34 | T15, T16, T17, T18, T19, T20 35 | ] 36 | : N extends 19 ? 37 | [ 38 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 39 | T15, T16, T17, T18, T19 40 | ] 41 | : N extends 18 ? 42 | [ 43 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 44 | T15, T16, T17, T18 45 | ] 46 | : N extends 17 ? 47 | [ 48 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 49 | T15, T16, T17 50 | ] 51 | : N extends 16 ? 52 | [ 53 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 54 | T15, T16 55 | ] 56 | : N extends 15 ? 57 | [ 58 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 59 | T15 60 | ] 61 | : N extends 14 ? 62 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 63 | : N extends 13 ? 64 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 65 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 66 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 67 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 68 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 69 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 70 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 71 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 72 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 73 | : N extends 4 ? [ T1, T2, T3, T4 ] 74 | : N extends 3 ? [ T1, T2, T3 ] 75 | : N extends 2 ? [ T1, T2 ] 76 | : N extends 1 ? [ T1 ] 77 | : N extends 0 ? [ ] 78 | : T // This is the above-max-limit fallback 79 | : T extends readonly [ 80 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 81 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 82 | infer T14, infer T15, infer T16, infer T17, infer T18, infer T19 83 | ] 84 | ? N extends 20 ? 85 | [ 86 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 87 | T15, T16, T17, T18, T19 88 | ] 89 | : N extends 19 ? 90 | [ 91 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 92 | T15, T16, T17, T18, T19 93 | ] 94 | : N extends 18 ? 95 | [ 96 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 97 | T15, T16, T17, T18 98 | ] 99 | : N extends 17 ? 100 | [ 101 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 102 | T15, T16, T17 103 | ] 104 | : N extends 16 ? 105 | [ 106 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 107 | T15, T16 108 | ] 109 | : N extends 15 ? 110 | [ 111 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 112 | T15 113 | ] 114 | : N extends 14 ? 115 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 116 | : N extends 13 ? 117 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 118 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 119 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 120 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 121 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 122 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 123 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 124 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 125 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 126 | : N extends 4 ? [ T1, T2, T3, T4 ] 127 | : N extends 3 ? [ T1, T2, T3 ] 128 | : N extends 2 ? [ T1, T2 ] 129 | : N extends 1 ? [ T1 ] 130 | : N extends 0 ? [ ] 131 | : [ ] 132 | : T extends readonly [ 133 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 134 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 135 | infer T14, infer T15, infer T16, infer T17, infer T18 136 | ] 137 | ? N extends 20 ? 138 | [ 139 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 140 | T15, T16, T17, T18 141 | ] 142 | : N extends 19 ? 143 | [ 144 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 145 | T15, T16, T17, T18 146 | ] 147 | : N extends 18 ? 148 | [ 149 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 150 | T15, T16, T17, T18 151 | ] 152 | : N extends 17 ? 153 | [ 154 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 155 | T15, T16, T17 156 | ] 157 | : N extends 16 ? 158 | [ 159 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 160 | T15, T16 161 | ] 162 | : N extends 15 ? 163 | [ 164 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 165 | T15 166 | ] 167 | : N extends 14 ? 168 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 169 | : N extends 13 ? 170 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 171 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 172 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 173 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 174 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 175 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 176 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 177 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 178 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 179 | : N extends 4 ? [ T1, T2, T3, T4 ] 180 | : N extends 3 ? [ T1, T2, T3 ] 181 | : N extends 2 ? [ T1, T2 ] 182 | : N extends 1 ? [ T1 ] 183 | : N extends 0 ? [ ] 184 | : [ ] 185 | : T extends readonly [ 186 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 187 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 188 | infer T14, infer T15, infer T16, infer T17 189 | ] 190 | ? N extends 20 ? 191 | [ 192 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 193 | T15, T16, T17 194 | ] 195 | : N extends 19 ? 196 | [ 197 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 198 | T15, T16, T17 199 | ] 200 | : N extends 18 ? 201 | [ 202 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 203 | T15, T16, T17 204 | ] 205 | : N extends 17 ? 206 | [ 207 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 208 | T15, T16, T17 209 | ] 210 | : N extends 16 ? 211 | [ 212 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 213 | T15, T16 214 | ] 215 | : N extends 15 ? 216 | [ 217 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 218 | T15 219 | ] 220 | : N extends 14 ? 221 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 222 | : N extends 13 ? 223 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 224 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 225 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 226 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 227 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 228 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 229 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 230 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 231 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 232 | : N extends 4 ? [ T1, T2, T3, T4 ] 233 | : N extends 3 ? [ T1, T2, T3 ] 234 | : N extends 2 ? [ T1, T2 ] 235 | : N extends 1 ? [ T1 ] 236 | : N extends 0 ? [ ] 237 | : [ ] 238 | : T extends readonly [ 239 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 240 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 241 | infer T14, infer T15, infer T16 242 | ] 243 | ? N extends 20 ? 244 | [ 245 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 246 | T15, T16 247 | ] 248 | : N extends 19 ? 249 | [ 250 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 251 | T15, T16 252 | ] 253 | : N extends 18 ? 254 | [ 255 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 256 | T15, T16 257 | ] 258 | : N extends 17 ? 259 | [ 260 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 261 | T15, T16 262 | ] 263 | : N extends 16 ? 264 | [ 265 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 266 | T15, T16 267 | ] 268 | : N extends 15 ? 269 | [ 270 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 271 | T15 272 | ] 273 | : N extends 14 ? 274 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 275 | : N extends 13 ? 276 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 277 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 278 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 279 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 280 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 281 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 282 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 283 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 284 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 285 | : N extends 4 ? [ T1, T2, T3, T4 ] 286 | : N extends 3 ? [ T1, T2, T3 ] 287 | : N extends 2 ? [ T1, T2 ] 288 | : N extends 1 ? [ T1 ] 289 | : N extends 0 ? [ ] 290 | : [ ] 291 | : T extends readonly [ 292 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 293 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 294 | infer T14, infer T15 295 | ] 296 | ? N extends 20 ? 297 | [ 298 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 299 | T15 300 | ] 301 | : N extends 19 ? 302 | [ 303 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 304 | T15 305 | ] 306 | : N extends 18 ? 307 | [ 308 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 309 | T15 310 | ] 311 | : N extends 17 ? 312 | [ 313 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 314 | T15 315 | ] 316 | : N extends 16 ? 317 | [ 318 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 319 | T15 320 | ] 321 | : N extends 15 ? 322 | [ 323 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 324 | T15 325 | ] 326 | : N extends 14 ? 327 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 328 | : N extends 13 ? 329 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 330 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 331 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 332 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 333 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 334 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 335 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 336 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 337 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 338 | : N extends 4 ? [ T1, T2, T3, T4 ] 339 | : N extends 3 ? [ T1, T2, T3 ] 340 | : N extends 2 ? [ T1, T2 ] 341 | : N extends 1 ? [ T1 ] 342 | : N extends 0 ? [ ] 343 | : [ ] 344 | : T extends readonly [ 345 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 346 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13, 347 | infer T14 348 | ] 349 | ? N extends 20 ? 350 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 351 | : N extends 19 ? 352 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 353 | : N extends 18 ? 354 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 355 | : N extends 17 ? 356 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 357 | : N extends 16 ? 358 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 359 | : N extends 15 ? 360 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 361 | : N extends 14 ? 362 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ] 363 | : N extends 13 ? 364 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 365 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 366 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 367 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 368 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 369 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 370 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 371 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 372 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 373 | : N extends 4 ? [ T1, T2, T3, T4 ] 374 | : N extends 3 ? [ T1, T2, T3 ] 375 | : N extends 2 ? [ T1, T2 ] 376 | : N extends 1 ? [ T1 ] 377 | : N extends 0 ? [ ] 378 | : [ ] 379 | : T extends readonly [ 380 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 381 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13 382 | ] 383 | ? N extends 20 ? 384 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 385 | : N extends 19 ? 386 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 387 | : N extends 18 ? 388 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 389 | : N extends 17 ? 390 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 391 | : N extends 16 ? 392 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 393 | : N extends 15 ? 394 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 395 | : N extends 14 ? 396 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 397 | : N extends 13 ? 398 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ] 399 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 400 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 401 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 402 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 403 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 404 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 405 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 406 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 407 | : N extends 4 ? [ T1, T2, T3, T4 ] 408 | : N extends 3 ? [ T1, T2, T3 ] 409 | : N extends 2 ? [ T1, T2 ] 410 | : N extends 1 ? [ T1 ] 411 | : N extends 0 ? [ ] 412 | : [ ] 413 | : T extends readonly [ 414 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 415 | infer T8, infer T9, infer T10, infer T11, infer T12 416 | ] 417 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 418 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 419 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 420 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 421 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 422 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 423 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 424 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 425 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ] 426 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 427 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 428 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 429 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 430 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 431 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 432 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 433 | : N extends 4 ? [ T1, T2, T3, T4 ] 434 | : N extends 3 ? [ T1, T2, T3 ] 435 | : N extends 2 ? [ T1, T2 ] 436 | : N extends 1 ? [ T1 ] 437 | : N extends 0 ? [ ] 438 | : [ ] 439 | : T extends readonly [ 440 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 441 | infer T8, infer T9, infer T10, infer T11 442 | ] 443 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 444 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 445 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 446 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 447 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 448 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 449 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 450 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 451 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 452 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ] 453 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ] 454 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 455 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 456 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 457 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 458 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 459 | : N extends 4 ? [ T1, T2, T3, T4 ] 460 | : N extends 3 ? [ T1, T2, T3 ] 461 | : N extends 2 ? [ T1, T2 ] 462 | : N extends 1 ? [ T1 ] 463 | : N extends 0 ? [ ] 464 | : [ ] 465 | : T extends readonly [ 466 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 467 | infer T8, infer T9 468 | ] 469 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 470 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 471 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 472 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 473 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 474 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 475 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 476 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 477 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 478 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 479 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 480 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ] 481 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 482 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 483 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 484 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 485 | : N extends 4 ? [ T1, T2, T3, T4 ] 486 | : N extends 3 ? [ T1, T2, T3 ] 487 | : N extends 2 ? [ T1, T2 ] 488 | : N extends 1 ? [ T1 ] 489 | : N extends 0 ? [ ] 490 | : [ ] 491 | : T extends readonly [ 492 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 493 | infer T8 494 | ] 495 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 496 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 497 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 498 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 499 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 500 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 501 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 502 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 503 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 504 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 505 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 506 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 507 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ] 508 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 509 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 510 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 511 | : N extends 4 ? [ T1, T2, T3, T4 ] 512 | : N extends 3 ? [ T1, T2, T3 ] 513 | : N extends 2 ? [ T1, T2 ] 514 | : N extends 1 ? [ T1 ] 515 | : N extends 0 ? [ ] 516 | : [ ] 517 | : T extends readonly [ 518 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7, 519 | ] 520 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7 ] 521 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7 ] 522 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7 ] 523 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7 ] 524 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7 ] 525 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7 ] 526 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7 ] 527 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7 ] 528 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7 ] 529 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7 ] 530 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7 ] 531 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7 ] 532 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7 ] 533 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ] 534 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 535 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 536 | : N extends 4 ? [ T1, T2, T3, T4 ] 537 | : N extends 3 ? [ T1, T2, T3 ] 538 | : N extends 2 ? [ T1, T2 ] 539 | : N extends 1 ? [ T1 ] 540 | : N extends 0 ? [ ] 541 | : [ ] 542 | : T extends readonly [ 543 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6 544 | ] 545 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6 ] 546 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6 ] 547 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6 ] 548 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6 ] 549 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6 ] 550 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6 ] 551 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6 ] 552 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6 ] 553 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6 ] 554 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6 ] 555 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6 ] 556 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6 ] 557 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6 ] 558 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6 ] 559 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ] 560 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 561 | : N extends 4 ? [ T1, T2, T3, T4 ] 562 | : N extends 3 ? [ T1, T2, T3 ] 563 | : N extends 2 ? [ T1, T2 ] 564 | : N extends 1 ? [ T1 ] 565 | : N extends 0 ? [ ] 566 | : [ ] 567 | : T extends readonly [ infer T1, infer T2, infer T3, infer T4, infer T5 ] 568 | ? N extends 20 ? [ T1, T2, T3, T4, T5 ] 569 | : N extends 19 ? [ T1, T2, T3, T4, T5 ] 570 | : N extends 18 ? [ T1, T2, T3, T4, T5 ] 571 | : N extends 17 ? [ T1, T2, T3, T4, T5 ] 572 | : N extends 16 ? [ T1, T2, T3, T4, T5 ] 573 | : N extends 15 ? [ T1, T2, T3, T4, T5 ] 574 | : N extends 14 ? [ T1, T2, T3, T4, T5 ] 575 | : N extends 13 ? [ T1, T2, T3, T4, T5 ] 576 | : N extends 12 ? [ T1, T2, T3, T4, T5 ] 577 | : N extends 11 ? [ T1, T2, T3, T4, T5 ] 578 | : N extends 10 ? [ T1, T2, T3, T4, T5 ] 579 | : N extends 9 ? [ T1, T2, T3, T4, T5 ] 580 | : N extends 8 ? [ T1, T2, T3, T4, T5 ] 581 | : N extends 7 ? [ T1, T2, T3, T4, T5 ] 582 | : N extends 6 ? [ T1, T2, T3, T4, T5 ] 583 | : N extends 5 ? [ T1, T2, T3, T4, T5 ] 584 | : N extends 4 ? [ T1, T2, T3, T4 ] 585 | : N extends 3 ? [ T1, T2, T3 ] 586 | : N extends 2 ? [ T1, T2 ] 587 | : N extends 1 ? [ T1 ] 588 | : N extends 0 ? [ ] 589 | : [ ] 590 | : T extends readonly [ infer T1, infer T2, infer T3, infer T4 ] 591 | ? N extends 20 ? [ T1, T2, T3, T4 ] 592 | : N extends 19 ? [ T1, T2, T3, T4 ] 593 | : N extends 18 ? [ T1, T2, T3, T4 ] 594 | : N extends 17 ? [ T1, T2, T3, T4 ] 595 | : N extends 16 ? [ T1, T2, T3, T4 ] 596 | : N extends 15 ? [ T1, T2, T3, T4 ] 597 | : N extends 14 ? [ T1, T2, T3, T4 ] 598 | : N extends 13 ? [ T1, T2, T3, T4 ] 599 | : N extends 12 ? [ T1, T2, T3, T4 ] 600 | : N extends 11 ? [ T1, T2, T3, T4 ] 601 | : N extends 10 ? [ T1, T2, T3, T4 ] 602 | : N extends 9 ? [ T1, T2, T3, T4 ] 603 | : N extends 8 ? [ T1, T2, T3, T4 ] 604 | : N extends 7 ? [ T1, T2, T3, T4 ] 605 | : N extends 6 ? [ T1, T2, T3, T4 ] 606 | : N extends 5 ? [ T1, T2, T3, T4 ] 607 | : N extends 4 ? [ T1, T2, T3, T4 ] 608 | : N extends 3 ? [ T1, T2, T3 ] 609 | : N extends 2 ? [ T1, T2 ] 610 | : N extends 1 ? [ T1 ] 611 | : N extends 0 ? [ ] 612 | : [ ] 613 | : T extends readonly [ infer T1, infer T2, infer T3 ] 614 | ? N extends 20 ? [ T1, T2, T3 ] 615 | : N extends 19 ? [ T1, T2, T3 ] 616 | : N extends 18 ? [ T1, T2, T3 ] 617 | : N extends 17 ? [ T1, T2, T3 ] 618 | : N extends 16 ? [ T1, T2, T3 ] 619 | : N extends 15 ? [ T1, T2, T3 ] 620 | : N extends 14 ? [ T1, T2, T3 ] 621 | : N extends 13 ? [ T1, T2, T3 ] 622 | : N extends 12 ? [ T1, T2, T3 ] 623 | : N extends 11 ? [ T1, T2, T3 ] 624 | : N extends 10 ? [ T1, T2, T3 ] 625 | : N extends 9 ? [ T1, T2, T3 ] 626 | : N extends 8 ? [ T1, T2, T3 ] 627 | : N extends 7 ? [ T1, T2, T3 ] 628 | : N extends 6 ? [ T1, T2, T3 ] 629 | : N extends 5 ? [ T1, T2, T3 ] 630 | : N extends 4 ? [ T1, T2, T3 ] 631 | : N extends 3 ? [ T1, T2, T3 ] 632 | : N extends 2 ? [ T1, T2 ] 633 | : N extends 1 ? [ T1 ] 634 | : N extends 0 ? [ ] 635 | : [ ] 636 | : T extends readonly [ infer T1, infer T2 ] 637 | ? N extends 20 ? [ T1, T2 ] 638 | : N extends 19 ? [ T1, T2 ] 639 | : N extends 18 ? [ T1, T2 ] 640 | : N extends 17 ? [ T1, T2 ] 641 | : N extends 16 ? [ T1, T2 ] 642 | : N extends 15 ? [ T1, T2 ] 643 | : N extends 14 ? [ T1, T2 ] 644 | : N extends 13 ? [ T1, T2 ] 645 | : N extends 12 ? [ T1, T2 ] 646 | : N extends 11 ? [ T1, T2 ] 647 | : N extends 10 ? [ T1, T2 ] 648 | : N extends 9 ? [ T1, T2 ] 649 | : N extends 8 ? [ T1, T2 ] 650 | : N extends 7 ? [ T1, T2 ] 651 | : N extends 6 ? [ T1, T2 ] 652 | : N extends 5 ? [ T1, T2 ] 653 | : N extends 4 ? [ T1, T2 ] 654 | : N extends 3 ? [ T1, T2 ] 655 | : N extends 2 ? [ T1, T2 ] 656 | : N extends 1 ? [ T1 ] 657 | : N extends 0 ? [ ] 658 | : [ ] 659 | : T extends readonly [ infer T1 ] 660 | ? N extends 20 ? [ T1 ] 661 | : N extends 19 ? [ T1 ] 662 | : N extends 18 ? [ T1 ] 663 | : N extends 17 ? [ T1 ] 664 | : N extends 16 ? [ T1 ] 665 | : N extends 15 ? [ T1 ] 666 | : N extends 14 ? [ T1 ] 667 | : N extends 13 ? [ T1 ] 668 | : N extends 12 ? [ T1 ] 669 | : N extends 11 ? [ T1 ] 670 | : N extends 10 ? [ T1 ] 671 | : N extends 9 ? [ T1 ] 672 | : N extends 8 ? [ T1 ] 673 | : N extends 7 ? [ T1 ] 674 | : N extends 6 ? [ T1 ] 675 | : N extends 5 ? [ T1 ] 676 | : N extends 4 ? [ T1 ] 677 | : N extends 3 ? [ T1 ] 678 | : N extends 2 ? [ T1 ] 679 | : N extends 1 ? [ T1 ] 680 | : N extends 0 ? [ ] 681 | : [ ] 682 | : [ ]; 683 | 684 | export type TruncateLastIfSameSize< T extends unknown[ ], N extends number > = 685 | T[ 'length' ] extends N ? ReverseRest< T > : T; 686 | -------------------------------------------------------------------------------- /lib/union.d.ts: -------------------------------------------------------------------------------- 1 | import type { Rest } from './rest' 2 | 3 | /** 4 | * Return the tuple {T} where all element types are unioned with {Union} 5 | */ 6 | export type UnionAll< T extends readonly unknown[ ], Union > = 7 | { 8 | R: [ T[ 0 ] | Union, ...UnionAll< Rest< T >, Union > ]; 9 | 1: [ T[ 0 ] | Union ]; 10 | 0: [ ]; 11 | }[ 12 | T[ 'length' ] extends 0 ? 0 : T[ 'length' ] extends 1 ? 1 : 'R' 13 | ]; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meta-types", 3 | "version": "0.0.0-development", 4 | "description": "TypeScript meta functions for (especially variadic) meta programming", 5 | "author": "Gustaf Räntilä", 6 | "license": "MIT", 7 | "bugs": { 8 | "url": "https://github.com/grantila/meta-types/issues" 9 | }, 10 | "homepage": "https://github.com/grantila/meta-types#readme", 11 | "types": "./index.d.ts", 12 | "directories": {}, 13 | "engines": { 14 | "node": ">=14" 15 | }, 16 | "files": [ 17 | "index.d.ts", 18 | "lib" 19 | ], 20 | "scripts": { 21 | "build": "rimraf dist && tsc -p tsconfig.prod.json", 22 | "dtslint": "dtslint tests", 23 | "test": "yarn dtslint", 24 | "cz": "git-cz" 25 | }, 26 | "pre-commit": [ 27 | "build" 28 | ], 29 | "repository": { 30 | "type": "git", 31 | "url": "https://github.com/grantila/meta-types" 32 | }, 33 | "keywords": [ 34 | "type", 35 | "types", 36 | "generic", 37 | "typescript", 38 | "meta", 39 | "variadic" 40 | ], 41 | "devDependencies": { 42 | "cz-conventional-changelog": "^3.3.0", 43 | "dtslint": "^4.2.1", 44 | "pre-commit": "^1.2.2", 45 | "rimraf": "^4.1.2", 46 | "typescript": "^4.9.5" 47 | }, 48 | "config": { 49 | "commitizen": { 50 | "path": "./node_modules/cz-conventional-changelog" 51 | } 52 | }, 53 | "packageManager": "yarn@3.2.4" 54 | } 55 | -------------------------------------------------------------------------------- /tests/add.ts: -------------------------------------------------------------------------------- 1 | import { Add } from 'meta-types' 2 | 3 | 4 | // $ExpectType 5 5 | export type Test_0_Add = Add< 0, 5 >; 6 | 7 | // $ExpectType 5 8 | export type Test_Add_0 = Add< 5, 0 >; 9 | 10 | // $ExpectType 6 11 | export type Test_1_Add = Add< 1, 5 >; 12 | 13 | // $ExpectType 6 14 | export type Test_Add_1 = Add< 5, 1 >; 15 | 16 | // $ExpectType 9 17 | export type Test_4_Add = Add< 4, 5 >; 18 | 19 | // $ExpectType 9 20 | export type Test_Add_4 = Add< 5, 4 >; 21 | -------------------------------------------------------------------------------- /tests/fill.ts: -------------------------------------------------------------------------------- 1 | import { Fill } from 'meta-types' 2 | 3 | 4 | // $ExpectType [] 5 | export type Test_0_GT_5 = Fill< 0, 5 >; 6 | 7 | // $ExpectType [0, 0, 0, 0, 0] 8 | export type Test_5_GT_0 = Fill< 5, 0 >; 9 | 10 | // $ExpectType [5] 11 | export type Test_1_GT_5 = Fill< 1, 5 >; 12 | 13 | // $ExpectType [1, 1, 1, 1, 1] 14 | export type Test_5_GT_1 = Fill< 5, 1 >; 15 | 16 | // $ExpectType [5, 5, 5, 5] 17 | export type Test_4_GT_5 = Fill< 4, 5 >; 18 | 19 | // $ExpectType [4, 4, 4, 4, 4] 20 | export type Test_5_GT_4 = Fill< 5, 4 >; 21 | 22 | // $ExpectType [97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97] 23 | export type Test_98_GT_97 = Fill< 98, 97 >; 24 | 25 | // $ExpectType [98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98] 26 | export type Test_97_GT_98 = Fill< 97, 98 >; 27 | -------------------------------------------------------------------------------- /tests/greater-than.ts: -------------------------------------------------------------------------------- 1 | import { GreaterThan } from 'meta-types' 2 | 3 | 4 | // $ExpectType false 5 | export type Test_0_GT_5 = GreaterThan< 0, 5 >; 6 | 7 | // $ExpectType true 8 | export type Test_5_GT_0 = GreaterThan< 5, 0 >; 9 | 10 | // $ExpectType false 11 | export type Test_1_GT_5 = GreaterThan< 1, 5 >; 12 | 13 | // $ExpectType true 14 | export type Test_5_GT_1 = GreaterThan< 5, 1 >; 15 | 16 | // $ExpectType false 17 | export type Test_4_GT_5 = GreaterThan< 4, 5 >; 18 | 19 | // $ExpectType true 20 | export type Test_5_GT_4 = GreaterThan< 5, 4 >; 21 | 22 | // $ExpectType true 23 | export type Test_98_GT_97 = GreaterThan< 98, 97 >; 24 | 25 | // $ExpectType false 26 | export type Test_97_GT_98 = GreaterThan< 97, 98 >; 27 | -------------------------------------------------------------------------------- /tests/index.d.ts: -------------------------------------------------------------------------------- 1 | // Minimum TypeScript Version: 4.1 2 | // see https://github.com/Microsoft/dtslint#specify-a-typescript-version for more information 3 | -------------------------------------------------------------------------------- /tests/slice.ts: -------------------------------------------------------------------------------- 1 | import { Slice } from 'meta-types' 2 | 3 | 4 | // $ExpectType [] 5 | export type Test_Empty = Slice< [ ], 0, 0 >; 6 | 7 | // $ExpectType [] 8 | export type Test_Empty_Default = Slice< [ ] >; 9 | 10 | // $ExpectType [] 11 | export type Test_Empty_OOR = Slice< [ ], 5, 7 >; 12 | 13 | // $ExpectType [] 14 | export type Test_1_Nothing = Slice< [ 5 ], 0, 0 >; 15 | 16 | // $ExpectType [] 17 | export type Test_1_OOR = Slice< [ 5 ], 3, 5 >; 18 | 19 | // $ExpectType [5] 20 | export type Test_1_Default = Slice< [ 5 ] >; 21 | 22 | // $ExpectType [5] 23 | export type Test_1_1 = Slice< [ 5 ], 0, 1 >; 24 | 25 | // $ExpectType [] 26 | export type Test_Many_None = Slice< [ 5, 6, 7, 8 ], 3, 3 >; 27 | 28 | // $ExpectType [] 29 | export type Test_Many_OOR = Slice< [ 5, 6, 7, 8 ], 5, 7 >; 30 | 31 | // $ExpectType [5, 6, 7, 8] 32 | export type Test_Many_Default = Slice< [ 5, 6, 7, 8 ] >; 33 | 34 | // $ExpectType [7, 8] 35 | export type Test_Many_Start = Slice< [ 5, 6, 7, 8 ], 2 >; 36 | 37 | // $ExpectType [6, 7] 38 | export type Test_Many_Slice = Slice< [ 5, 6, 7, 8 ], 1, 3 >; 39 | -------------------------------------------------------------------------------- /tests/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "lib": ["es6"], 5 | "noImplicitAny": true, 6 | "noImplicitThis": true, 7 | "strictNullChecks": true, 8 | "strictFunctionTypes": true, 9 | "alwaysStrict": true, 10 | "noEmit": true, 11 | "baseUrl": ".", 12 | "paths": { "meta-types": ["../"] } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["dtslint/dtslint.json"], 3 | "rules": { 4 | "semicolon": false, 5 | "no-useless-files": false, 6 | "no-relative-import-in-test": false, 7 | "strict-export-declare-modifiers": false, 8 | "no-consecutive-blank-lines": false, 9 | "max-line-length": false 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": false, 4 | "declaration": true, 5 | "sourceMap": true, 6 | "lib": [ "ES2019" ], 7 | "noEmit": true, 8 | "target": "ES2019", 9 | "module": "ESNext", 10 | "moduleResolution": "node", 11 | "noImplicitAny": true, 12 | "noUnusedLocals": true, 13 | "pretty": true, 14 | "strict": true, 15 | "alwaysStrict": true, 16 | }, 17 | "include": [ 18 | "lib", 19 | "index.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "dist", 6 | "noEmit": false 7 | }, 8 | "exclude": [ 9 | "**/tests" 10 | ] 11 | } 12 | --------------------------------------------------------------------------------